ความท้าทายของ Manufactoria ง่าย ๆ คำนวณอินพุตโมดูโล 7 อินพุตจะอยู่ในไบนารีบิ๊ก - เอนเดียน (blue = 1, red = 0) เอาต์พุตควรอยู่ในรูปแบบเดียวกัน
กรณีทดสอบให้ ส่วนที่เล็กที่สุดนับเป็นชัยชนะ
(ถ้าอินพุต mod 7 เป็น 0 จะไม่มีผลใด ๆ )
ความท้าทายของ Manufactoria ง่าย ๆ คำนวณอินพุตโมดูโล 7 อินพุตจะอยู่ในไบนารีบิ๊ก - เอนเดียน (blue = 1, red = 0) เอาต์พุตควรอยู่ในรูปแบบเดียวกัน
กรณีทดสอบให้ ส่วนที่เล็กที่สุดนับเป็นชัยชนะ
(ถ้าอินพุต mod 7 เป็น 0 จะไม่มีผลใด ๆ )
คำตอบ:
อัลกอริทึมค่อนข้างตรงไปตรงมา: คำนวณโมดูลัสโดยใช้เครื่องสถานะ (ส่วนที่ใหญ่ที่สุดที่มีแปดสาขา - หนึ่งในรัฐที่ถูกทำซ้ำสำหรับวัตถุประสงค์ด้านลอจิสติก) แล้วเข้ารหัสและรวบรวมผลลัพธ์ เนื่องจากเกือบทุกผลลัพธ์มีตัวเลขหนึ่งตัวจึงใช้ขั้นตอนการบีบอัดพิเศษเพื่อลดจำนวนชิ้นส่วน
ออกแบบในปีที่แล้วคัดลอกมาที่
ฉันใช้เข็มขัดแบบสายพานมากเกินไปในความคิดของฉัน
ความคิดของKeith Randall ในการแปลงอินพุตเป็น unary นั้นค่อนข้างดีดังนั้นฉันจึงขโมยมัน ;-) สะดวกสบายฉันแค่ใช้เวลาปรับแต่งตัวแปลงไบนารี่ให้เป็นยูนิเซฟขนาดเล็กใน Manufactoriaดังนั้นเลือกโซลูชันที่ใช้งานได้เกือบหนึ่งอย่างของฉัน * จากการท้าทายนั้น
การออกแบบนี้มาถึงจุดที่เพียงแค่หยิบหุ่นยนต์จากด้านบนลงล่างเท่านั้นเริ่มที่จะต้องการสายพานเพิ่มเติมพิเศษที่ไร้ประโยชน์ การลดส่วนที่สำคัญอื่น ๆ อาจมาจากการออกแบบเลย์เอาต์ให้สูงขึ้นและแคบลง
(* ความท้าทายนั้นจำเป็นต้องมี) การออกแบบเพื่อให้พอดีกับบอร์ดขนาด 7 × 7 และ b) เอาต์พุตยูนารีให้เป็นเครื่องหมายสีแดง หากคุณดูที่ตัวแปลงไบนารี่เป็นส่วนหนึ่งของเครื่องด้านบนคุณจะสังเกตได้ว่าด้วยส่วนเสริมหนึ่งหรือสองส่วนมันสามารถตอบสนองความต้องการได้อย่างง่ายดาย แต่ก็ไม่ใช่ทั้งสองอย่าง)
นี่เป็นรุ่น 58 ส่วนก่อนหน้า:
เช่นเดียวกับวิธีแก้ปัญหาของ Jan Dvorakสิ่งนี้ยังอิงกับ FSM 7 สถานะ ฉันติดป้ายประตูที่สอดคล้องกับแต่ละรัฐในภาพหน้าจอเพื่อให้อ่านง่ายขึ้น อย่างไรก็ตามกลไกของรัฐนั้นเป็นส่วนที่ง่าย ส่วนที่ยุ่งยากคือการสร้างผลลัพธ์สุดท้ายโดยมีจำนวนประตูน้อยที่สุด
เคล็ดลับหนึ่งที่ฉันพบว่ามีประโยชน์คือวงวนสำเนาสุดท้ายที่บาร์เรลเปลี่ยนทุกอย่างที่เขียนก่อนเครื่องหมายสีเหลืองไปจนสุด (ขณะเดียวกันก็ถอดหมุดสีเขียว): นี่ทำให้ฉันสามารถใช้การทำซ้ำในบิตเอาต์พุตระดับสูงโดย สร้างผลลัพธ์เป็น:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
สิ่งนี้ทำให้ฉันส่วนใหญ่รวมพา ธ เอาต์พุตสำหรับเอาต์พุต 2, 4 และ 5 (ซึ่งเริ่มต้นด้วยBR
) และ 3 และ 6 (ซึ่งขึ้นต้นด้วยBB
)
ทางออกของฉันแตกต่างกันเล็กน้อย มันแปลงไบนารี่ให้เป็นเอกภาพก่อนจากนั้นจะทำการ mod 7 ฉันไม่สามารถเอาชนะ Ilmari ได้
จริง ๆ แล้วฉันไม่รู้เลยว่าฉันกำลังทำอะไร แต่มันใช้งานได้และฉันอาจเป็นผู้ชนะ : D
แก้ไข: ปรับให้เหมาะสม 2 เท่าเล็กน้อยตอนนี้ (ลบขยะ)
111
ก็จะมักจะได้รับการรายงานว่าเป็นหารด้วย 7 นี้เป็นเพียงไม่จริง