Quine ทำรังรัสเซีย


18

ตุ๊กตาทำรังรัสเซียซึ่งเป็นที่รู้จักกันทั่วไปว่าเป็นตุ๊กตา Matryoshkaเป็นตุ๊กตาที่มีขนาดเล็กกว่าของตัวเองซึ่งมีอีกรุ่นที่เล็กกว่าของตัวเองซึ่งมีรุ่นที่เล็กกว่าของตัวเองซึ่งมีรุ่นที่เล็กกว่าของตัวเองซึ่ง มีเวอร์ชันที่เล็กกว่าของตัวเอง ... - จนกระทั่งในที่สุดอันสุดท้ายจะว่างเปล่า ตัวอย่าง:

Matryoshka Dolls <3

วันนี้เป้าหมายของคุณคือการเลียนแบบประเพณีของรัสเซียนี้โดยการเขียนโปรแกรมหรือฟังก์ชั่นที่เมื่อมันมีตัวเอง N ครั้งจะพิมพ์ตัวเองที่มีสำเนาของตัวเอง N-1 ครั้ง

ตัวอย่างเช่นโปรแกรมตุ๊กตาabcdจะมีโปรแกรมN = 3 abababcdcdcdซึ่งจะพิมพ์โปรแกรม N = 2 ababcdcdซึ่งพิมพ์โปรแกรมต้นฉบับ N = 1 abcdซึ่งในที่สุดก็พิมพ์ N = 0 ซึ่งว่างเปล่า ในทางทฤษฎีแล้วสิ่งนี้ควรใช้งานได้กับค่าที่สมเหตุสมผลของ N

กฎ:

  • นี่คือโปรแกรม TIO ที่จะช่วยสร้างโปรแกรมตุ๊กตาขึ้นอยู่กับโปรแกรมของคุณ
  • ใช้กฎมาตรฐาน Quine
  • มีช่องโหว่มาตรฐาน
  • 'มี' หมายถึงตรงกลางของรุ่นก่อนหน้าดังนั้นโซลูชันของคุณจะต้องมีจำนวนไบต์เป็นบวก โปรแกรมที่มีความยาว 10 จะมีสำเนาของต้นฉบับที่แทรกหลังจากไบต์ที่ห้าจากนั้นอีกหนึ่งโปรแกรมหลังจากไบต์ที่สิบเป็นต้น
  • อนุญาตให้มีช่องว่างต่อท้ายเดียวในเอาต์พุต
  • เนื่องจากนี่คือเป้าหมายของคุณคือทำให้โปรแกรม N = 1 ของคุณสั้นที่สุดเท่าที่จะเป็นไปได้
  • คำอธิบายของรหัสของคุณจะได้รับการชื่นชม


สำหรับสิ่งที่Nเป็นรหัสขนาดที่วัดได้?
ข้อบกพร่อง

@flawr N = 1 .....
Jo King


12
เป็นภาพเคลื่อนไหวที่จำเป็นจริง ๆ !
ขนปุย

คำตอบ:


9

อันเดอร์ 4 ไบต์

N = 1: ลองออนไลน์

 ()S

N = 2: ลองออนไลน์

 ( ()S)S

N = 3: ลองออนไลน์

 ( ( ()S)S)S

คำอธิบาย:

อธิบายตนเอง แต่ฉันเพิ่มเข้าไปแล้ว

  • (...)S พิมพ์อะไรก็ได้ระหว่างวงเล็บไปที่ STDOUT
  • ช่องว่างก่อนที่มันจะไม่มีการเลือกที่จะนับไบต์และให้สอดคล้องกับกฎของการท้าทาย

9

JavaScript, 36 32 ไบต์

ใช้ประโยชน์จากความจริงที่Function.prototype.toString()ไม่มีข้อโต้แย้งและจะเพิกเฉยต่อสิ่งที่ผ่านไป

แรงบันดาลใจส่วนหนึ่งจากการแก้ปัญหาของ user202729

f=_=>f.toString( ).slice(14,-16)

ลองมัน

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>


7

JavaScript (Node.js)ขนาด 46 ไบต์

โปรแกรมเต็มรูปแบบ ดังนั้นจึงconsole.logจำเป็น

ใช้แนวคิดจากคำตอบนี้เพื่อบันทึกบางไบต์

l=console.log;   g=_=>{};l((''+g).slice(4,-1))

ลองออนไลน์! ลองออนไลน์สองครั้ง! ลองออนไลน์สามครั้ง!


วิธีการของฉันคล้ายกับที่ใช้ในคำตอบของ Kevin Cruijssen ค้นหาโครงสร้างแบบซ้อนได้ (ฟังก์ชันในกรณีนี้)


5

เยลลี่ขนาด 16 ไบต์

Ṿḣ-9Ḋð}“““““““““

ลองออนไลน์!

ทวีคูณ: ลองออนไลน์!

สามเท่า: ลองออนไลน์!


เจลลี่ไม่มีโครงสร้างแบบซ้อนได้ แต่ตัวอักษรสตริงจะถูกยกเลิกอัตโนมัติ


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

จะลองใช้วิธีการที่แตกต่างกันเพื่อดูว่าสั้นกว่านี้หรือไม่



2

dc , 4 ไบต์

 []p

คล้ายกับคำตอบอื่น ๆ เนื่องจากสตริงที่dcมีตัวคั่นstart ( [) และ end ( ]) (นั่นคือ"ไม่ทำงานทั้งสองอย่าง ฯลฯ ) พวกมันจะอยู่ได้โดยไม่ต้องใช้ความพยายามใด ๆ pปริ้น.

N = 1: ลองออนไลน์!

N = 2: ลองซ้อนกัน!

N = 3: ลองใช้ซ้อนกัน!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.