Meta-bowling Golf


22

งานของคุณคือการสร้างโปรแกรมที่สั้นที่สุด (A) ที่เอาท์พุทโปรแกรมอื่น (B) ด้วยไบต์ที่ไม่ซ้ำกันมากที่สุดซึ่งจะส่งผลให้โปรแกรมต้นฉบับ (A) โดยพื้นฐานแล้วคุณกำลังเล่นกอล์ฟโปรแกรมครึ่งหนึ่งของคู่ouroboros (หรือที่รู้จักกันเป็นระยะซ้ำควินิน) และโบว์ลิ่งอีกครึ่งหนึ่ง A และ B อาจเป็นภาษาต่าง ๆ

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

<number of unique bytes in B> / <number of bytes in A>คะแนนสุดท้ายของคุณคือ คะแนนสูงสุดชนะ ควรสังเกตว่าคะแนนสูงสุดทางทฤษฎีคือ 256

  • โปรแกรม A ต้องมีความยาวอย่างน้อยหนึ่งไบต์
  • โปรแกรม B ไม่สามารถประกอบไปด้วย no-ops ทั้งหมดอย่างน้อยหนึ่งตัวอักษรจะต้องส่งผลกระทบต่อการส่งออกในบางวิธี
  • กฎมาตรฐานของผลการทดสอบทั้งสองโปรแกรม โดยเฉพาะอย่างยิ่งไม่อนุญาตให้ใช้ข้อผิดพลาด quines

เพื่อความสอดคล้องของรูปแบบคำตอบให้เริ่มคำตอบด้วยสิ่งต่อไปนี้:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

เพื่อให้เป็นที่ชัดเจนฉันคิดว่าคุณจะต้องชี้แจงหัวข้อย่อยที่สองเล็กน้อย อักขระหมายความว่าไม่มีตัวเลือกจริง ๆ
ข้าวสาลีตัวช่วยสร้าง

โดยไบต์ที่ไม่ซ้ำกันคุณหมายถึงไบต์ที่ใช้ร่วมกันหรือความคล้ายคลึงกันระหว่างสอง
KrystosTheOverlord

@ KrystosTheOverlord มันจะอยู่ภายในโปรแกรม B โดยไม่มีความเกี่ยวข้องกับโปรแกรม A ตัวอย่างเช่นaaaaaมีหนึ่งไบต์ที่ไม่ซ้ำกันและabcdeมี 5 ไบต์ที่ไม่ซ้ำกัน
Beefster

1
ฉันแค่รอโปรแกรมที่โปรแกรม A อยู่ด้วยกันหรือ lenguage
ศูนย์รวมของความไม่รู้

4
@EmbodimentofIgnorance Program A ทำคะแนนเป็นจำนวนไบต์ไม่ใช่ไบต์ที่ไม่ซ้ำกัน Lenguage / Unary จะทำคะแนนอย่างน่ากลัว
Jo King

คำตอบ:


14

Japté & Japtorคะแนน: 255/38 = 6.71

โปรแกรม A :

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

โปรแกรม Bยาวเกิน 8kB นานจนการเชื่อมโยงขาดดังนั้นฉันจะไม่วางทั้งหมด นี่คือตัวอย่าง:

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

ฉันไม่สามารถหาวิธีที่จะให้NULไบต์ทำงานซึ่งเป็นสาเหตุที่โปรแกรม B มีอักขระที่ไม่ซ้ำกัน 255 ตัวเท่านั้น ส่วนใหญ่ของโปรแกรม B ประกอบด้วย 255 สำเนาของโปรแกรมเดียวซึ่งมีการเปลี่ยนแปลงไบต์ที่ไม่เกี่ยวข้องหนึ่งครั้งในแต่ละครั้งและการประมวลผล 254 ครั้งแรกจะถูกละเว้น

สำหรับคำอธิบายที่ฉันจะเริ่มต้นด้วยการนี้ฉบับง่ายเพื่อให้เกิด B เป็นเรื่องง่ายที่จะหารือเกี่ยวกับ

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

โปรแกรมนี้จะขึ้นอยู่กับน้ำหนักบรรทุกที่มีความสามารถขั้นพื้นฐานควิน Japt สตริงที่เริ่มต้นประกอบด้วยซ้ำของส่วนที่เหลือของโปรแกรมiQ ²แทรกเครื่องหมายคำพูดและรายการที่ซ้ำกันเพื่อสร้างการแสดงสตริงของโปรแกรมทั้งหมดแล้ว¯23ตัดออกเองและทุกอย่างหลังจากนั้น สตริงผลลัพธ์เป็นโปรแกรมที่แสดงผลลัพธ์ของโปรแกรม A :

"iQ ²¯23
3õ@i'#+Xd"iQ ²

Uฉันจะอ้างถึงข้อความนี้เป็น

บรรทัดสุดท้ายของ A ซ้ำกันUหลายครั้งโดยมีการเปลี่ยนแปลงเล็กน้อยในแต่ละครั้ง โดยเฉพาะสำหรับแต่ละหมายเลขXในช่วง[1...3]มันจะออกผลลัพธ์"#c" + Uที่cเป็นตัวละครที่มี Xcharcode พฤติกรรมเริ่มต้นของ Japt คือการส่งออกสตริงที่ไม่มีเครื่องหมายอัญประกาศและคั่นด้วยเครื่องหมายจุลภาคดังนั้นนี่คือผลลัพธ์ของ Simplified A ของเรา (โปรดทราบว่ามีไบต์ที่ไม่สามารถพิมพ์ได้ระหว่างแต่ละ#และ"iQ:

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

เราจะเรียกว่าประยุกต์ Bนี้

ย่อ B มีโครงสร้างที่เรียบง่ายสลับกันระหว่างและ#c Uโชคดีสำหรับคำตอบนี้แต่ละคน#cและUได้รับการปฏิบัติเหมือนคั่นด้วยเครื่องหมายจุลภาคและในสถานการณ์เช่นนี้พฤติกรรมของทุกอย่างยกเว้นที่ผ่านมาUไม่มีผลต่อการส่งออก ส่วนของ B แบบง่ายซึ่งมีผลต่อผลลัพธ์คือ:

"iQ ²¯23
3õ@i'#+Xd"iQ ²

ซึ่งเหมือนกันกับUที่เรารู้จักเอาท์พุทประยุกต์ A.

ข้อแตกต่างระหว่างแบบย่อ A และโครงการเป็นว่าแทนที่จะสร้างสำเนาสำหรับช่วงโปรแกรมจริงสร้างสำเนาสำหรับช่วง[1...3] [1...256]ผลลัพธ์นั้นมี 256 เวอร์ชั่น#cแต่ละตัวมีอักขระที่แตกต่างกันแม้ว่าเวอร์ชั่นสุดท้าย "" "จะเป็นอักขระแบบหลายไบต์ดังนั้นจึงไม่เพิ่มไบต์ที่ไม่ซ้ำกัน แต่ทุกอย่างยกเว้นตัวสุดท้ายUจะยังถูกละเว้น


ดีมาก :) หากว่านี้ทำงาน 38 ไบต์?
ปุย

@Shaggy 27ความต้องการที่จะถูกปรับแต่งเมื่อใดก็ตามที่มีการบันทึกไบต์ แต่นอกเหนือจากนั้นดูเหมือนว่ามันใช้งานได้
Kamil Drakari

1
@Shaggy การให้คะแนนขึ้นอยู่กับจำนวนไบต์ที่ไม่ซ้ำกันใน B และมีเพียง 256 ไบต์ที่เป็นไปได้ เท่าที่ฉันรู้แม้กระทั่งเวอร์ชันใหม่ของ B ก็ไม่มีไบต์ Null
Kamil Drakari

พยายามบางสิ่งบางอย่างเพื่อให้มันทำงานกับโมฆะทาง แต่ทั้งหมดล้มเหลว
ปุย

5

โปรแกรม A, Gol> <> , 256/20 ไบต์ = 12.8

"44XFL|r2ssl3%Q4s]|H

ลองออนไลน์!

โปรแกรม B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

ลองออนไลน์!

โปรแกรมจะสลับระหว่างการแสดงผลตัวเองตามด้วยทุกไบต์และเพียงแค่แสดงผลออกไป

คำอธิบาย:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack

1

โปรแกรม A: 05AB1E , คะแนน: 256/41 256/31 bytes = 8.258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

ลองออนไลน์

โปรแกรม B: 05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

ลองออนไลน์

คำอธิบาย:

ใก้ลสำหรับ 05AB1E เป็นหนึ่งในนี้0"D34çý"D34çý( 14 ไบต์ ) ให้บริการโดย @OliverNi ₅Ýç'q†vy27ǝD}Jคำตอบของฉันใช้รุ่นแก้ไขของควินว่าโดยการเพิ่ม

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

โปรแกรม B จะสิ้นสุดลงทันทีที่มาถึงqดังนั้นโปรแกรม B ที่แท้จริงคือ:

0"D34çý₅Ýç'q†22ǝ"D34çýq

ทุกอย่างหลังจากนั้นจะถูกละเว้นและด้านบนของสแต็ก ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) จะถูกส่งออกโดยปริยาย

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