Tugas Anda adalah untuk meringkas dan menghasilkan skor satu pemain dalam permainan bowling 10-pin setelah hingga 21 gulungan .
Gulungan direpresentasikan sebagai urutan bilangan bulat dalam metode input pilihan Anda . Setiap bilangan bulat sesuai dengan jumlah pin yang dirobohkan dalam gulungan itu.
Mencetak gol
Setelah setiap putaran , jumlah pin yang dijatuhkan di babak itu dihitung menjadi skor akhir. Jika seorang pemain merobohkan semua sepuluh pin pada putaran pertama dari sebuah ronde, ini adalah pukulan , dan ronde itu telah berakhir. Kalau tidak, putaran berlangsung untuk satu roll lagi. Jika gulungan kedua dari putaran merobohkan semua pin yang tersisa, ini merupakan cadangan .
Untuk setiap serangan ada bonus yang sama dengan jumlah pin yang dirobohkan dalam dua gulungan berikutnya. Untuk setiap cadangan ada bonus sama dengan jumlah pin yang dirobohkan dalam gulungan berikutnya.
Babak ke-10 dan terakhir, pemain dapat diberikan gulungan ekstra: Dalam hal terjadi pemogokan, pemain mendapat dua gulungan lagi untuk membuat bonus serangannya. Dalam hal cadangan, pemain mendapat satu gulungan lagi.
Contohnya
Input: 4 3 8 2 7 1 10 7 3 0 10 2 2 10 10 5 4
Output: 131
Input: 10 10 9 1 7 3 2 7 10 1 9 10 7 1 10 10 10
Output: 183
space separated integers
?Jawaban:
GolfScript,
5041 karakterUpaya lain di GolfScript ( jalankan online ).
Penjelasan kode berikut. Solusinya memanfaatkan sifat tumpukan masalah (mengkonsumsi gulungan satu demi satu) tetapi karena itu input harus dibalik.
Versi sebelumnya:
sumber
Python,
11611010510310099 karakterMenghabiskan 30 karakter pada input sangat menjengkelkan. Saran diterima.
Terima kasih banyak kepada Howard untuk perbaikan.
sumber
1+(z[i]!=10)
dengan2-(z[i]>9)
untuk menyimpan satu char.i
sepenuhnya (set ke 0) dan bukannyai+=...
menggunakanz=z[2-(z[0]>9)::];
z=input()
harus baik-baik saja (secara efektif mengambil representasi string dari daftarint
daneval
memasukkannya). Namun program penuh harus menampilkan suatu tempat (saya pikir ini juga terjadi saat itu juga). Karena itu saya percaya ini dapat diubah ke program 78 byte iniR, 101 byte
Saya tidak yakin mengapa tantangan ini terbentur, tetapi saya menyukainya, jadi saya akan terlambat menjawab.
Cobalah online!
Tidak Disatukan:
Fungsi rekursif. Diambil
x
sebagai input, yang menyimpan skor. Menginisialisasis
inti danc
memperkirakan jumlah putaran yang dilemparkan.Pernyataan if memeriksa apakah 10 putaran dilemparkan, atau jika
x
kosong. Jika itu masalahnya, skor dikembalikan. Jika tidak, fungsi akan memanggil dirinya sendiri sebagai berikut:Ini menghapus lemparan dari
x
, dengan memeriksa apakah itu serangan atau tidak. Jika demikian, entri pertama dihapus, atau dua entri pertama.(S=x[1]!=10)
memeriksa pemogokan. Kami menghapus (-
) indeks0:S
, di manaS
1 jika mogok, dan 0 jika tidak. Dan kemudian kita menambahkan satu:-(0:(x[1]!=10)+1)
. Kami meneruskanx
panggilan singkat ke panggilan berikutnya.Adapun skor, ini ditemukan dengan mengambil
x[1:2]
jika itu adalah giliran reguler, danx[1:3]
jika itu adalah serangan atau cadangan. Kami memeriksa apakahsum(x[1:2])
lebih besar atau sama dengan 10. Jika itu adalah pemogokan, jelas ini masalahnya. Jika itu cadangan, maka ini berfungsi juga. Jadi, jika ini BENAR, kami menambahx[3]
jumlahnya. Ini kemudian ditambahkan kes
.sumber
CoffeeScript (
234215170)EDIT : Sebuah penulisan ulang yang lumayan, tanpa malu-malu menjiplak pendekatan berbasis stack Howard yang hebat. Saya yakin lebih banyak yang dapat dihapus untuk mengakses elemen terakhir dari array tanpa merusaknya ...
sumber
Ruby, 252 byte
Menerima input ke dalam array, tambahkan semua elemen terlebih dahulu, lalu cari bonus cadangan dan teguran
sumber
PHP, 82 byte
mengambil input dari argumen baris perintah; jalankan dengan
-nr
atau coba online .kerusakan
sumber
Perl 5 , 65 + 2 = 67 byte
Membutuhkan
-ap
benderaCobalah online!
sumber
Jelly ,
3635 byteTautan monadik yang menerima daftar bilangan bulat dan mengembalikan bilangan bulat.
Cobalah online!
Bagaimana?
Hitung skor setiap putaran tumpang tindih dari tiga mangkuk seolah-olah itu adalah yang dimulai pada awal bingkai dan secara opsional menambahkan tanda pengenal pemogokan (
-1
), meratakan daftar hasil ini, membaginya pada pengidentifikasi pemogokan, kemudian membuang setiap detik hasil dari setiap chunk (menghapus skor run yang tidak benar-benar dimulai dengan awal frame).Untuk memenuhi kerangka akhir, nol pertama ditambahkan ke input (untuk memungkinkan pengiris 3-bijaksana untuk memungkinkan bingkai untuk memulai pada apa yang merupakan mangkuk kedua dari belakang) dan skor yang dihasilkan dipotong ke sepuluh pertama (untuk menghapus sekarang mungkin bingkai 11 palsu) sebelum menyimpulkannya.
sumber
Perl, 140?
Percobaan pertama:
Sedihnya, ada beberapa kasus dimana gagal. Saya akan datang dan mengulanginya nanti.
sumber