pengantar
Permainan xiangqi , juga dikenal sebagai catur Cina, adalah permainan seperti catur yang populer di Cina, Vietnam, Taiwan, dan negara-negara Asia Timur lainnya. Warna kedua sisi di xiangqi merah dan hitam. Ada tujuh bagian dalam xiangqi: jenderal ( G
), penasihat ( A
), gajah ( E
), kuda ( H
), kereta ( R
), meriam ( C
), dan prajurit ( S
). Untuk keperluan tantangan ini, potongan huruf besar dianggap merah dan potongan kecil berwarna hitam. Sebagian besar karya-karya ini memiliki padanan kasar dalam catur Barat, tetapi ada satu bagian yang sepenuhnya unik: meriam.
The meriam bergerak seperti benteng dalam catur atau kereta di Xiangqi (bergerak sejumlah ruang di kedua X atau sumbu Y), tetapi tidak dapat menyerang dengan cara ini. Sebaliknya, menyerang dengan melompat sepanjang X atau sumbu Y (dengan cara yang sama bergerak) lebih satu bagian dari setiap warna (teman atau musuh) dan mendarat di bagian yang berlawanan berwarna, yang kemudian menangkap. Perhatikan bahwa seperti semua bidak catur dan xiangqi, meriam tidak dapat menangkap kepingan warna mereka sendiri.
Misalnya, dalam diagram berikut, ruang tempat meriam ( C
) dapat ditandai ditandai dengan *
, dan ruang yang dapat dilompati dan ditangkap ditandai dengan X
, dengan asumsi bahwa ada potongan hitam / huruf kecil di sana.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Tantangan
Tulislah sebuah program atau fungsi yang, dengan papan xiangqi dan koordinat meriam di papan itu sebagai input, menampilkan daftar koordinat yang dapat dipindahkan atau dilompati oleh meriam.
Format untuk semua I / O fleksibel.
Format yang dapat diterima untuk papan xiangqi termasuk string yang dipisahkan baris baru, daftar string, atau string dengan pemisah lainnya yang tidak ada aceghrsACEGHRS.
. Anda mungkin menganggap papan akan selalu 9x10, ukuran papan xiangqi.
Isi papan itu sendiri akan terdiri dari sejumlah periode ( .
), mewakili titik-titik kosong di papan tulis, dan karakter yang mewakili potongan-potongan. Pemetaan piece-to-karakter adalah sebagai berikut:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Huruf besar mewakili potongan merah, dan huruf kecil mewakili keping hitam. Karakter yang tidak tercantum di sini (yaitu tidak ada aceghrsACEGHRS.
) tidak akan muncul di papan tulis.
Format koordinat input fleksibel, dan tidak diperlukan untuk mencocokkan format koordinat output. Ini bisa berupa daftar dua elemen integer, 2-tuple, dua angka dengan pemisah apa pun, atau dua karakter, misalnya. Ini juga bisa 0-diindeks atau 1-diindeks. Anda dapat mengasumsikan bahwa koordinat di papan akan selalu menyelesaikan meriam ( C
atau c
).
Koordinat di mana meriam dapat melompat dan bergerak harus muncul dalam daftar yang sama dalam output; perbedaan antara keduanya tidak perlu. Format yang dapat diterima untuk setiap koordinat output individual sama dengan format untuk koordinat input. Koordinat mungkin dipisahkan baris baru, keluaran sebagai daftar, atau representasi lainnya. Tidak diperlukan urutan tertentu; urutannya bahkan tidak harus deterministik.
Perhatikan bahwa melompat ke sepotong dengan warna yang sama (kasus) dari meriam tidak sah, dan dengan demikian tidak dapat muncul dalam output.
Uji kasus
Perhatikan bahwa tidak semua kasus uji adalah posisi xiangqi yang memungkinkan.
Input board
Input coordinate (0-indexed)
List of output coordinates
.........
.........
.........
.........
.........
....C....
.........
.........
.........
.........
(4, 5)
[(0, 5), (1, 5), (2, 5), (3, 5), (5, 5), (6, 5), (7, 5), (8, 5), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 6), (4, 7), (4, 8), (4, 9)]
.........
.....G...
.........
.........
.....e...
.........
.........
h..R.c..S
.....a...
.........
(5, 7)
[(4, 7), (6, 7), (7, 7), (5, 6), (5, 5), (5, 1)]
..s......
..A...e..
.........
EACCcsh.H
..r......
.....S...
......s..
....C....
..g......
(2, 3)
[(2, 0), (2, 2), (4, 3), (2, 9)]
rheagaehr
.........
.c.....c.
s.s.s.s.s
.........
.........
S.S.S.S.S
.C.....C.
.........
RHEAGAEHR
(7, 7)
[(2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (8, 7), (7, 0), (7, 3), (7, 4), (7, 5), (7, 6), (7, 8)]
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat (dalam byte) menang. Selamat bermain golf!