เครื่องจักร
เครื่องประเภทบิลเลียดลูกประกอบด้วยเพียงสัญลักษณ์พร้อมกับบนและกรณีที่ต่ำกว่าตัวอักษรช่องว่างและจำนวน\
_
/
1
\
และ/
เป็นทางลาด ลูกบอลที่มาจากด้านบนจะถูกเบี่ยงเบนไปทางด้านขวาหรือด้านซ้ายตามลำดับ สำหรับทางลาดทั้งสองถ้าลูกบอลมาจากด้านใดด้านหนึ่งมันจะเบี่ยงลงไป
_
เป็นองค์ประกอบตรรกะ ตรรกะดำเนินการโดยเป็นส่วนที่ไม่เหมือนบิลเลียดมากที่สุดของคอมพิวเตอร์ อย่างแรกลูกบอลที่มาจากทางซ้ายหรือขวาจะดำเนินต่อไปในทิศทางเดียวกัน ลูกบอลที่มาจากด้านบนจะหยุดลง จากนั้นหลังจากสิ้นสุดการประมวลผล (ดูที่การรันเครื่องด้านล่าง) หากจำนวนลูกที่ข้าม / ลงบนมันเป็นจำนวนที่เป็นบวกแม้กระทั่งลูกเดียวจะถูกปล่อยจากด้านล่างขององค์ประกอบ
พื้นที่ไม่ทำอะไรเลย ลูกบอลใดก็ตามที่มาจากทิศทางใดก็ตกลงมาเนื่องจากแรงโน้มถ่วง
อักษรตัวพิมพ์เล็กเป็นอินพุต อินพุตทั้งหมดจะเป็น 1 หรือ 0 เดียว
ตัวอักษรตัวพิมพ์ใหญ่เป็นผลลัพธ์ จำนวนเอาท์พุทจะเป็นจำนวนของลูกบิลเลียดที่ตีตำแหน่งของมัน
จำนวน1
จะปล่อยลูกบิลเลียดเพิ่มที่ตำแหน่งนั้น เพราะมันหมายถึงตรรกะ 1
ตัวละครทุกตัวนอกจากจะ\_/
ทำให้ลูกบอลจากทิศทางใดตกลงมาเนื่องจากแรงโน้มถ่วง
ลูกไม่เคยรวมกันแยกหรือชนกัน สิ่งเหล่านี้จะถูกสร้างขึ้นเมื่อปล่อยจากอินพุต, a _
หรือ a 1
เท่านั้น _
พวกเขาจะถูกทำลายเฉพาะเมื่อพวกเขาล้มลงตรงไปยัง
เครื่องตัวอย่าง -
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
จะไม่มีบรรทัดว่างใด ๆ ในเครื่อง แต่_
อาจทำให้ปรากฏว่ามีบรรทัดว่างเปล่า
ใช้งานเครื่อง
เครื่องจักรทำงานในเลเยอร์หรือแถว การเคลื่อนไหวของลูกบิลเลียดทั้งหมดที่ชั้นบนสุดจะดำเนินการก่อนที่จะเกิดอะไรขึ้นในชั้นที่สอง
เครื่องจักร
ab
\_A
C
รันดังนี้:
ครั้งแรกก็แจ้งให้สำหรับการป้อนข้อมูลในรูปแบบa
a:
ผู้ใช้จะป้อน 1 หรือ 0 (ตามด้วย Enter) b
มันซ้ำนี้สำหรับการป้อนข้อมูล นี่คือจุดสิ้นสุดของเลเยอร์แรก ฉันจะสมมติว่าผู้ใช้ป้อน 1 สำหรับอินพุตทั้งสอง
จากนั้นก็มีร่องรอยจากเส้นทางของลูกแรก (จากa
) ซึ่งจะไปตาม\
ข้าม_
เข้าและตรงลงไปยังจุดภายใต้A
A
จากนั้นจะออกนอกเส้นทางสำหรับลูกบอลลูกที่สอง (จากb
) ซึ่งไปลงบน_
และสิ้นสุด นี่คือจุดสิ้นสุดของเลเยอร์ที่สอง
ตอนนี้ก่อนที่เลเยอร์ที่สามเนื่องจาก_
มันมีสองลูกที่ข้ามมันมันปล่อยหนึ่งลูก เอาท์พุทมีลูกหนึ่งข้ามมันดังนั้นมันจะออกผลลัพธ์A
A:1
สำหรับเลเยอร์ที่สามมันจะติดตามเส้นทางของบอลลูกแรก (จาก_
) ซึ่งไปแม้ว่าC
และจะตกลงไป ลูกที่สอง (ซึ่งหล่นผ่านไปA
) ก็ตกลงมาตรงๆ
ตอนนี้ก่อนที่ชั้นสี่เนื่องจากการส่งออกมีการเดินทางลูกหนึ่งมากกว่านั้นมันจะออกผลลัพธ์C
C:1
เนื่องจากเลเยอร์ที่สี่นั้นว่างเปล่าโปรแกรมจึงถูกยกเลิก
ผลรวมควรมีลักษณะ
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
เป้าหมาย
เป้าหมายของคุณคือการใช้เครื่องจักรจาก STDIN และจำลองมันโดยรับอินพุตและเอาต์พุตการพิมพ์ตามต้องการเพื่อ STDOUT ส่วนแรกของอินพุตไปยังโปรแกรมของคุณจะประกอบด้วยเครื่องที่จะทำงานตามด้วยบรรทัดว่าง ตัวอักษรอินพุตที่พบควรทำให้โปรแกรมของคุณพร้อมท์ให้ป้อนข้อมูลในรูปแบบของชื่ออินพุตตามด้วยเครื่องหมายโคลอน ควรแสดงผลลัพธ์ใด ๆ ในรูปแบบของชื่อเอาต์พุตตามด้วยเครื่องหมายโคลอนตามด้วยจำนวนลูกบอลที่ส่งผ่านจุดนั้น
นี่คือกอล์ฟ
ตัวอย่าง
ข้ามสาย
ab
\/
AB
ประตู XOR
ab1
\_/
C
งูพิษเต็ม
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
หรือ?