The Nonary Game adalah gim fiksi yang dimainkan dalam trilogi video game dengan nama yang sama. Tujuan Anda adalah untuk menemukan berapa banyak pemain (yang terbaik) yang dapat lolos dari permainan yang diberikan, dalam kode sesedikit mungkin.
Aturan mainnya
- Ada 9 pemain, bernomor 1 hingga 9.
- Semua pemain mulai di ruangan yang sama.
- Ada sejumlah pintu, masing-masing dengan nomor 1 hingga 9. Mungkin ada nomor pintu rangkap atau hilang.
- Pintu adalah koneksi satu arah antara kamar. Setiap pintu hanya bisa digunakan satu kali .
- Hanya grup dengan 3 hingga 5 pemain yang bisa melewati satu pintu.
- Suatu kelompok hanya dapat melewati pintu jika jumlah dari angka-angka mereka modulo 9 cocok dengan nomor pintu modulo 9.
- Setiap pemain yang melewati pintu 9 lolos (menang).
Contohnya
┌───┬───┬───┐
│ 6 4 9
│ < │ | |
│ 3 5 9
└───┴───┴───┘
<
mewakili titik awal. Semua pemain mulai dari sana.
Dalam pengaturan ini, semua orang bisa melarikan diri. Ada berbagai cara untuk mencapai hal ini, salah satunya adalah:
- [1, 2, 3, 4, 5] menuju pintu 6 ((1 + 2 + 3 + 4 + 5)% 9 = 6), sementara [6, 7, 8, 9] melewati pintu 3 ((6 + 7 + 8 + 9)% 9 = 3). Semua orang bertemu di kamar kedua.
- [1, 2, 3, 7] melewati pintu 4, sementara [4, 5, 6, 8, 9] melewati pintu 5.
- [1, 2, 3, 4, 8] melewati salah satu dari 9 pintu, [5, 6, 7, 9] melewati yang lain.
┌───┬───┐
│ │ |
│ < 8 9
│ │ |
└───┴───┘
Kali ini, paling banyak 4 orang dapat melarikan diri:
- [1, 3, 5, 8, 9] melewati pintu 8.
- [1, 3, 5, 9] melewati pintu 9.
Daftar selamat lainnya dimungkinkan, seperti [2, 3, 4] atau [1, 4, 6, 7], tetapi tidak ada cara bagi lebih dari 4 orang untuk melarikan diri.
Tantangan
Diberi peta, hasilkan jumlah maksimum pemain yang dapat melarikan diri.
- Jangan khawatir, Anda tidak perlu menguraikan diagram mengerikan saya! Input adalah grafik terarah berlabel, yang dapat Anda wakili dalam format apa pun yang nyaman (edge set, adjacency matrix ...).
- Jika representasi Anda memerlukan label untuk kamar, Anda dapat menggunakan serangkaian nilai yang konsisten. Namun, pintu harus diwakili oleh bilangan bulat 1 hingga 9.
- Input akan selalu memiliki setidaknya satu pintu 9. Semua 9 pintu selalu mengarah ke pintu keluar, sementara pintu lainnya tidak pernah melakukannya.
- Kiriman Anda dapat berupa fungsi atau program lengkap.
- Celah standar dilarang.
Uji kasus
Input ditampilkan sebagai daftar triplet [nomor pintu, dari kamar, ke kamar], dengan 0 sebagai ruang awal dan -1 sebagai pintu keluar. Jika Anda memilih untuk menggunakan format lain, Anda harus mengonversinya dengan tepat.
Input Output
[[6, 0, 1], [3, 0, 1], [4, 1, 2], [5, 1, 2], [9, 2, -1], [9, 2, -1]] 9
[[8, 0, 1], [9, 1, -1]] 4
[[9, 0, -1]] 5
[[2, 0, 1], [1, 1, 2], [9, 2, -1]] 0
[[2, 0, 1], [3, 1, 2], [9, 2, -1]] 3
[[1, 0, 1], [9, 1, -1], [1, 0, 2], [9, 2, -1]] 4
[[2, 0, 1], [3, 0, 1], [5, 1, 2], [4, 0, 2], [9, 2, -1], [9, 2, -1]] 8
[[3, 0, 1], [4, 0, 1], [5, 0, 1], [9, 1, -1], [7, 1, 2], [9, 2, -1]] 7
[[1, 0, 1], [2, 0, 1], [4, 0, 1], [9, 1, -1], [8, 1, 2], [9, 2, -1]] 6
[[6, 0, 1], [7, 0, 1], [9, 1, -1], [9, 1, -1]] 7
Jawaban:
JavaScript (ES6), 219 byte
Versi yang lebih lambat namun jauh lebih singkat menggunakan bitmask alih-alih string.
Cobalah online!
JavaScript (ES7),
293 272271 byteMengambil input dalam format yang dijelaskan dalam tantangan. Ini adalah pencarian brute force.
Cobalah online! (kasus uji pertama kali habis pada TIO)
Bagaimana?
Array
P[]
menyimpan daftar string yang menggambarkan pemain di setiap kamar.P=['241375698']
Untuk setiap kamar
X
di posisir
, kami menghitung rangkaianX
:Untuk setiap grup pemain
p
di sana dan untuk setiap pintu[d,s,t]
di indeksj
, kami menguji jika grup tidak dapat melewati pintu:Jika grup dapat lewat, kami melakukan panggilan rekursif:
Kami melacak jumlah maksimum pemain yang lolos
m
dan akhirnya mengembalikannya.sumber
Jelly , 76 byte
Cobalah online!
Program lengkap yang mengambil argumen tunggal, grafik berarah menggunakan kamar 1, 2, ... dan 0 sebagai keluar. Mengembalikan bilangan bulat yang merupakan jumlah maksimum yang dapat melarikan diri. Penjelasan lengkap untuk diikuti.
Harus dijalankan tanpa
Ṣ€€Q
untuk penghematan 4-byte tetapi lambat untuk beristirahat.sumber