Mod 7 ใน Manufactoria


12

ความท้าทายของ Manufactoria ง่าย ๆ คำนวณอินพุตโมดูโล 7 อินพุตจะอยู่ในไบนารีบิ๊ก - เอนเดียน (blue = 1, red = 0) เอาต์พุตควรอยู่ในรูปแบบเดียวกัน

กรณีทดสอบให้ ส่วนที่เล็กที่สุดนับเป็นชัยชนะ

http://pleasingfungus.com/Manufactoria/?ctm=Mod7;Input:_binary_number_big_endian._Output:_that_binary_number_mod_7;bbb:|brrr:b|brrrr:br|bb:bb|bbrrb:brr|brrrrb:brb|bbrb:bbr; 13; 3; 1 ;

(ถ้าอินพุต mod 7 เป็น 0 จะไม่มีผลใด ๆ )


"รหัสกอล์ฟ" ในกรณีนี้หมายถึง "ชิ้นส่วนน้อยที่สุด"?
John Dvorak

เนื่องจากฉันยังไม่ได้แก้ไขปัญหาการเพิ่มขึ้นฉันไม่ทราบวิธีแก้ปัญหานี้ Manufactoria สนุกมาก
Justin

@JanDvorak: ใช่
Keith Randall

@KeithRandall เราไม่เคยติดแท็กcode-golfกับ manufactoria เราควรลบแท็กที่นี่หรือเพิ่มในคำถามอื่น ๆ
Howard

@Howard: ผมว่าเพิ่ม (หรือเร็วที่สุดรหัสหรือไม่ว่างช่องคลอดหรือรหัสความท้าทายหรือสิ่งที่ดีที่สุดที่จะอธิบายให้คะแนน) และให้manufactoriaจะง่ายแท็กภาษา
Ilmari Karonen

คำตอบ:


5

### Manufactoria วางไว้ 85 ชิ้น

อัลกอริทึมค่อนข้างตรงไปตรงมา: คำนวณโมดูลัสโดยใช้เครื่องสถานะ (ส่วนที่ใหญ่ที่สุดที่มีแปดสาขา - หนึ่งในรัฐที่ถูกทำซ้ำสำหรับวัตถุประสงค์ด้านลอจิสติก) แล้วเข้ารหัสและรวบรวมผลลัพธ์ เนื่องจากเกือบทุกผลลัพธ์มีตัวเลขหนึ่งตัวจึงใช้ขั้นตอนการบีบอัดพิเศษเพื่อลดจำนวนชิ้นส่วน

ออกแบบในปีที่แล้วคัดลอกมาที่

ฉันใช้เข็มขัดแบบสายพานมากเกินไปในความคิดของฉัน


5

58 43 ชิ้นส่วน

ภาพหน้าจอของ 43-part mod7 ลดลงใน Manufactoria

http://pleasingfungus.com/Manufactoria/?lvl=33&code=c16:9f0;q15:9f3;q14:9f3;q13:9f3;c12:9f3;c16:10f1;r15:10f3;r14:10f3;b13:10f3 ; Q12: 10f4; p11: 10f4; c16: 11f1; I15: 11f7; Q14: 11f7; Q13: 11f7; Q12: 11f7; c11: 11f2; R15: 12f3; B14: 12f3; c12: 12f3; c15: 13f0; c14 : 13f0; c13: 13f0; R13: 12f3; y10: 3f3; C10: 4f2; G10: 5f1; Q10: 6f4; Y11: 3f0; Q11: 4f6; R11: 5f3; p11: 6f4; b11: 7f1; I12: 4f7 ; c12: 5f3; Q12: 6f0; G12: 2f3; c12: 3f3; p13: 4f6; y13: 3f0; c13: 5f0; c12: 7f3; b12: 8f3; & CTM = Mod7; อินพุต: _binary_number_big_endian._Output: _that_binary_number_mod_7; BBB : | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;

ความคิดของKeith Randall ในการแปลงอินพุตเป็น unary นั้นค่อนข้างดีดังนั้นฉันจึงขโมยมัน ;-) สะดวกสบายฉันแค่ใช้เวลาปรับแต่งตัวแปลงไบนารี่ให้เป็นยูนิเซฟขนาดเล็กใน Manufactoriaดังนั้นเลือกโซลูชันที่ใช้งานได้เกือบหนึ่งอย่างของฉัน * จากการท้าทายนั้น

การออกแบบนี้มาถึงจุดที่เพียงแค่หยิบหุ่นยนต์จากด้านบนลงล่างเท่านั้นเริ่มที่จะต้องการสายพานเพิ่มเติมพิเศษที่ไร้ประโยชน์ การลดส่วนที่สำคัญอื่น ๆ อาจมาจากการออกแบบเลย์เอาต์ให้สูงขึ้นและแคบลง

(* ความท้าทายนั้นจำเป็นต้องมี) การออกแบบเพื่อให้พอดีกับบอร์ดขนาด 7 × 7 และ b) เอาต์พุตยูนารีให้เป็นเครื่องหมายสีแดง หากคุณดูที่ตัวแปลงไบนารี่เป็นส่วนหนึ่งของเครื่องด้านบนคุณจะสังเกตได้ว่าด้วยส่วนเสริมหนึ่งหรือสองส่วนมันสามารถตอบสนองความต้องการได้อย่างง่ายดาย แต่ก็ไม่ใช่ทั้งสองอย่าง)


นี่เป็นรุ่น 58 ส่วนก่อนหน้า:

สกรีนช็อตของตัวลด 58-mod mod 7 ใน Manufactoria พร้อมป้ายระบุ

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g12:2f3;q13:13f5;c14:13f0;c15:12f3;c9:6f2;c9:7f1;c9:8f1;c9:9f1;c10:4f3 ; C10: 5f3; i10: 6f5; C10: 7f2; C10: 9f0; b11: 3f2; p11: 4f1; c11: 5f1; p11: 6f2; p11: 7f2; c11: 8f3; p11: 9f3; b11: 10f2; c12 : 3f2; c12: 4f2; c12: 5f0; R12: 6f3; c12: 7f3; I12: 8f1; I12: 9f5; Y12: 10f3; c13: 3f2; c13: 4f3; I13: 5f1; c13: 6f3; c13: 7f2 ; I13: 8f0; c13: 9f1; c14: 3f3; c14: 4f2; p14: 5f5; c14: 6f1; p14: 7f6; p14: 8f7; R14: 9f3; c15: 4f3; Q15: 5f0; c15: 6f3; c15 : 7f3; I15: 8f6; c15: 9f3; Q15: 10f7; c15: 11f3; R12: 12f2; p13: 12f7; B14: 12f0; B14: 11f3; b12: 11f3; y14: 10f3; Y15: 13f0; & CTM = Mod7 อินพุต: _binary_number_big_endian._Output: _that_binary_number_mod_7; bbb: | brrr: b | brrrr: br | bb: bb | bbrrb: brbr | bbrb: bbrb: 13 13 3 ;

เช่นเดียวกับวิธีแก้ปัญหาของ 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)


ฉันไม่พบข้อบกพร่องในการออกแบบของคุณ ทำได้ดีในเรื่องการประหยัดพื้นที่
John Dvorak

ps นี่คือการทดสอบที่ดีสำหรับการใช้งานโดยใช้เครื่องจักรรัฐเช่นนี้: หมายเลข 8890 = BRRRBRBRBBBBBRBR ควรให้ผลลัพธ์ 0 โดยไปที่ทุก ๆ รัฐเป็นครั้งที่สอง (และสถานะ 0 อีกครั้งในตอนท้าย) และทำการเปลี่ยนสถานะทุกครั้ง
Ilmari Karonen

2

60 ส่วน

ทางออกของฉันแตกต่างกันเล็กน้อย มันแปลงไบนารี่ให้เป็นเอกภาพก่อนจากนั้นจะทำการ mod 7 ฉันไม่สามารถเอาชนะ Ilmari ได้

ป้อนคำอธิบายรูปภาพที่นี่


คุณรู้ไหมคุณอาจทำได้ถ้าคุณปรับตัวแปลงให้เหมาะสม
Ilmari Karonen

0

จริง ๆ แล้วฉันไม่รู้เลยว่าฉันกำลังทำอะไร แต่มันใช้งานได้และฉันอาจเป็นผู้ชนะ : D

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: ปรับให้เหมาะสม 2 เท่าเล็กน้อยตอนนี้ (ลบขยะ)


อันที่จริงฉันไม่รู้ว่ามันจะทำงานกับตัวเลขที่ใหญ่กว่า (หรือแตกต่างจากกรณีทดสอบ)
Leo Pflug

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