Anda muak dengan pemain lain dengan bangga mengumumkan "BINGO" dan berjalan dengan kemenangan melewati Anda untuk mengklaim hadiah mereka. Kali ini akan berbeda. Anda menyuap penelepon untuk memberi Anda panggilan BINGO sebelumnya, dalam urutan mereka akan dipanggil. Sekarang Anda hanya perlu membuat papan BINGO yang akan menang sedini mungkin untuk panggilan-panggilan itu, menjamin Anda menang (atau dasi yang tidak mungkin).
Diberikan string atau daftar panggilan terbatas, dalam format BINGO khas (termasuk huruf, misalnya B9
atau G68
, lihat aturan untuk info lebih lanjut), output matriks atau daftar 2D yang mewakili papan BINGO yang optimal untuk panggilan tersebut. Asumsikan input akan selalu valid.
Aturan BINGO:
- Papan 5x5
- "BINGO" adalah ketika kartu Anda memiliki 5 angka berturut-turut dari angka-angka yang telah dipanggil sejauh ini.
- Alun-alun pusat gratis (dihitung secara otomatis ke arah BINGO), dan dapat diwakili oleh spasi putih, daftar kosong
-1
,, atau0
. - The 5 kolom yang diwakili oleh huruf
B
,I
,N
,G
,O
, masing-masing. - Kolom pertama mungkin berisi angka 1-15, 16-30 kedua, ..., dan 61-75 kelima.
- Huruf dan angka yang diambil untuk input secara opsional dapat dibatasi (oleh sesuatu yang masuk akal, seperti a
,
atau spasi) atau diambil sebagai tupel karakter dan angka. - Output hanya membutuhkan angka di setiap tempat dalam matriks.
- Kotak yang tidak akan berkontribusi pada BINGO awal Anda harus valid, tetapi tidak harus optimal.
- Ini golf kode, kode terpendek yang menang
Contoh:
Saya menggunakan format input ini untuk contoh, karena lebih pendek. Lihat bagian di atas untuk format input / output yang dapat diterima.
O61 B2 N36 G47 I16 N35 I21 O64 G48 O73 I30 N33 I17 N43 G46 O72 I19 O71 B14 B7 G50 B1 I22 B8 N40 B13 B6 N37 O70 G55 G58 G52 B3 B4 N34 I28 I29 O65 B11 G51 I23 G56 G59 I27 I25 G54 O66 N45 O67 O75 N42 O62 N31 N38 N41 G57 N39 B9 G60 I20 N32 B15 O63 N44 B10 I26 O68 G53 I18 B12 O69 G49 B5 O74 I24
Possible Output (this has a horizontal BINGO in 3rd row. A diagonal is also possible.):
[[11,25,42,53,68],
[ 6,22,32,57,62],
[ 2,16, 0,47,61],
[ 3,17,37,59,75],
[ 9,19,41,46,70]]
N42 N34 O66 N40 B6 O65 O63 N41 B3 G54 N45 I16 O67 N31 I28 B2 B14 G51 N36 N33 I23 B11 I17 I27 N44 I24 O75 N38 G50 G58 B12 O62 I18 B5 O74 G60 I26 B8 I22 N35 B1 B4 G53 O73 G52 O68 B10 O70 I30 G59 N43 N39 B9 G46 G55 O64 O61 I29 G56 G48 G49 I19 G57 N37 O72 I25 N32 B13 B7 B15 O71 I21 I20 O69 G47
Must be a vertical BINGO in 3rd (N) column (because 4 N's came before one of each B,I,G,O):
[[11,25,42,53,63],
[ 2,22,34,57,65],
[ 6,16, 0,47,66],
[ 3,17,41,54,75],
[ 9,19,40,46,70]]
The 5 columns are represented by the letters B,I,N,G,O, respectively.
Jawaban:
Mathematica, 302 byte
Fungsi tanpa nama mengambil sebagai argumennya daftar pasangan berurutan, seperti
{{N,42},{N,34},{O,66},{N,40},...}
(perhatikan bahwa elemen pertama dalam setiap pasangan berurutan bukan string melainkan simbol telanjang), dan mengembalikan daftar bilangan bulat 2D, di mana sublist mewakili kolom (tidak baris) dari papan bingo.Output untuk kasus uji pertama:
Secara umum, ketika bingo sedini mungkin terjadi karena nomor yang dipanggil di setiap baris B / I / G / O, maka angka-angka itu akan berada di baris tengah; setiap kolom akan berisi empat angka terkecil yang mungkin (dengan memperhitungkan nomor yang sudah digunakan). Misalnya, jika test case pertama diubah sehingga angka kedua yang dipanggil
B12
bukanB2
, maka kolom pertama dari papan output akan{1,2,12,3,4}
.Output untuk kasus uji kedua:
Secara umum, ketika bingo yang paling awal mungkin terjadi karena lima angka yang disebut dalam satu kolom (atau empat disebut dalam kolom N), maka empat kolom sisanya berisi lima angka terkecil yang mungkin berurutan.
Jika test case kedua diubah dari
{{N,42},{N,34},{O,66},{N,40},...}
ke{{O,72},{O,74},{O,66},{N,40},...}
(hanya dua entri pertama yang berubah), maka outputnya adalah:Versi agak janggal:
Baris pertama sebagian besar definisi untuk mempersingkat kode, meskipun
g
mendahului alun{N,0}
- alun pusat ke input untuk menyederhanakan penemuan bingo. (n
Fungsi ini memberikan lima angka bingo hukum terkecil di#
kolom ke-1, diindeks 1.o
Fungsi ini mengambil 5-tupel dan menggerakkan elemen pertama sehingga menjadi yang ketiga.)The
While
loop dalam garis 2-6 menemukan segmen awal terkecil dari masukan yang berisi bingo. (Tes baris ketiga untuk bingo satu kolom di setiap kolom, sedangkan tes baris kelima untuk bingo kolom tunggal).Untuk fungsi apa pun
F
, operatorMapIndexed[F,{B,I,N,G,O}]
(mulai pada baris 7) menghasilkan 5-tupel{F{B,1},F{I,2},F{N,3},F{G,4},F{O,5}}
(baik, secara teknis itu{F{B,{1}},...}
); kami menerapkan fungsiF
yang membuat kolom papan bingo dari dua argumennya. Fungsi itu, bagaimanapun, tergantung pada jenis bingo yang ditemukan: baris 8 benar ketika kita memiliki bingo kolom tunggal, dalam hal ini fungsi (baris 9) menggunakan nomor input yang relevan di kolom bingo dan angka default di kolom lainnya. Dalam kasus lain, fungsi (baris 10-12) menggunakan nomor input yang relevan di tengah setiap kolom dan nomor default di tempat lain.sumber
Bingo
fungsi bawaan?Bingo
tidak dilarang? <Berlari untuk mengubah jawaban>JavaScript (ES6) 372 Bytes
Mungkin masih bisa bermain golf sedikit, tapi saya tidak mengerti caranya. Saran sangat dihargai;)
sumber