Buat program terpendek untuk memeriksa yang telah memenangkan dalam sebuah n d tic tac toe game.
Program Anda harus bekerja ketika n
(lebar) dan d
(nomor dimensi) berada dalam rentang ini:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2 yaitu 3 oleh 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3 yaitu 3 oleh 3 oleh 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2 yaitu 6 oleh 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
Dan seterusnya.
Menang (Jika Anda telah memainkan cukup banyak tac toe tic multi-dimensi, ini sama.)
Agar menang, satu pemain harus memiliki semua kotak yang berdekatan di sepanjang garis. Artinya, pemain itu harus n
bergerak pada garis untuk menjadi pemenang.
Berdekatan:
- setiap ubin adalah sebuah titik; misalnya (0,0,0,0,0) adalah titik di
d=5
- ubin yang berdekatan adalah ubin sedemikian rupa sehingga keduanya merupakan titik pada unit d-cube yang sama. Dengan kata lain, jarak Chebyshev antara ubin adalah 1.
- dengan kata lain, jika suatu titik
p
berbatasan dengan suatu titikq
, maka setiap koordinat dalamp
koordinat yang sesuaiq
berbeda darinya dengan tidak lebih dari satu. Selain itu, setidaknya pada pasangan koordinat berbeda dengan tepat satu.
Garis:
- Garis ditentukan oleh vektor dan ubin. Garis adalah setiap ubin yang terkena persamaan:
p0 + t
<
some vector with the same number of coordinates as p0>
Memasukkan :
Masukan akan ke STDIN. Baris input pertama adalah dua angka, n
dand
dalam bentuk n,d
.
Setelah ini akan menjadi garis yang terdiri dari koordinat yang menentukan gerakan yang telah dilakukan. Koordinat akan terdaftar dalam bentuk: 1,1;2,2;3,3
. Pojok kiri atas adalah asal (0,0 untuk 2D). Dalam kasus umum, daftar ini akan seperti di 1,2,...,1,4;4,0,...,6,0;...
mana angka pertama mewakili kiri-kanan, kedua naik ke atas, ketiga melalui dimensi ke-3, dll. Perhatikan bahwa koordinat pertama adalah X
giliran pertama, yang kedua adalah O
giliran pertama, ....
Input akan diikuti oleh baris baru.
Keluaran :
Output akan ke STDOUT. Cukup tunjukkan siapa yang menang jika seseorang menang, atau apakah itu seri. Jika ini bukan seri atau kemenangan, jangan hasilkan apa pun.
Selain itu, tunjukkan jika ada bentrokan gerakan, yaitu, jika ada setidaknya dua gerakan di lokasi yang sama.
Jika ada win / draw sebelum input berakhir, program Anda dapat melakukan apa pun yang diinginkan.
Test case (ada yang mau menyarankan lagi?):
Memasukkan:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
Contoh Output:
X wins
Output lain yang mungkin (memerlukan penjelasan):
1
n
langkah untuk menjadi pemenang. (Maaf karena tidak memposting komentar ini di kotak pasir tetapi saya bahkan tidak punya waktu untuk melihatnya di sana karena itu diposting begitu cepat setelah sandboxing.)