ทำเกือบเป็นควิน


12

ฉันอยากหลอกเพื่อนด้วยการให้ยาควินินที่เกือบจะได้ผล

สร้างโปรแกรมที่เมื่อรันจะส่งออกโปรแกรม แต่ปิดหนึ่งตัวอักษร สามารถเพิ่มเอาออกหนึ่งอักขระหรือทั้งสองอย่าง (เปลี่ยนแปลงหนึ่งอักขระ) แต่มีเพียงหนึ่งในตัวละคร

คะแนนของคุณจะ(length of your program) / floor(sqrt(number of times the program almost quines))อยู่ที่ไหน ( / 0อินฟินิตี้อยู่ที่ไหน)

number of times the program almost quinesโปรแกรมของคุณทำงานกี่ครั้งในขณะที่เปลี่ยนเพียงหนึ่งตัวอักษรใน stdout โปรแกรมของคุณอาจไม่ยอมรับอินพุต อาจไม่พิมพ์โปรแกรมที่พิมพ์ไปแล้ว

คุณไม่สามารถเพิ่มอักขระที่คุณเพิ่มไว้ก่อนหน้านี้ก่อนหน้านี้หรือลบอักขระจากดัชนีเดียวกัน ตัวอย่างเช่นหากคุณเพิ่ม1ก่อนหน้านี้และคุณเพิ่ม1อีกครั้งนั่นคือที่number of times the program almost quinesหยุด หากคุณลบตัวอักษรตัวแรกคุณจะไม่สามารถลบตัวอักษรตัวแรกออกได้อีก หากคุณเปลี่ยนอักขระตัวที่สามเป็น a 2คุณไม่สามารถเพิ่ม2หรือลบอักขระตัวที่สามได้


ควินอะไร
Abr001am

@ Agawa001 ควินเป็นโปรแกรมที่พิมพ์เอง

คำตอบ:


7

CJam, 0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

ที่นี่ หมายถึงอักขระที่ไม่สามารถพิมพ์ได้ด้วยรหัสจุด 128 ลองใช้งานออนไลน์

ความคิด

วิธีการนี้จะผนวกอักขระ UCS ทั้งหมด (ข้อมูลจำเพาะดั้งเดิม) ด้วยจุดโค้ดระหว่าง U + 4000000 และ U + 7FFFFFFF กับสตริงว่างเริ่มแรกที่ตามหลังบล็อกโค้ด

เราเลือกUTF-8ซึ่งเข้ารหัสอักขระแต่ละตัวโดยใช้สตริง 6 ไบต์ดังนี้:

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

ดังนั้นเราสามารถเข้ารหัสอักขระที่nในช่วงนี้ได้โดยคำนวณตัวเลขที่สำคัญน้อยที่สุด 6 ตัวในฐาน 64 และเพิ่ม 252 ให้กับค่าที่สำคัญที่สุดและ 128 ตัวที่เหลือ

เกณฑ์การให้คะแนน

มี2 ** 31 = 2,147,483,6486 ไบต์ UTF-8 ตัวอักษรความยาวของรหัสเดิมคือ 39 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806ดังนั้นคะแนนและ

มันทำงานอย่างไร

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

ฉันยอมรับสิ่งนี้เพราะคะแนนแรกของคุณ(ต่ำกว่า) ฉันจะอนุญาต

6

CJam, 46 ไบต์, 65504 เพิ่ม, 65505 del, คะแนน 0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

ทดสอบที่นี่

รูปแบบพื้นฐานเป็นควาย CJam ทั่วไปมาตรฐาน ถึง "เกือบ quine" มีความคิดเห็นe#ที่ท้ายบล็อกของ quine ซึ่งฉันสามารถเพิ่มตัวละครได้อย่างอิสระโดยไม่กระทบกับโค้ด โปรดทราบว่าในตอนแรกความคิดเห็นมีช่องว่างเดียว

โปรแกรมยังคงเพิ่มตัวอักษรที่ด้านหน้าของความคิดเห็นเริ่มต้นที่!และจากนั้นไปตามลำดับของค่า ASCII รหัสตัวละครของ CJam ล้อมรอบหลังจาก 2 16ดังนั้นในบางจุดสิ่งนี้จะเพิ่มไบต์ว่าง เมื่อสิ่งนั้นเกิดขึ้นโปรแกรมจะเริ่มลบไบต์ออกจากจุดสิ้นสุดของความคิดเห็น (เช่นตำแหน่งของอักขระที่ถูกลบจะแตกต่างกันเสมอ) จนกว่าความคิดเห็นนั้นจะว่างเปล่า


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