เครื่องจักร
เครื่องประเภทบิลเลียดลูกประกอบด้วยเพียงสัญลักษณ์พร้อมกับบนและกรณีที่ต่ำกว่าตัวอักษรช่องว่างและจำนวน\ _ /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) ซึ่งไปลงบน_และสิ้นสุด นี่คือจุดสิ้นสุดของเลเยอร์ที่สอง
ตอนนี้ก่อนที่เลเยอร์ที่สามเนื่องจาก_มันมีสองลูกที่ข้ามมันมันปล่อยหนึ่งลูก เอาท์พุทมีลูกหนึ่งข้ามมันดังนั้นมันจะออกผลลัพธ์AA:1
สำหรับเลเยอร์ที่สามมันจะติดตามเส้นทางของบอลลูกแรก (จาก_) ซึ่งไปแม้ว่าCและจะตกลงไป ลูกที่สอง (ซึ่งหล่นผ่านไปA) ก็ตกลงมาตรงๆ
ตอนนี้ก่อนที่ชั้นสี่เนื่องจากการส่งออกมีการเดินทางลูกหนึ่งมากกว่านั้นมันจะออกผลลัพธ์CC: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
\_/หรือ?