Inspirasi untuk tantangan ini harus sangat jelas pada saat posting.
Tugas
Anda harus membuat program gaya Tutup Kotak (tidak berfungsi, program). Dasar-dasar menutup kotak adalah:
Pemain berusaha menutup kotak dengan memutar satu set tuas berlabel 1-9. Mereka harus melakukannya dengan membalik tuas. Urutan peristiwa dari setiap belokan adalah sebagai berikut:
- Posisi tuas saat ini ditunjukkan.
- Pada gim baru, posisi tuas harus ditampilkan sebagai
123456789
. - Pada game dengan tuas tutup, semua tuas tutup ditampilkan sebagai
-
. Misalnya, pada gim yang memiliki tutup 1, 5, dan 9, hasilnya adalah-234-678-
.
- Pada gim baru, posisi tuas harus ditampilkan sebagai
- Di (c) e (adalah |) digulung.
- Jika tuas 7, 8, dan 9 semuanya mati, hanya satu dadu bermuka enam yang dibuang. Jika tidak, 2 dadu bermuka enam dilemparkan.
- Pemain diminta untuk memilih berapa banyak tuas yang ingin dibalik.
- Jika pemain memilih angka> 9 atau <0, permainan berakhir.
- Jika pemain memilih tuas yang sudah ditutup, permainan berakhir.
- Pemain memilih banyak tuas.
- Jika jumlah tuas tidak sama dengan nilai di (c) e yang dilemparkan, permainan berakhir.
- Jika semua tuas ditutup, selamat, Anda menang. Jika tidak, kembali ke langkah 1.
Aturan untuk Program
- Pada setiap belokan, Anda harus menampilkan posisi tuas saat ini.
- Anda harus menampilkan nilai gulungan dengan frasa
You rolled:
(perhatikan spasi). - Anda harus meminta (dan menunggu) jumlah tuas untuk beralih dengan frasa
How many levers to flip:
(perhatikan spasi). - Anda harus meminta (dan menunggu) tuas sebanyak yang ditentukan pemain dengan frasa
Which lever to flip:
(perhatikan spasi). - Anda harus membalik tuas yang ditentukan.
- Jika suatu saat permainan berakhir, Anda harus keluar
Game Over
. - Jika pemain menyelesaikan putaran tanpa tuas terbuka, Anda harus mengeluarkan
You win!
Contoh Game
123456789
You rolled: 5
How many levers to flip: 5
Which lever to flip: 1
Which lever to flip: 2
Which lever to flip: 3
Which lever to flip: 4
Which lever to flip: 5
Game Over
123456789
You rolled: 5
How many levers to flip: 3
Which lever to flip: 2
Which lever to flip: 2
Which lever to flip: 1
Game Over
123456789
You rolled: 12
How many levers to flip: 2
Which lever to flip: 3
Which lever to flip: 9
12-45678-
You rolled: 6
How many levers to flip: 2
Which lever to flip: 2
Which lever to flip: 4
1---5678-
You rolled: 11
How many levers to flip: 2
Which lever to flip: 5
Which lever to flip: 6
1-----78-
You rolled: 8
How many levers to flip: 1
Which lever to flip: 8
1-----7--
You rolled: 8
How many levers to flip: 2
Which lever to flip: 1
Which lever to flip: 7
---------
You win!
Jawaban:
Python 3, 348
Disimpan 5 byte berkat Mathias Ettinger.
Disimpan 7 byte berkat DSM.
Ooof, ini panjang. Saya juga benci bahwa tidak ada cara yang baik untuk melakukan tes kasus.
sumber
C,
405403398392390387 byteTidak disatukan
Edit: D'oh! Meninggalkan variabel yang tidak digunakan dalam jawaban golf saya. Saya telah menghapusnya tetapi menyisipkan versi yang salah.
sumber
PowerShell v2 +,
330322 byteBaris baru untuk kejelasan:
(Membutuhkan kembali versi 2 atau yang lebih baru karena
Get-Random
tidak ada di PowerShell v1 ...)Penjelasan:
Mulailah dengan mengatur
$a
ruas tuas dengan mengambil rentang1..9
, dan juga set$r
sama dengan blok skrip yang kita jalankan nanti (dijelaskan di bawah dengan$b
).Game Over
Kata - katanya akan diatur$g
pada awal loop tak terbatasfor(){...}
. Setiap iterasi, kami mengatur output kami$o
dan segera output itu (berkat(...)
enkapsulasi) dengan-join
menggabungkan array dan mengganti masing0
- masing dengan a-
. (0
Dijelaskan di bawah). Jika output sama dengan 9 tanda hubung, outputYou win!
danexit
.Selanjutnya, kami mengatur roll dadu kami
$b
dengan memanggil yang disimpan$r
(via&
) dengan beberapa parameter tambahan. TheGet-Random
perintah dengan-Maximum
dari6
(yang-Maximum
tersirat) akan menghasilkan bilangan bulat dari 0 hingga 5, inklusif. Kami menambahkan1
itu untuk mendapatkan die-sided enam sisi, dan menambahkannya ke die roll acak lain dikalikan dengan(($a|sort)[8]-ge7)
yang memeriksa apakah nilai tertinggi yang tersisa pada tuas adalah salah satunya7,8,9
dengan menyortir terlebih dahulu$a
dan kemudian mengambil elemen terakhir dan memeriksa apakah lebih besar -dari-atau-sama dengan7
. Kami menggunakan typecasting implisit untuk mengubah nilai Boolean menjadi 0 (Salah) atau 1 (Benar) untuk perkalian, sehingga "die" tambahan adalah salah satudie*0
ataudie*1
. Kami kemudian menampilkan hasil dari die roll.Berikutnya adalah
Read-Host
ke$l
berapa banyak tuas. Perhatikan bahwa PowerShell secara otomatis menambahkan ruang-usus:
setelahRead-Host
prompt, jadi setidaknya kami mendapatkannya secara gratis. Kami kemudian memeriksa bahwa jumlah tuas yang ingin dibalik pengguna adalah antara 1 hingga 9, selain ituexit
.Sekarang kita memasuki satu
while
lingkaran. Setiap iterasi dari loop ini, kitaRead-Host
tuas, simpan itu ke dalam$i
, dan kurangi nilai itu dari$b
. Kami kemudian juga mengurangi tuas yang sesuai dalam array, dan mengurangi berapa kali tambahan untuk permintaan pengguna.Baris terakhir (kecuali penjepit penutup) menguji dua konstruksi Boolean. Yang pertama, hanya
$b
, hanya akan$True
jika pengguna tidak mengurangi semua angka dengan benar dari die roll (di PowerShell, angka bukan nol adalah Truthy). Kondisi lain memilah$a
dan mengambil nilai minimal. Jika kita mengurangi tuas yang sama dua kali, maka nilai minimal akan negatif (atau Kebenaran), jika tidak nilai minimalnya adalah0
(atau Falsey).Contoh Jalankan:
sumber