Banyak orang telah pergi ke pusat bowling lokal mereka untuk memainkan beberapa permainan bowling, dan banyak orang terus berjuang untuk menghitung skor mereka. World Bowling telah memperkenalkan sistem penilaian yang disederhanakan untuk menarik lebih banyak orang ke olahraga. Sistem penilaian ini digunakan dalam permainan internasional.
Sistem penilaian bekerja seperti ini (dari Wikipedia ):
Sistem penilaian Bowling Dunia — digambarkan sebagai "penilaian bingkai saat ini" [32] —menuju pin sebagai berikut:
- strike: 30 (terlepas dari hasil rolls berikutnya)
- cadangan: 10 plus pinfall pada gulungan pertama dari frame saat ini
- open: pinfall total untuk frame saat ini
Jika Anda tidak terbiasa dengan bowling sepuluh pin, inilah rekapnya.
Ada 10 pin di ujung jalur bowling di mana tujuannya adalah untuk menjatuhkan mereka semua dengan bola bowling. Anda mendapatkan 2 gulungan bola untuk menjatuhkan mereka semua, lebih baik menjatuhkan mereka dengan gulungan pertama (dikenal sebagai pukulan ). Jika Anda mendapatkan pukulan, maka frame itu selesai dan Anda tidak perlu melempar bola untuk kedua kalinya. Pemogokan bernilai 30.
Jika Anda tidak meruntuhkan kesepuluh, Anda mendapatkan satu gulungan lagi. Jika Anda merobohkan semua pin yang tersisa, itu dikenal sebagai cadangan . Skor ini bernilai 10 pin + jumlah pin yang dirobohkan pada gulungan pertama. Misalnya, jika saya merobohkan 7 pin, maka berhasil merobohkan 3 pin yang tersisa, itu akan bernilai 17.
Jika setelah roll kedua Anda gagal merobohkan semua sepuluh, itu dikenal sebagai bingkai terbuka . Skor ini sebanding dengan jumlah total pin yang dirobohkan untuk frame itu.
Ada 10 frame dalam game . Jika Anda terbiasa dengan skor bowling tradisional, Anda tidak mendapatkan rol tambahan di frame 10 dengan World Bowling Scoring. Dalam penilaian bowling tradisional, dibutuhkan 12 serangan berurutan untuk mendapatkan skor sempurna 300, sedangkan skor World Bowling hanya membutuhkan 10 serangan berurutan.
Tantangan
Tantangan Anda adalah menghitung nilai yang diberikan nilai dari lembar skor.
Pada lembar skor, kehilangan ditandai dengan tanda hubung ( - ), serangan dengan X , dan cadangan dengan garis miring ( / ). Jika ini tidak berlaku, maka jumlah pinfall hanya ditunjukkan dengan angka (1-9). Pelanggaran dan pemecahan juga dicatat pada lembar skor tetapi Anda tidak perlu khawatir tentang ini.
Memasukkan
Anda akan diberi string yang terdiri dari skor untuk setiap frame, dan akan memiliki total sepuluh frame. Setiap frame akan memiliki hingga dua nilai, atau nilai minimal 1 jika ada serangan. Input Anda dapat berupa parameter string ke suatu fungsi, membaca dari file, atau dari STDIN.
Misalnya, jika saya merobohkan 1 pin pada gulungan pertama saya, lalu menjatuhkan 2, bingkai akan terlihat seperti "12". Ini tidak berarti 12 (dua belas), tetapi berarti 1 dan 2, dengan total 3.
Jika saya melewatkan setiap pin dengan kedua gulungan (talang bola), akan terlihat seperti ini "-" (skor 0).
Setiap frame akan dipisahkan oleh spasi.
Masukan sampel
-- 9- -9 X -/ 8/ 71 15 44 X
Untuk menjabarkan contoh ini,
- Frame 1 (-) - kedua gulungan tidak terjawab. mencetak 0
- Bingkai 2 (9-) - merobohkan 9 gulungan pertama, terlewatkan pada gulungan kedua. Skor 9
- Frame 3 (-9) - Melewatkan semua pada yang pertama, mendapat 9 pada yang kedua. Skor 9
- Frame 4 (X) - Strike, merobohkan semua sepuluh. Skor 30
- Frame 5 (- /) - Spare, ketinggalan semua pada yang pertama, merobohkan semua dengan gulungan ke-2. Nilai 10 + 0 = 10
- Frame 6 (8 /) - Spare, 8 pin pada roll pertama, menjatuhkan 2 lainnya dengan roll kedua. Nilai 10 + 8 = 18
- Frame 7 (71) - bingkai terbuka, 7 pin pada gulungan pertama, 1 pin pada gulungan kedua. Skor 7 + 1 = 8
- Bingkai 8,9,10 ikuti contoh yang sama seperti di atas.
Keluaran
Output hanya akan menjadi nilai yang memiliki jumlah skor dari semua 10 frame. Menggunakan input sampel, output akan menjadi 128. Output Anda mungkin berupa string atau tipe numerik. Ini bisa berupa nilai pengembalian fungsi, atau ditulis ke STDOUT.
Aturan
- Asumsikan bahwa input akan selalu valid. Misalnya, bingkai yang tidak valid adalah "/ 8", "XX", "123", "0", dll.
- Anda tidak perlu khawatir tentang perpecahan atau pelanggaran.
- Kode Anda dapat berupa program lengkap atau fungsi yang mengambil string dan mengembalikan skor.
- Kode Anda tidak boleh membuang pengecualian.
- Ini adalah kode golf, jawabannya dengan jumlah byte terkecil yang menang.
- Bahasa yang menggunakan termasuk atau impor harus menyertakan pernyataan impor sebagai bagian dari kode mereka dan dihitung terhadap jumlah byte.
Uji Kasus
"-- 9- -9 X -/ 8/ 71 15 44 X" -> 128
"-- -1 2- 12 22 5- 42 61 8- 72" -> 45
"X X X 1/ 2/ 3/ 4/ 5/ -- 9/" -> 174
"X X X X X X X X X X" -> 300
"-- -- -- -- -- -- -- -- -- --" -> 0
Jawaban:
05AB1E ,
1211 byteKode
Cobalah online!
Penjelasan
sumber
JavaScript, 43 byte
Tampilkan cuplikan kode
Bagaimana itu bekerja
Kami mengkonversi setiap karakter ke intinya:
Kemudian jumlah semua poin.
Mengubah
Bitwise ATAU operator
|
mengonversi operan ke Int32 sebelum beroperasi. Saat mengonversi ke Int32, nilai terlebih dahulu dikonversi ke format Angka (angka float 64bit), kemudian trunk ke Int32 (atau dikonversi ke 0 jika tidak valid).ToInt32({'/':10,X:30}[c])
dapat dibaca sebagai:ToInt32(undefined)
->ToInt32(NaN)
-> 0;ToInt32(c)
bisa jadi:Number(c)
adalah 0, hasilnya adalah 0;Number(c)
adalahNaN
, hasilnya adalah 0;Jumlah
[c,...s] = s
biarkanc = s[0]
, dans = s.slice(1)
;sumber
Stax , 13 byte
Jalankan dan debug itu
Membongkar, tidak bertunas, dan berkomentar demikian.
Jalankan yang ini
sumber
Python 2 , 55 byte
Cobalah online!
Didasarkan pada pendekatan string-index dari banyak solusi.
sumber
Java 8,
645946 byte-5 byte terima kasih kepada @Neil .
-13 byte berkat @ OlivierGrégoire .
Penjelasan:
Cobalah online.
sumber
("123456789//"+1e6+1e6+"X")
tampaknya menghemat 5 byte.F #,
106103 byteCobalah online!
Saya pikir teka-teki ini (tanpa bermain golf) akan menjadi pertanyaan yang bagus untuk panduan "Pemrograman fungsional untuk pemula". Dan saya harus tahu!
-3 dari Kevin Cruijssen, untuk mengetahui bahwa spasi putih antara 'dan "maka" dapat dihapus. Terima kasih!
solusi Stax rekursif menggunakan indeks string sangat sangat baik. Jika Anda porting ke F # Anda bisa mendapatkannya untuk 77 byte :
Coba ini secara online!
sumber
'
-3 byte.Jelly , 17 byte
Tautan monadik yang menerima daftar karakter dan mengembalikan integer
Cobalah online!
Bagaimana?
Juga di 17:
Coba itu
sumber
Perl 6 , 30 byte
Cobalah online!
sumber
Retina , 17 byte
Cobalah online!
Saya tidak cukup tahu tentang perubahan Retina terbaru. Saya akan melihat lebih dalam ketika saya mendapat kesempatan dan melihat apakah ada trik baru untuk bermain golf ini. Kode mengubah semua teguran menjadi tiga suku cadang, semua suku cadang menjadi sepuluh poin, lalu semua poin ke jumlah garis bawah yang sesuai. Kemudian ia menghitung jumlah garis bawah.
sumber
Perl 5
-pF
,3027 byte-3 byte terima kasih kepada Xcali
Cobalah online!
sumber
/X/
alih-alihy/X//
dan satu lagi dengan menggunakanm%/%
alih-alihy%/%%
: Coba online!y///
dari ketika saya melakukannya di luar lingkaran. Terima kasih05AB1E , 14 byte
Cobalah online!
Penjelasan
sumber
J , 33 byte
Cobalah online!
Penjelasan:
]
input('-123456789',20 1#'/X')
menambahkan 20/
dan satuX
ke string-123456789
i.
menemukan indeks input dalam string di atas31|
modulo 31 - untuk menghilangkan spasi - mereka tidak ditemukan dalam string, jadii.
kembalikan 31 untuk mereka1#.
menemukan jumlah indekssumber
Python 2 , 67 byte
-3 byte terima kasih kepada @KevinCruijssen
Cobalah online!
sumber
'-123456789'+'/'*20+'X':sum(p.index(i)
ke'-123456789/'+'X'*20:sum(p.rfind(i)
Jelly , 12 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3.6 , 54 byte
Cobalah online!
sumber
Kotlin , 50 byte
Cobalah online!
Mudah-mudahan tidak melanggar aturan untuk menjawab pertanyaan Anda sendiri, tetapi saya ingin ikut bersenang-senang.
Math.E
menghasilkan nilai2.718281828459045
. Saya menggunakannya untuk membuat beberapa string pengisi untuk mendorong X ke posisi 30.indexOf
mendapatkan posisi (berbasis-0) dari karakter dalam string "12345 ...". Jika tidak ditemukan, ia mengembalikan -1. Kami menambahkan 1 untuk membuat 0 ini, dan itu juga menjadikan posisi berbasis 0 nilai dari string.sumber
PHP,
119109 byte-10 byte terima kasih kepada @KevinCruijssen
Cobalah online!
sumber
($b=='/'?10+(int)$a:((int)$a+(int)$b))
ke(int)$a+($b=='/'?10:(int)$b)
untuk -10 byte.Arang , 23 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Merah , 93 byte
Cobalah online!
sumber
C # (.NET Core) , 40 + 18 = 58 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 53 byte
Cobalah online!
sumber
SNOBOL4 (CSNOBOL4) ,
169151147 byteCobalah online!
sumber
Clojure , 70 byte
Cobalah online!
Ketika
reduce
menggunakan String, masing-masing char sebenarnya diubah menjadi char - yang akan berpikir. Tapi ini berarti, saya harus menulis\space
dan itu menyakitkan lebih dari yang bisa dibayangkan. Juga, ketika membuat angka aktual dari char, kombinasibigint
danstr
tampaknya merupakan satu-satunya kombinasi yang dapat digunakan.Nah, terlepas dari semua perjuangan ini: Fungsi anonim yang mengembalikan skor sebagai hal yang wajar.
sumber
Ruby , 38 byte
Cobalah online!
sumber