แบ่งอย่างรวดเร็วใน Manufactoria


10

พื้นหลัง

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

ภาษานั้นง่ายต่อการเข้าใจดังนั้นวิธีที่เร็วที่สุดในการเรียนรู้คือเล่นสองสามระดับแรกของเกม (เชื่อมโยงด้านบน)

ท้าทาย

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

อินพุตไปยังโปรแกรมจะเป็นสตริงของตัวทำเครื่องหมาย X blue ตามด้วยเครื่องหมาย Y แดง เอาต์พุตที่ต้องการจะเป็นสตริงของเครื่องหมายสีแดงที่มีความยาว X / Y

บอร์ดเกมที่จะใช้พบได้ในระดับการแข่งขันอย่างเป็นทางการนี้:

http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbbbbrrrr:rrr|bbbbbbbbbbbbrrr:rrrr|bbbbbbbbbrrr:rrr|bbbbbbbbbbrr: rrrrr; 13; 3; 0

มันคือ 13x13 (ขนาดสูงสุด) และติดตั้งการทดสอบที่ถูกต้องไว้ล่วงหน้าแล้ว (ดูหัวข้อการให้คะแนน)

เกณฑ์การให้คะแนน

คะแนนของโปรแกรมคือระยะเวลาทั้งหมดที่ใช้ในการผ่านการทดสอบทั้งหมดในระดับการแข่งขันอย่างเป็นทางการ เวลาทั้งหมดถูกกำหนดบนหน้าจอระดับที่สมบูรณ์

ขณะทำการทดสอบคุณจะต้องใช้ตัวเลื่อนเร่งความเร็ว 50x ที่ด้านล่างซ้ายเพื่อรับผลลัพธ์อย่างรวดเร็ว (การเร่งความเร็วเวลาไม่มีผลต่อคะแนน)

นี่คือรายการปัญหาการหารที่เกี่ยวข้องในการทดสอบ:

 6/2 = 3
 3/3 = 1
 4/1 = 4
 0/1 = 0
12/4 = 3
12/3 = 4
 9/3 = 3
10/2 = 5

ตัวอย่าง I / O

12/3=4
in:  BBBBBBBBBBBBRRR
out: RRRR

10/2=5
in:  BBBBBBBBBBRR
out: RRRRR

9/3=3
in:  BBBBBBBBBRRR
out: RRR

0/1=0
in:  R
out: 

เกมที่ยอดเยี่ยม! อย่าให้เวลาเล่นกอล์ฟวันนี้จริง ๆ แต่จะจดจำสิ่งนี้
tomsmeding

คำตอบ:


6

ฉันควรคาดการณ์สิ่งนี้ แต่ยังไงก็ทำได้ดี ฉันหวังว่าเอ็นจิ้นเกมจะอนุญาตให้ฉันสร้างกรณีทดสอบมากกว่า 8 กรณี ฉันควรสร้างความท้าทายของ Manufactoria เพิ่มเติมในอนาคตหรือไม่
PhiNotPi

1
แน่นอนว่าฉันชอบพวกเขา
Keith Randall

4

คะแนน: 15:51

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

ทำการหารด้วยการลบซ้ำ ๆ ใช้ Y ในกลุ่ม R เพื่อติดตามจำนวนตัวหารที่เราได้หักออกไป ใช้ Gs เพื่อนับความฉลาดทาง

ตัวอย่างเช่นสถานะที่จุดเริ่มต้นของแต่ละวงรอบนอก (ทันทีหลังจากตัวเขียน G เริ่มต้น) สำหรับ 12/4 คือ:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

เมื่อไม่มี Bs เหลือแกดเจ็ตที่ด้านซ้ายล่างจะตัด Rs ออกแล้วส่งออก # G-1 Rs

ห่วงด้านในดึงทีละหนึ่ง B และใช้ Y เพื่อติดตามตำแหน่ง เริ่มต้นที่วงด้านนอก:

BBBBBBBB RRRR GG
BBBBBBB RYRRR GG
BBBBBB RRYRR GG
BBBBB RRRYR GG
BBBB RRRR GG

ห่วงด้านในเป็นกล่อง 3x4 ที่มุมล่างขวา เลย์เอาต์ของส่วนที่เหลือน่าจะดีขึ้นเล็กน้อย แต่วงในนั้นแน่น

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; Q14: 8f7; g13: 8f2; p14: 9f4; R13: 10f2; p14: 10f7; B15: 10f0; Q14: 11f7; P15: 11f3; R16: 11f1; P15: 8f0; R15: 9f1; c16: 8f0; c13 : 2f0; c15: 2f0; c16: 2f0; C17: 2f0; c11: 3f3; c11: 4f3; c11: 6f3; c11: 7f3; c11: 8f3; c11: 9f3; c11: 5f3; p11: 10f7; Q11: 11f6 ; Q11: 12f7; R10: 12f2; C10: 10f2; Q16: 10f5; y14: 6f3; Q14: 5f3; G15: 5f1; c15: 4f1; c15: 3f1; C17: 9f1; C17: 8f1; C17: 7f1; C17 : 6f1; C17: 5f1; C17: 4f1; C17: 3f1; y16: 9f1; G17: 10f1; Q14: 2f4; G14: 1f3; & CTM = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: R | bbbbr : rrrr | r: | bbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbbrrr: rrrr | bbbbbbbbbbbrrr: rrr | bbbbbbbbbbbrrrr 13 13 ;


ด้วยการจัดเรียงชิ้นส่วนของการออกแบบของคุณใหม่อย่างมากฉันสามารถลดคะแนนเป็น 13:28 ด้วย 53 ส่วน
PhiNotPi

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