ปัญหาลูป Brainf * ck


19

ฉันมีปัญหากับไซเบอร์คลับที่ขอให้คุณพิมพ์:

ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!

ใช้ Brainf ** k ใน 29 ไบต์หรือน้อยกว่าโดยไม่ใช้อักขระ ','

ฉันมีรหัสที่ใช้งานได้:

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

อย่างไรก็ตามการวนซ้ำของฉันยาวเกินไปส่ง 16 ไบต์เกินขีด จำกัด

มีวิธีที่มีประสิทธิภาพมากกว่าในการตั้งค่าเซลล์ที่สองและสามเป็น 58 และ 90 เพื่อให้ฉันสามารถรันลูปที่สองของฉันได้หรือไม่? หรือมีวิธีที่ดีกว่าในการทำทั้งหมดนี้ด้วยกันที่ฉันไม่ได้เห็น?


1
สำหรับคำถามของคุณในขณะที่มันเพียงช่วยประหยัดสี่ไบต์ก็จริงดีกว่าที่จะสร้าง59และ90และการเปลี่ยนแปลง-.ที่จะทิ้ง.- >.<
Martin Ender

ผมได้+[--->++<]>++++[.-]19 ไบต์ แต่จะพิมพ์ตัวอักษรควบคุมเช่นกัน ...
Timtech

@MartinEnder ใช่แล้วขอโทษที่ฉันเห็นความคิดเห็นของคุณในโพสต์อื่นและพบว่ากลุ่มนี้ซึ่งดูเหมือนเหมาะสมมากขึ้นฉันจะลบหนึ่งในดังนั้นเนื่องจากมันไม่ได้สร้างคำตอบมากมาย
Nick Rod

2
ฉันอยากรู้อยากเห็นอย่างแท้จริงว่า "สโมสรไซเบอร์" นี้คืออะไรเพราะเด็กผู้ชายพวกเขาต้องมีนักกอล์ฟที่ดีจริงๆ!
Sp3000

คำตอบ:


23

27 24 ไบต์

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

ใช้เวลาตลอดทั้งวันในการเขียนนักล่าสัตว์เดรัจฉานและดูผลลัพธ์ที่ได้มาตอนนี้ฉันสามารถกลับไปทำงานจริงได้แล้ว ...อีกวันของการเดรัจฉานบังคับในภายหลัง ...

ลองออนไลน์!

คอมโพเนนต์++[<++[++<]>>>+]เริ่มต้นเทปเป็น

[130, 0, 0, 0, 91, 59, 0]
                       ^

ซึ่งสมบูรณ์แบบสำหรับสิ่งที่เราต้องการ!


8
เวทมนตร์คาถา (∩`-´) ⊃━☆ ゚. * ・。 ゚
โม่

@primo เพื่อความยุติธรรมฉันไม่ทราบว่าเกิดอะไรขึ้นกับโครงสร้างที่ชาญฉลาดในครึ่งแรกและฉันคิดว่าความจริงที่ว่าคุณสามารถคิดอัลกอริทึม / เทคนิคของคุณเองได้มันช่างน่าทึ่ง :)
Sp3000

เทปตอนท้ายของแต่ละวง: codepad.org/ZoJUlQ8M มันไม่ได้ทั้งหมดที่ใช้งานง่ายว่ามันจะยุติลงเมื่อค่าว่ามันไม่หรือแม้กระทั่งการที่ทุกคน;)
พรีโม่

1
ทางเลือก 24:+[[>++<<]>->+>+]<[-<-.>]
โม่

15

30 ไบต์

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

ลองออนไลน์!

85และ171ค่อนข้างง่ายที่จะสร้างใน brainfuck (ผู้รุกรานแบบแยกส่วนของ3และ-3 ) 85ใกล้เคียงกับ90และ171ใกล้เคียงกับ177 ( 59 · 3 ) ซึ่งใช้ที่นี่ ด้วยการแฮ็กเล็กน้อยฉันสามารถผลิต88และ176แทน

ถึงกระนั้นหนึ่งไบต์สั้นของเป้าหมาย

คำแนะนำอื่น ๆ

โดยทั่วไปจะสั้นกว่าในการวนซ้ำในรายการคูณด้วยค่าคงที่แทนที่จะเป็นแบบอื่น สิ่งนี้เป็นจริงอย่างยิ่งสำหรับ 3 ค่าขึ้นไป ตัวอย่างเช่นสิ่งนี้:

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

สามารถเขียนเป็น:

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

มีค่าภายในเพียงสองค่าดังนั้นจึงไม่มีการปรับปรุงมากนักในกรณีนี้ ในความเป็นจริงเพียงแค่การรีแฟคเตอร์สั้นลงหนึ่งไบต์:

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

คูณ30โดย2และ3มากกว่า10โดย6และ9 ด้วยคำแนะนำของ Martin Büttnerสิ่งนี้ลดลงเหลือ38ไบต์โดยไม่เปลี่ยนแปลงไปจากต้นฉบับมากนัก:

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

ฉันไม่เคยคิดที่จะเพิ่มทวีคูณ 58 และทำซ้ำด้วยจำนวนที่มากขึ้นซึ่งมีประสิทธิภาพมากขึ้น
นิคร็อด

4

34 ไบต์

บันทึกคุณ 11 ไบต์ แต่ยังยาวเกิน 5 ไบต์ ...

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

ฉันใช้เวลาหลายชั่วโมงไปแล้วหวังว่าจะมีใครสามารถปรับปรุงได้

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