โซ่ Quine แบบสองทิศทาง


9

PPCG ยังไม่ได้รับผลตอบรับที่เพียงพอ ...

ท้าทาย:

งานของคุณคือการสร้างโปรแกรม "A0" เมื่อโปรแกรมนี้รันโดยไม่มีอินพุตมันจะไม่มีผลใด ๆ เมื่อโปรแกรมนี้ทำงานด้วยอินพุตมันจะส่งออก "A1" เมื่อเรียกใช้ "A1" โดยไม่มีอินพุตอินพุตจะส่งเอาต์พุต "A0" เมื่อ "A1" ทำงานด้วยอินพุตมันจะส่งออก "A2" ค่อนข้างมาก "A (k)" จะส่งออก "A (k-1)" เมื่อเรียกใช้โดยไม่มีอินพุตและจะส่งออก "A (k + 1)" เมื่อเรียกใช้ด้วยอินพุต

รายละเอียด

ฉันเชื่อว่าความท้าทายนี้ง่ายพอ ไม่มีกฎอื่น ๆ จริงๆ ทุกโปรแกรมจะต้องมีอย่างน้อย 1 ไบต์โดยวิธีการ คุณอาจสันนิษฐานว่าข้อมูลที่ป้อนจะประกอบด้วยอักขระ ASCII เท่านั้นและคุณอาจละเว้นช่องว่างหากคุณต้องการ แต่คุณไม่สามารถระบุอินพุตเฉพาะ เอาต์พุตอาจเป็น STDOUT หรือ STDERR แต่โปรแกรมทั้งหมดของคุณจะต้องแสดงผลลัพธ์เป็นแบบเดียวกัน อีกอันหนึ่งอาจมีข้อความ (ดังนั้นคุณอาจส่งออกไปยัง STDOUT แล้วออกโดยมีข้อผิดพลาด) ขอบคุณ @Dennis ที่ชี้ให้เห็นว่า

โปรแกรมทั้งหมดจะต้องเป็นภาษาเดียวกันและแต่ละโปรแกรมจะต้องไม่ซ้ำกันจากส่วนที่เหลือของพวกเขา

คะแนนเท่ากับความยาวของโปรแกรม "A0" นี่เป็นความท้าทายของนักกอล์ฟที่มีคะแนนต่ำที่สุด!


ฉันเสียใจที่จะทำนายว่าการส่งส่วนใหญ่จะมี A (k) และ A (k + 1) แตกต่างกันด้วยอักขระตัวเดียวที่ถูกเพิ่มเข้าไปในสตริงที่กำลังเติบโต :(
Sparr

@ Sparr แต่น่าเสียดายที่มันอาจจะเป็นสิ่งที่เกิดขึ้น :( โอเคฉันไม่สามารถหาวิธีที่จะสร้างกฎที่ชัดเจนได้
HyperNeutrino

คุณสามารถส่งออกไปหนึ่งในสองที่ฉันไม่ได้ดูหมิ่นหากฉันตีความอย่างถูกต้อง หากเราพิมพ์เอาต์พุตที่ต้องการไปยัง STDOUT, STDERR ต้องว่างเปล่าหรือไม่? เพราะมันได้รับอนุญาต udually ที่จะออกด้วยข้อผิดพลาด
เดนนิส

โปรแกรมทั้งหมดจะต้องแตกต่างกันหรือไม่ คำถามไม่ได้บอกอย่างนั้น

4
นอกจากนี้ฉันขอแนะนำชื่อที่มีความหมายมากกว่าเช่น "Bidirectional Quine Chain" ได้ไหม "super meta quine" ไม่ได้พูดอะไรมากไปกว่าโปรแกรมที่พิมพ์โปรแกรมอื่น ๆ และจะทำให้ยากต่อการค้นหาความท้าทายนี้ในอนาคต
Martin Ender

คำตอบ:


1

Pip , 28 ไบต์

V Y"I#qSti0+i?`V Y`.RPyRtiu"

ลองออนไลน์!

คำอธิบาย

นี้เป็นรุ่นที่มีการปรับเปลี่ยนที่รู้จักกันที่สั้นที่สุด Pip V Y"`V Y`.RPy"ควิน ควินนั้นทำงานได้โดยการกำหนดสตริง, yanking มันเป็นyตัวแปรแล้วประเมินมัน เมื่อประเมินแล้วสตริงจะใช้การตอบกลับของy(เช่นการตัดค่าของyเครื่องหมายคำพูดคู่) และเชื่อมต่อลวดลายตามตัวอักษร`V Y`กับด้านหน้าของสตริง

กลยุทธ์ของเราคือการใส่0โปรแกรมจากนั้นแทนที่0ด้วย10ถ้ามีอินพุตหรือแทนที่10ด้วย0หากไม่มีอินพุต (ดังนั้น A ( k ) จะมีตัวเลขที่ประกอบด้วยk 1 ตามด้วย 0) 0และ10สะดวกเพราะมีตัวแปรในตัว ( iและtตามลำดับ) ด้วยค่าเหล่านั้นดังนั้นเราสามารถอ้างอิงได้โดยไม่ต้องใช้ตัวเลขจริง .

ดังนั้นแทนที่จะRPyเราต้องการRP yRitถ้ามีการป้อนข้อมูลและRP yRtiถ้าไม่ได้ เราสามารถรวมทั้งสองกรณีโดยการเปลี่ยนค่าของtและiหากมีการป้อนข้อมูล ( I#q Sti) RP yRtiจากนั้นทำ (เรามีการทดสอบ#qที่ระยะเวลาของการป้อนข้อมูลเพราะปัจจัยการผลิตที่ชอบ0มี falsey.)

ตอนนี้เราแค่ต้องได้รับตัวอักษร0ในรหัสและจัดการกับกรณีพิเศษของ A0 ที่ไม่มีผลผลิต ทั้งสองสามารถแก้ไขได้โดยการทดสอบ0+iและกลับมาuถ้ามันเป็นเท็จ:

  • สำหรับk > 0 ใด ๆตัวเลขใน A ( k ) จะไม่ใช่ศูนย์ดังนั้นจึงเป็นจริง (เช่น110+i)
  • สำหรับk = 0 ตัวเลขใน A ( k ) จะเป็นศูนย์:
    • หากมีการป้อนข้อมูลiและtมีการแลกเปลี่ยนและiเป็น 10 0+iยังคงเป็นความจริง
    • หากไม่มีอินพุตiยังคงเป็น 0 และ0+iเป็นเท็จ แทนที่จะเป็นแกนควินเราจะเอาท์พุทuซึ่งเป็นตัวแปรในตัวสำหรับศูนย์ ไม่มีการพิมพ์ใด ๆ

เยี่ยมมาก! ทำงานเหมือนจับใจ
HyperNeutrino

1

Python 2, 93 ไบต์

มีการป้อนบรรทัดต่อท้าย

p=1+2*bool(input())-1;s='print"p=%r+2*bool(input())-1;s=%r*(p>0);exec s"%(p,s)'*(p>0);exec s

ลองใช้ด้วยอินพุต | ลองโดยไม่ต้องป้อนข้อมูล

นี่แก้ไขจากคำตอบของฉันในคำถามที่คล้ายกัน

pหากมีการป้อนข้อมูลแล้วมันจะเพิ่มขึ้น ดังนั้นโปรแกรมที่ได้จะเป็นp=2+...เช่นp=3+...นั้นเป็นต้น


นี้ไม่ได้รับรู้เป็น input 0
fənɛtɪk

@LliwTelracs Input ต้องล้อมรอบด้วยเครื่องหมายอัญประกาศ (ต้องเป็น sting) ดูไฮเปอร์ลิงก์ในคำตอบ
mbomb007

โปรแกรมของคุณทำงานกับสตริงและตัวเลขอื่น ๆ ที่ไม่ใช่ 0
fəˈnɛtɪk

1
@LliwTelracs ทีนี้อย่าพยายามใช้ตัวเลข ตามมติที่ฉันสามารถใช้และจำเป็นต้องป้อนข้อมูลไปยังถูกล้อมรอบด้วยคำพูดมากกว่าการใช้input() หากคุณต้องการที่จะป้อนข้อมูลศูนย์การใช้งานraw_input() "0"
mbomb007

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