Đưa ra một thiết lập của domino, nhiệm vụ của bạn là tìm ra những chiếc domino nào rơi và cái nào không.
Đầu vào
Lấy một đại diện ASCII hình chữ nhật của một thiết lập domino. Các ký tự sau được sử dụng cho lưới ASCII:
(dấu cách): ô trống
|
,-
,/
,\
: Domino
Đô-mi-nô có thể rơi theo 8 hướng, được biểu thị bằng các chữ cái sau (tương tự như định hướng WASD):
Q W E
A D
Z X C
Một hoặc nhiều domino sẽ được thay thế bằng một trong những chữ cái này để chỉ ra rằng domino bị đẩy qua lúc bắt đầu. Đây là một ví dụ:
D||||/
- /
- -
- -
/|||||
Tôi không muốn thử thách này biến thành một bài tập trong phân tích cú pháp đầu vào để bất kỳ hình thức nhập liệu nào sau đây đều được cho phép:
- Một chuỗi có lưới (tùy chọn đi trước bởi kích thước của nó nếu điều đó có ích)
- Một mảng / danh sách / tuple với một chuỗi cho mỗi dòng (tùy chọn cùng với số nguyên chiều rộng và chiều cao)
- Một mảng (danh sách) lồng nhau / tuple với một chuỗi / ký tự cho mỗi ô lưới (tùy chọn cùng với các biến chiều rộng và chiều cao)
Bạn có thể đọc từ STDIN hoặc lấy tham số hàm hoặc thậm chí mong đợi đầu vào được lưu trữ trong một biến.
Đầu ra
Viết thư cho STDOUT hoặc trả về (hoặc lưu trong một biến) lưới kết quả ở bất kỳ định dạng đầu vào hợp lệ nào, cho biết domino nào đã rơi và không có. Đó là, thay thế mỗi domino rơi xuống #
và để lại mỗi domino đứng như trong đầu vào.
Quy tắc
Tất nhiên, domino tuyên truyền sự sụp đổ của họ thông qua các thiết lập. Vì có thể có các điều kiện chủng tộc, chúng tôi giả định rằng có các bước thời gian cố định và việc truyền xuống một ô lưới trên mỗi bước thời gian.
Dominoes thường rơi theo cách bạn mong muốn bằng trực giác, nhưng một đặc điểm kỹ thuật khắt khe về ý thức thông thường hóa ra lại khá dài. Xin lỗi vì điều đó, tôi hy vọng các ví dụ giúp đỡ. Đây là một ý chính với tất cả các kết hợp hai gạch độc đáo (lên đến xoay và phản chiếu). Đọc về các quy tắc nghiêm ngặt.
Mỗi domino chỉ có thể rơi theo hai hướng:
W Q E
A | D - / \
X C Z
Bất cứ khi nào một domino rơi, nó sẽ ảnh hưởng đến tế bào theo hướng rơi. Nếu tế bào đó chứa một domino có thể rơi theo cùng một hướng hoặc theo hướng khác nhau 45 độ, thì domino đó sẽ làm như vậy trong bước tiếp theo.
Ví dụ:
D| -> DD (falls in same direction)
D/ -> DC (falls at 45 degrees)
C -> C (falls at 45 degrees)
- X
Bất cứ khi nào một domino ( /
hoặc \
) định hướng theo đường chéo rơi xuống, nó cũng ảnh hưởng đến hai tế bào chạm vào cả tế bào và tế bào theo hướng rơi của nó. Nếu các ô này chứa một domino có thể rơi cùng hướng với domino ban đầu hoặc theo hướng thẳng hàng trục với nó, thì domino sẽ làm như vậy trong bước tiếp theo.
Ví dụ:
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\
Ngoại lệ : nếu một domino được đẩy theo cả hai hướng hợp lệ cùng một lúc (nghĩa là nếu bất kỳ quy tắc nào ở trên có xung đột), thì nó sẽ không rơi.
Ví dụ:
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)
Ví dụ
8 5
D||||/ ######
- / - #
- - --> - #
- - - #
/||||| /|||||
===============================================
17 9
E|/|||/ #######
- - # #
- - # #
- - # #
/|||/|||||||||/ --> ###############
/ - # #
/ - # -
/ - # #
/|||||\ #######
===============================================
19 8
\|/ ###
- - # #
D||||/|\ /|||/ ######## #####
/ - # #
- \- --> - \#
\- \ - #- \ #
D||||\ / \ / ###### / \ #
|\ ||||| |\ #####
==============================================
11 11
-\\\/|\|\-| -\##/|###-|
-|\\||\-|\- -|#####-|\-
|\//\//|-/- |#//\//|#/-
\|//|-|\-\| #####-|##\|
---||/-\//| #-######//|
///|||\---- --> #/#####----
-|/---|-|-\ #|##--|-|-\
--|--\/|/// ####-\/|///
/|//--|//-| ####--|//-|
|/\-|||-/-\ |/\####-/-\
E||\-|\---/ ####-|\---/
Hãy cho tôi biết nếu bạn nghĩ rằng tôi đã phạm sai lầm (đặc biệt là với người cuối cùng).
E
(không phải nó tạo ra sự khác biệt ...). Có vẻ như bạn có thể lưu một loạt các ký tự bằng cách giảm độ sâu thụt xuống mức tối thiểu.