Diberi pengaturan domino, tugas Anda adalah mencari tahu domino mana yang jatuh dan mana yang tidak.
Memasukkan
Ambil representasi ASCII persegi panjang dari pengaturan domino. Karakter berikut digunakan untuk kisi ASCII:
(spasi): sel kosong
|
,-
,/
,\
: Domino
Domino dapat jatuh ke 8 arah, yang diwakili oleh surat-surat berikut (mirip dengan orientasi WASD):
Q W E
A D
Z X C
Satu atau lebih kartu domino akan diganti dengan salah satu dari surat-surat ini untuk menunjukkan bahwa kartu domino dimundurkan di awal. Berikut ini sebuah contoh:
D||||/
- /
- -
- -
/|||||
Saya tidak ingin tantangan ini berubah menjadi latihan penguraian input sehingga salah satu dari formulir input berikut diizinkan:
- Sebuah string dengan kisi (opsional didahului oleh dimensinya jika itu membantu)
- Array / daftar / tupel dengan satu string untuk setiap baris (opsional bersama dengan bilangan bulat dan tinggi)
- Array (daftar) / daftar / tupel dengan satu string / karakter untuk setiap sel grid (opsional bersama dengan variabel lebar dan tinggi)
Anda dapat membaca dari STDIN atau mengambil argumen fungsi atau bahkan mengharapkan input disimpan dalam variabel.
Keluaran
Menulis ke STDOUT atau mengembalikan (atau menyimpan dalam variabel) kotak yang dihasilkan dalam format input yang valid, menunjukkan domino mana yang telah jatuh dan yang belum. Artinya, ganti setiap domino yang jatuh dengan #
dan biarkan setiap domino berdiri seperti yang ada di input.
Aturan
Tentu saja, domino menyebarkan kejatuhan mereka melalui pengaturan. Karena mungkin ada kondisi balapan, kami menganggap bahwa ada langkah waktu yang tetap dan jatuhnya merambatkan satu sel kisi per langkah waktu.
Domino umumnya jatuh seperti yang Anda harapkan secara intuitif, tetapi spesifikasi yang ketat dari akal sehat ternyata cukup panjang. Maaf untuk itu, saya harap contohnya membantu. Berikut adalah intisari dengan semua kombinasi dua ubin yang unik (hingga rotasi dan refleksi). Baca terus untuk peraturan yang ketat.
Setiap domino dapat jatuh hanya dalam dua arah:
W Q E
A | D - / \
X C Z
Setiap kali domino jatuh itu mempengaruhi sel ke arah musim gugur. Jika sel itu berisi domino yang bisa jatuh ke arah yang sama atau dalam arah yang berbeda 45 derajat, domino itu melakukannya di langkah waktu berikutnya.
Contoh:
D| -> DD (falls in same direction)
D/ -> DC (falls at 45 degrees)
C -> C (falls at 45 degrees)
- X
Setiap kali domino yang berorientasi diagonal ( /
atau \
) jatuh, itu juga mempengaruhi dua sel yang menyentuh baik selnya maupun selnya ke arah kejatuhannya. Jika sel-sel ini mengandung domino yang dapat jatuh ke arah yang sama dengan domino asli, atau dalam arah sejajar sumbu menjauh darinya, domino itu melakukannya pada langkah waktu berikutnya.
Contoh:
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\
Pengecualian : jika domino didorong ke dua arah yang valid sekaligus (yaitu jika ada aturan di atas yang bertentangan), itu tidak jatuh.
Contoh:
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)
Contohnya
8 5
D||||/ ######
- / - #
- - --> - #
- - - #
/||||| /|||||
===============================================
17 9
E|/|||/ #######
- - # #
- - # #
- - # #
/|||/|||||||||/ --> ###############
/ - # #
/ - # -
/ - # #
/|||||\ #######
===============================================
19 8
\|/ ###
- - # #
D||||/|\ /|||/ ######## #####
/ - # #
- \- --> - \#
\- \ - #- \ #
D||||\ / \ / ###### / \ #
|\ ||||| |\ #####
==============================================
11 11
-\\\/|\|\-| -\##/|###-|
-|\\||\-|\- -|#####-|\-
|\//\//|-/- |#//\//|#/-
\|//|-|\-\| #####-|##\|
---||/-\//| #-######//|
///|||\---- --> #/#####----
-|/---|-|-\ #|##--|-|-\
--|--\/|/// ####-\/|///
/|//--|//-| ####--|//-|
|/\-|||-/-\ |/\####-/-\
E||\-|\---/ ####-|\---/
Beri tahu saya jika Anda pikir saya melakukan kesalahan (terutama yang terakhir).
E
(bukan berarti ada bedanya ...). Sepertinya Anda dapat menyimpan banyak karakter dengan mengurangi kedalaman lekukan ke minimum.