Bank telah dibobol, dan semua preman mafia lokal memiliki alibi yang tidak biasa: mereka ada di rumah bermain Connect 4! Untuk membantu penyelidikan, Anda diminta untuk menulis sebuah program untuk memvalidasi semua papan Connect 4 yang telah disita untuk memeriksa apakah posisi tersebut memang posisi dari game Connect 4 yang valid, dan belum buru-buru disatukan. segera setelah polisi mengetuk pintu.
Aturan untuk menghubungkan pemain 4: R
dan Y
bergiliran untuk menjatuhkan ubin warna mereka ke dalam kolom kotak 7x6. Ketika seorang pemain menjatuhkan ubin ke kolom, jatuh ke bawah untuk menempati posisi terendah yang tidak terisi dalam kolom itu. Jika seorang pemain berhasil mendapatkan empat ubin warna secara horizontal, vertikal atau diagonal, maka mereka menang dan permainan berakhir segera.
Misalnya (dengan R
memulai), berikut ini adalah posisi Connect 4 yang mustahil.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Program atau fungsi Anda harus menggunakan papan Connect 4 dan kembali
- Nilai palsu, menunjukkan bahwa posisi itu tidak mungkin atau
- Sebuah string dari angka dari 1 sampai 7, menunjukkan satu urutan kemungkinan bergerak menuju posisi itu (kolom diberi nomor
1
untuk7
dari kiri ke kanan, dan begitu urutan112
, misalnya, menunjukkan langkah merah di kolom1
, diikuti oleh langkah kuning di kolom1
, diikuti oleh gerakan merah di kolom2
). Anda dapat memilih penomoran kolom selain 1234567 jika suka, selama Anda tentukan dalam solusi Anda. Jika Anda ingin mengembalikan daftar dalam beberapa format lain; misalnya sebagai array[2, 4, 3, 1, 1, 3]
maka itu juga baik-baik saja, asalkan mudah untuk melihat apa yang bergerak.
Anda dapat memilih untuk membaca papan dalam format apa pun yang masuk akal termasuk menggunakan huruf selain R
dan Y
untuk para pemain, tetapi Anda harus menentukan pemain mana yang lebih dulu. Anda dapat mengasumsikan bahwa dewan akan selalu 6x7, dengan dua pemain.
Anda dapat mengasumsikan bahwa posisi yang Anda terima setidaknya secara fisik memungkinkan untuk dibuat di papan Connect 4 standar; yaitu, bahwa tidak akan ada potongan 'mengambang'. Anda dapat mengasumsikan bahwa papan akan kosong.
Ini kode golf, jadi jawaban tersingkat menang. Celah standar berlaku.
Contohnya
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |
sumber
Jawaban:
Jelly , 57 byte
Membawa sebuah matriks di mana
0
tidak terisi,1
dimainkan pertama, dan2
dimainkan kedua. Menghasilkan daftar kolom 1-diindeks, kosong jika palsu diidentifikasi.Cobalah online! (terlalu tidak efisien untuk menjalankan lebih dari 7 potong kurang dari satu menit)
catatan:
ZṠṢ€Ƒȧ
untuk +6 byte)sumber
JavaScript (ES6),
202 194 187183 byteCobalah online!
Bagaimana?
Saat melakukan hal itu, ia memastikan bahwa kami tidak memiliki menjalankan empat nilai ganjil berturut-turut sampai semua nilai genap menghilang (yaitu jika suatu pihak menang, itu harus menjadi langkah terakhir).
Berkomentar
sumber
f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [0,2,2,0,2,2,0], [1,1,1,1,1,1,1] ])
diakhiri oleh0
danf([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [2,2,2,0,2,2,1], [1,1,1,1,1,1,1] ])
seharusnya benarPython 2 ,
295285 byteCobalah online!
-10 thx kepada Jo King .
Input adalah daftar string yang mewakili kolom; dengan '1' untuk Merah dan '0' untuk Kuning. String tidak '-dipasang. Jadi kasus (falsey):
dimasukkan sebagai:
Output adalah daftar indeks kolom, 0-diindeks, yang dapat membuat papan; atau
None
jika itu tidak valid.Terima papan kosong sebagai valid (mengembalikan daftar kosong
[]
sebagai gantiNone
).Pendekatan ini bersifat rekursif dari langkah terakhir ke langkah pertama: berdasarkan pada paritas dari total jumlah langkah yang diambil, kami menghapus langkah Merah terakhir atau langkah Kuning terakhir (atau gagal jika itu tidak mungkin); periksa papan yang dihasilkan untuk melihat apakah lawan memiliki 4-in-a-row (dalam hal ini gagal, karena permainan seharusnya sudah berhenti); jika tidak, ulangi sampai papan kosong (yang valid).
Kode 4-in-a-row adalah bagian yang paling menyenangkan. Semua string diagonal untuk matriks
b
dihasilkan oleh:yang pertama mencantumkan diagonal yang 'miring ke bawah', dan kemudian diagonal yang 'miring ke atas'.
sumber