การทดสอบแบบดั้งเดิมในโรงงานอุตสาหกรรม


13

พื้นหลัง

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

ท้าทาย

ความท้าทายของคุณคือการสร้างโปรแกรมที่ทดสอบความเป็นอันดับหนึ่งของตัวเลข

อินพุตจะเป็นชุดของเครื่องหมายสีน้ำเงิน N ในคิว ถ้า N เป็นค่าเฉพาะโปรแกรมของคุณควรยอมรับ (ย้ายหุ่นยนต์ไปจนจบ) ถ้า N เป็นคอมโพสิตโปรแกรมของคุณควรจะปฏิเสธมัน (วางไว้บนพื้นที่ใดที่หนึ่ง)

ตัวเลือกการส่ง

เนื่องจากนี่เป็นความท้าทายที่ซับซ้อนกว่าความท้าทายทั่วไปของ Manufactoria ฉันจึงตัดสินใจอนุญาตให้มีวิธีเพิ่มเติมในการส่งคำตอบของคุณ

วนิลา

ฉันได้สร้างระดับที่กำหนดเอง 13x13 เพื่อสร้างและทดสอบการส่ง ระดับการทดสอบที่กำหนดเองมีดังนี้

ระดับที่กำหนดเอง 13x13

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

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

กริดที่ขยาย

ผู้ใช้บางคนอาจต้องการพื้นที่มากกว่าตาราง 13x13 นี่คือลิงค์ไปสู่ระดับที่กำหนดเองในเกม 15x15 ที่สร้างโดยการเปลี่ยนตัวเลขใน URL:

ระดับที่กำหนดเอง 15x15

น่าเศร้าที่ระดับที่กำหนดเองที่ใหญ่กว่าไม่ทำงานเนื่องจากเซลล์เพิ่มเติมไม่สามารถเข้าถึงได้

Manufactoria Esolang

มีการดัดแปลงของ Manufactoria เป็นภาษาที่ใช้ ASCII หากคุณต้องการวิธีที่แตกต่างในการออกแบบ / ทดสอบการสร้างของคุณหรือถ้าคุณไม่สามารถแก้ปัญหาขั้นสุดท้ายของคุณลงบนกระดานเกมคุณสามารถใช้ esolang นี้ คุณสามารถหาข้อมูลเกี่ยวกับ esolang นี้ได้ที่นี่:

Manufactoria esolang

มีความแตกต่างเล็กน้อยระหว่าง esolang และเกมจริง ตัวอย่างเช่นการลำเลียงข้ามได้รับการจัดการแตกต่างกัน พยายามหลีกเลี่ยงการใช้ประโยชน์จากความแตกต่างเหล่านี้

วิธีที่เร็วกว่าในการทดสอบ

เกมดังกล่าวช้ามากเมื่อพูดถึงโปรแกรมที่ใช้เวลาหลายพันขั้นตอนในการดำเนินการ โซลูชันพิสูจน์แนวคิดของฉันใช้เวลา 28042 ขั้นตอนในการปฏิเสธ 15 แม้ในเกม 50x speedup ที่ใช้เวลานานเกินไป

ผมพบว่าเป็นประโยชน์อย่างนี้เว็บไซต์ เพียงคัดลอกวางลิงก์ไปยังคำตอบของคุณและคุณสามารถทดสอบคำตอบของคุณด้วยอินพุตเฉพาะ กระบวนการขั้นตอน 28042 ใช้เวลาน้อยกว่าหนึ่งวินาที

สิ่งหนึ่งที่ควรทราบคือมันมักจะพูดอะไรบางอย่างเช่น "ยอมรับไม่ถูกต้อง" แม้ว่าเครื่องของคุณจะทำงานอย่างถูกต้อง นี่เป็นเพราะหน้าเว็บรู้กรณีทดสอบเท่านั้น ตัวอย่างเช่นมันจะบอกว่าทางออกของฉัน "ยอมรับไม่ถูกต้อง" หมายเลข 3 แม้ว่าเครื่องของฉันจะถูกต้องจริง

วิธีชนะ

เกณฑ์การให้คะแนนคือจำนวนชิ้นส่วน (เซลล์ที่ใช้งาน) นี่คือรหัสกอล์ฟดังนั้นการส่งชิ้นส่วนที่น้อยที่สุดจะเป็นผู้ชนะ

สำหรับผู้ที่สนใจโซลูชันมาตรฐานของฉันมี 96 ชิ้นส่วนและเหมาะกับตาราง 13x13 การค้นหาอัลกอริทึมที่ดีกว่าอาจนำไปสู่การปรับปรุงที่ยิ่งใหญ่เนื่องจากฉันรู้ว่าฉันใช้อัลกอริธึมที่เหมาะสมที่สุด

คำตอบ:


10

53 ส่วน - ตาราง 11x11

ฉันเพิ่งเรียนรู้ที่จะเล่น Manufactoria 2 วันที่ผ่านมาดังนั้นมันอาจไม่เหมาะกับการเล่นกอล์ฟ แต่อย่างน้อยก็แก้ปัญหาได้ มันใช้การหารทดลองแน่นอนผ่านการลบซ้ำ ๆ มีการตรวจสอบตัวหารทั้งหมดจาก 2 ถึง N-1 ความซับซ้อนของเวลาควรเป็น O (N ^ 3) ฉันเชื่อ

วิธีแก้ปัญหา 53 ชิ้น

ลิงค์โซลูชัน

ฉันผิดหวังมากที่ต้องใช้สายพานลำเลียง :)

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