เซลล์ที่ปลายรุ้ง


31

เราทุกคนรู้หรืออย่างน้อยก็เคยรู้จักbrainfuckหนึ่งในภาษาลึกลับที่มีชื่อเสียงและมีอิทธิพลมากที่สุด ในขณะที่การใช้งานส่วนใหญ่ใช้เทปที่ไม่มีที่สิ้นสุดคอมไพเลอร์ดั้งเดิมโดย Urban Müllerมีเทปเซลล์ 30000 เซลล์ ความจริงที่รู้จักกันน้อย * คือมีคุณค่าพิเศษจริง ๆ ในตอนท้ายของเทปสิ่งที่แทบไม่เคยมีปฏิสัมพันธ์กับในโปรแกรม brainfuck ทั่วไป

ในขณะที่คุณสามารถพิมพ์ค่านี้ด้วย 29999 >s และ a ., brainfuck เป็นที่รู้จักสำหรับการแก้ปัญหาที่สั้นและกระชับดังนั้นเป้าหมายของคุณคือการพิมพ์ค่านี้ด้วยจำนวนอักขระขั้นต่ำ

* นิยาย

กฎ:

  • ทบทวนคำแนะนำ brainfuck:
    • +/ -: เพิ่ม / ลดเซลล์ปัจจุบันล้อมจาก 255 เป็น 0 เมื่อ 255 เพิ่มขึ้นและกลับกัน
    • </ >: เลื่อนตัวชี้ไปทางซ้าย / ขวาบนเทป
    • .: พิมพ์ค่าของเซลล์ปัจจุบัน
    • [: ข้ามไปที่ตรงกัน]หากค่าที่เซลล์เป็น 0
    • ]: ข้ามไปที่ตรงกัน[หากค่าในเซลล์ไม่ใช่ 0
  • ในกรณีนี้,(รับอินพุต) ไม่ทำอะไรเลยเนื่องจากคอมไพเลอร์ดั้งเดิมออกจากเซลล์ที่ไม่เปลี่ยนแปลงบน EOF และโปรแกรมนี้ไม่ควรรับอินพุต
  • ในตอนแรกเทปจะถูกเติมด้วย 0s ทั้งหมดยกเว้นเซลล์ 30000 ซึ่งมีค่าที่ไม่รู้จัก
  • ตัวชี้เริ่มต้นที่เซลล์ 1 และควรลงท้ายด้วยเซลล์ 30000 โดยพิมพ์
  • เซลล์ทางด้านซ้ายของ 1 และทางด้านขวาของ 30,000 มีพฤติกรรมที่ไม่ได้กำหนดดังนั้นการแก้ปัญหาไม่ควรเยี่ยมชมเซลล์เหล่านี้
  • หมายเหตุว่าค่าที่ 30000 คืออาจจะเป็น 0 ดังนั้นก็วนลูปจนกว่าคุณจะตีไม่ใช่ศูนย์เซลล์จะไม่ทำงาน
  • คุณควรพิมพ์เฉพาะค่าที่เซลล์ 30000
  • ทางออกที่สั้นที่สุดชนะ!
    • Tie-breaker เป็นโปรแกรมที่มีประสิทธิภาพมากขึ้น (ดำเนินการในขั้นตอนน้อยที่สุด) ตามด้วยเวลาการส่งที่เร็วที่สุด

เคล็ดลับ: การแยกผลไม้แนะนำให้ใช้https://copy.sh/brainfuckเพื่อทดสอบรหัสของคุณ ข้อมูลจำเพาะมีรายละเอียดตามที่อธิบายไว้ในการท้าทายนี้และคุณสามารถเลือกabortตัวเลือกเพื่อให้โปรแกรมของคุณหยุดทำงานหากขอบเขตไม่เพียงพอ


Sandbox (ลบแล้ว)
Jo King

3
1 .ไบต์: ผมชนะ.
ผลไม้แยกแยะ

1
@EsolangingFruit ให้ฉันมีอาการหลงผิดของฉันได้โปรด ...
Jo King

1
ฉันขอแนะนำให้เปลี่ยนกฎเป็น "เริ่มแรกเซลล์ทั้งหมดมีค่าเป็น 0 ยกเว้นเซลล์สุดท้ายซึ่งมีค่าที่ไม่รู้จัก"
user202729

4
เคล็ดลับสำหรับทุกคนที่ทำสิ่งนี้: copy.sh/brainfuckอาจเป็นเว็บไซต์ที่ดีที่สุดสำหรับการทำเช่นนี้เพราะมันใช้ BF ตามที่อธิบายไว้ในความท้าทายนี้และมีเทป 30k เป็นค่าเริ่มต้น การเคลื่อนที่ผ่านจุดสิ้นสุดของเทปทำให้ล่ามหยุดการทำงาน
ผลไม้แยกแยะ

คำตอบ:



12

50 ไบต์

>+[>+[<]>->+]>-<<[>>-------[[>]+[<]>-]<<-]>>>[>]>.

ลองที่นี่!

ส่วนแรก ( >+[>+[<]>->+]>-<<) ตั้งค่าเทปเป็น

0*12 121' 0 110

ส่วนถัดไป ( [>>-------[[>]+[<]>-]<<-]) ทำซ้ำ 121 ครั้งเพิ่ม 249 1วินาทีต่อท้ายเทปทุกครั้ง หากคุณเรียนรู้คณิตศาสตร์ได้อย่างรวดเร็วคุณอาจรับรู้ผลลัพธ์ 121 * 249 นี้ใน 30129 1วินาที แต่การทำซ้ำครั้งแรกมี 110 ที่เหลือเพื่อจัดการและต่อท้าย ( 110-7) เพียง103 1วินาทีต่อเทปซึ่งหมายความว่ามีเพียง 29983 1วินาที เทปสุดท้ายดูเหมือนว่า:

0*12 0' 0 0 1*29983 0 ???

และสุดท้ายที่>>>[>]>.จะพิมพ์ค่า

อัลกอริทึมการบันทึกอื่น ๆ :

  • 252 * 119 = 29988 (เช่น 50 ไบต์)
  • 163 * 184 = 29992 (56 ไบต์)
  • 204 * 147 = 29988 (60 ไบต์)
  • 153 * 196 = 29988 (56 ไบต์)
  • 191 * 157 = 29987 (57 ไบต์)
  • 254 * 118 = 29972 (56 ไบต์)
    • อันนี้เป็นอันที่ฉันคิดว่าใกล้ที่สุดต่อการตี 50 เนื่องจากไบต์พิเศษนั้นโดยทั่วไปแล้วจะเดินทางไกล หากฉันสามารถหาอัลกอริทึมที่สร้าง 118 และเคลื่อนที่ได้ไกลกว่า 14 เซลล์สิ่งนี้อาจเอาชนะได้

3

81

-[+>+[<]>++]<<+[-->-[-<]>]>-[>[->+[[->+<]<]>>>]<[-<<+>>]<<<-]>-------[[->+<]>-]>.

สิ่งนี้จะเคลื่อนไป 150 เซลล์ 200 ครั้ง

มันยาวกว่าที่ฉันต้องการและเป็นอุปสรรคต่อการเล่นกอล์ฟ:

ฉันไม่รู้ว่าทำไมฉันทำงานอีกต่อไป

นี่คือที่ทิ้งกระจุยกระจายกับการชดเชยสำหรับคนโดยไปยังจุดที่บางคนอาจจะยกเลิก ฉันได้เพิ่มและลบเซ็กเมนต์ต่าง ๆ มากมายจนฉันจำไม่ได้แล้วว่าทำไมฉันถึงวางบางสิ่งไว้ในที่นั้น (ตัวอย่างเช่นทำไมส่วนแรกเริ่มต้นเซลล์เทปเป็น 199 และ 151 แทนที่จะเป็น 200 และ 150)

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

-[+>+[<]>++]<<+[-->-[-<]>]>-

0 0 0 199' 155

[
  n' k 0
  >[
    n k' j
    ->+[[->+<]<]>
    0' n k-1 j+1 OR
    n 0 0' j+1
    >>
  ]
  0*k n 0 0 k 0'
  <[-<<+>>]<<<-
  0*k n-1' k
]
>-------[[->+<]>-]>.

สิ่งนี้ไม่ได้พิมพ์ค่าจริงและหากค่าเป็นบวกค่าดังกล่าวจะล้น แต่เป็นความพยายามที่ยอดเยี่ยม
Jo King

จากนั้นเพิ่ม a .จะช่วยได้ไหม
user202729

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