เมื่อมีการตั้งค่าของโดมิโนงานของคุณคือการพิจารณาว่าโดมิโนตัวใดที่ล้มและไม่ทำ
อินพุต
ทำหน้าที่เป็นตัวแทนรูปแบบ ASCII รูปสี่เหลี่ยมผืนผ้าของการตั้งค่าโดมิโน อักขระต่อไปนี้ใช้สำหรับกริด ASCII:
(ช่องว่าง): เซลล์ว่าง
|
,-
,/
,\
: แต้ม
แต้มสามารถอยู่ใน 8 ทิศทางซึ่งแสดงด้วยตัวอักษรต่อไปนี้ (คล้ายกับทิศทางของ WASD):
Q W E
A D
Z X C
โดมิโนอย่างน้อยหนึ่งตัวจะถูกแทนที่ด้วยตัวอักษรตัวใดตัวหนึ่งเหล่านี้เพื่อระบุว่าโดมิโนถูกผลักไปในตอนเริ่มต้น นี่คือตัวอย่าง:
D||||/
- /
- -
- -
/|||||
ฉันไม่ต้องการให้ความท้าทายนี้เปลี่ยนเป็นการฝึกหัดในการแยกวิเคราะห์อินพุตดังนั้นจึงอนุญาตให้ใช้แบบฟอร์มอินพุตต่อไปนี้:
- สตริงที่มีกริด (นำหน้าด้วยมิติของตัวเลือกถ้าช่วยได้)
- Array / list / tuple ที่มีหนึ่งสตริงสำหรับแต่ละบรรทัด (เป็นทางเลือกพร้อมกับจำนวนเต็มความกว้างและความสูง)
- A (ซ้อนกัน) array / list / tuple ที่มีหนึ่งสตริง / ตัวอักษรสำหรับแต่ละเซลล์กริด (ตัวเลือกพร้อมกับตัวแปรความกว้างและความสูง)
คุณสามารถอ่านได้จาก STDIN หรือรับฟังก์ชั่นอาร์กิวเมนต์หรือคาดว่าอินพุตจะถูกเก็บไว้ในตัวแปร
เอาท์พุต
เขียนไปที่ STDOUT หรือส่งคืน (หรือบันทึกในตัวแปร) กริดผลลัพธ์ในรูปแบบอินพุตที่ถูกต้องใด ๆ ซึ่งบ่งชี้ว่าโดมิโนใดที่ล้มและไม่มี นั่นคือแทนที่โดมิโนแต่ละอันที่ตกลงมาด้วย#
และปล่อยโดมิโนแต่ละอันที่ยืนอยู่ในอินพุต
กฎระเบียบ
แน่นอนแต้มแต้มถ่ายทอดการตกสู่การตั้งค่า เนื่องจากอาจมีเงื่อนไขการแข่งขันเราคิดว่ามีขั้นตอนเวลาที่แน่นอนและการลดลงของการแพร่กระจายเซลล์หนึ่งตารางต่อขั้นตอนเวลา
โดยทั่วไปแล้ว Dominoes จะล้มลงในแบบที่คุณคาดหวังไว้ แต่สัญชาตญาณที่เข้มงวดของสามัญสำนึกนั้นค่อนข้างยาว ขออภัยด้วยฉันหวังว่าตัวอย่างจะช่วยได้ นี่คือส่วนสำคัญกับชุดค่าผสมสองแบบที่ไม่ซ้ำกันทั้งหมด (สูงถึงการหมุนและการสะท้อน) อ่านต่อไปสำหรับกฎที่เข้มงวด
โดมิโนแต่ละอันสามารถตกได้ในสองทิศทางเท่านั้น:
W Q E
A | D - / \
X C Z
เมื่อใดก็ตามที่โดมิโนตกลงมันจะส่งผลกระทบต่อเซลล์ในทิศทางของการตก หากเซลล์นั้นมีโดมิโนซึ่งสามารถตกไปในทิศทางเดียวกันหรือในทิศทางที่แตกต่างกัน 45 องศาโดมิโนนั้นจะทำเช่นนั้นในขั้นตอนต่อไป
ตัวอย่าง:
D| -> DD (falls in same direction)
D/ -> DC (falls at 45 degrees)
C -> C (falls at 45 degrees)
- X
เมื่อใดก็ตามที่โดมิโน ( /
หรือ\
) ตกในแนวทแยงมุมมันจะส่งผลกระทบต่อทั้งสองเซลล์ที่สัมผัสทั้งเซลล์และเซลล์ในทิศทางของการตก หากเซลล์เหล่านี้มีโดมิโนซึ่งสามารถตกไปในทิศทางเดียวกับโดมิโนดั้งเดิมหรือในทิศทางที่เป็นแนวแกนอยู่ห่างจากมันโดมิโนนั้นจะทำเช่นนั้นในขั้นตอนต่อไป
ตัวอย่าง:
C/ -> CC (the cell in the direction of the fall is the one below
the /, so it falls in the same direction)
C| -> CD (falls in the axis-aligned direction away from the C)
C- -> C- (the direction away from the Q is W,
or but neither - nor \ can fall to W)
C\ -> C\
ข้อยกเว้น : ถ้าโดมิโนถูกผลักไปในทิศทางที่ถูกต้องทั้งสองพร้อมกัน (เช่นถ้ากฎข้อใดข้อหนึ่งข้างต้นมีข้อขัดแย้ง) จะไม่ตก
ตัวอย่าง:
D|A -> D|A (central domino in pushed in both directions)
Z Z (although it's pushed in one direction by two dominoes
D\A -> D\A and in the other by only one, it doesn't fall)
X X (the domino is being pushed from two opposing sides
D-A -> DXA D and A, but neither is valid for that domino. Hence,
there is no conflict and the X can push the domino over)
Z Z (pushed in the same direction by two dominoes, so falls)
\A -> ZA
Z Z Z (once the conflict arises, the affected
\ -> Z -> Z domino is locked in its position and can't
D|A D|A D|A be pushed over by future dominoes)
ตัวอย่าง
8 5
D||||/ ######
- / - #
- - --> - #
- - - #
/||||| /|||||
===============================================
17 9
E|/|||/ #######
- - # #
- - # #
- - # #
/|||/|||||||||/ --> ###############
/ - # #
/ - # -
/ - # #
/|||||\ #######
===============================================
19 8
\|/ ###
- - # #
D||||/|\ /|||/ ######## #####
/ - # #
- \- --> - \#
\- \ - #- \ #
D||||\ / \ / ###### / \ #
|\ ||||| |\ #####
==============================================
11 11
-\\\/|\|\-| -\##/|###-|
-|\\||\-|\- -|#####-|\-
|\//\//|-/- |#//\//|#/-
\|//|-|\-\| #####-|##\|
---||/-\//| #-######//|
///|||\---- --> #/#####----
-|/---|-|-\ #|##--|-|-\
--|--\/|/// ####-\/|///
/|//--|//-| ####--|//-|
|/\-|||-/-\ |/\####-/-\
E||\-|\---/ ####-|\---/
แจ้งให้เราทราบหากคุณคิดว่าฉันทำผิดพลาด (โดยเฉพาะกับที่ผ่านมา)
E
(ไม่ใช่ว่ามันสร้างความแตกต่าง ... ) ดูเหมือนว่าคุณสามารถบันทึกอักขระจำนวนมากได้โดยลดความลึกของการย่อหน้าให้เหลือน้อยที่สุด