Dalam bentuk permainan Tic-Tac-Chec ini, tujuannya adalah untuk memindahkan bidak catur menjadi empat berturut-turut. Tujuan Anda di sini adalah untuk mengetahui apakah suatu posisi memiliki langkah kemenangan.
Aturan
Aturannya mirip, tetapi tidak identik, dengan aturan Tic-Tac-Chec.
Papan adalah 4 dengan 4 kotak. Setiap pemain memiliki benteng, uskup, ksatria, dan ratu. Pada gilirannya, Anda memiliki dua opsi. Anda dapat memindahkan salah satu karya Anda di papan, mengikuti aturan catur standar. Atau Anda dapat menempatkan potongan yang belum ada di papan tulis, di tempat kosong mana pun.
Jika Anda memindahkan bagian yang ada ke bagian lawan, bagian mereka diambil dari papan dan dikembalikan ke mereka. Namun, Anda tidak boleh menempatkan keping baru di atas kepingan lawan.
Segera setelah satu pemain memiliki semua bagian mereka dalam satu baris (atau kolom, atau diagonal), mereka menang.
Tantangan
Tulis program lengkap yang menerima papan dari STDIN, dan berikan output apakah pemain putih bisa menang pada giliran berikutnya.
Memasukkan
Empat string masing-masing 4 karakter. Setiap karakter adalah spasi atau bidak catur. Hanya benteng, uskup, ksatria, dan ratu yang digunakan, dan paling banyak satu dari masing-masing (per warna) dapat muncul. Tidak ada pemain yang memiliki empat-dalam-baris.
Anda dapat memilih apakah akan menerima sebagai input simbol Unicode untuk bidak catur, atau huruf. Jika Anda memilih huruf, RBKQ
mewakili potongan putih, dan rbkq
mewakili potongan hitam.
Keluaran
Jika pemain putih dapat menang pada giliran berikutnya, keluaran true
atau 1
. Kalau tidak, output false
atau 0
.
Program
Pilih angka X. Program Anda mungkin berisi paling banyak X karakter yang berbeda, dan tidak ada karakter yang muncul lebih dari X kali.
Kemenangan
X menang terendah. Dalam kasus seri, karakter paling sedikit menang.
Contohnya
Contoh-contoh ini menganggap input menggunakan huruf untuk mewakili potongan.
rkb
RB Q
true - the white player can place the knight to complete the bottom row.
-----------------------------------
rk
RBbQ
false - the black bishop prevents the white knight from completing the row.
-----------------------------------
rk
K
RBbQ
true - the white knight can capture the black bishop and complete the row.
-----------------------------------
rkRB
Qb
K
true - the white rook can move down one to complete the diagonal.
Jawaban:
C, 53 karakter berbeda
Ini menggunakan
"#%&()*+,-./01234569;<=>BKQR[\]acdefghilmnoprstu{|}
, ruang dan baris baru, didistribusikan sebagai berikut: 24 ×\n
, 33 ×, 20 ×
"
, 2 ×#
, 3 ×%
, 16 ×&
, 46 ×(
, 46 ×)
, 13 ×*
, 12 ×+
, 35 ×,
, 10 ×-
, 2 ×.
, 2 ×/
, 18 ×0
, 9 ×1
, 4 ×2
, 4 ×3
, 4 ×4
, 4 ×5
, 3 ×6
, 3 ×9
, 34 ×;
, 6 ×<
, 46 ×=
, 2 ×>
, 2 ×B
, 2 ×K
, 2 × , 3 ×Q
, 2 ×R
, 8 ×[
, 1 ×\
, 8 ×]
, 39 ×a
, 23 ×c
, 5 ×d
, 19 ×e
, 15 ×f
, 1 ×g
, 22 ×h
, 36 ×i
, 5 ×l
, 1 ×m
, 35 ×n
, 9 ×o
, 33 ×p
, 44 ×r
, 20 ×s
, 43 ×t
, 15 ×u
, 8 ×{
, 14 ×|
, 8 ×}
.Penjelasan
Ini bekerja dengan mencari baris, kolom atau diagonal yang berisi tiga keping putih;
a
menunjuk ke posisi target (belum mengandung potongan putih). Kemudian bagian yang hilang (o
) diidentifikasi - itu adalah bagian yang tidak kami hapus dari talih
saat kami melihatnya.Jika potongan itu tidak ada di papan, itu harus ada di tangan, dan itu hanya bisa dimainkan di ruang kosong. Kalau tidak (jika kami menemukannya di papan tulis), itu harus dalam posisi di mana ia dapat bergerak ke kotak target. Karena gerakan dapat dibalik, kami bertukar jika perlu, jadi itu
a < p
.Kami menguji gerakan ksatria terlebih dahulu - ada empat gerakan hukum ke bawah, dan kami menghindari membungkus tepi kiri / kanan papan dengan memverifikasi jumlah baris baru yang kami lewati.
Setelah itu, kami menguji gerakan rook, dan kemudian uskup bergerak, menggunakan algoritma yang sama (dan seorang ratu dapat menggunakan salah satu dari gerakan ini).
Program uji
Program penghitungan (dalam C ++)
sumber
6+3
untuk9
Dan16+3
untuk19