pengantar
Dice 10.000 adalah permainan dadu yang dapat dimainkan dengan 6 dadu dan sesuatu untuk ditulis. Para pemain melempar dadu beberapa kali secara bergantian dan mendapatkan skor di bagian akhir. Pemain yang mencapai 10.000 poin pertama memenangkan permainan. Menghitung skor satu roll adalah tugas Anda dalam tantangan ini.
Lihat di sini untuk aturan lengkapnya.
Harap perhatikan bahwa aturan (terutama skor) berubah dari satu wilayah ke wilayah lain sejak game ini dikenal luas. Kami menggunakan aturan yang diuraikan di bawah ini.
Tantangan
Diberikan daftar enam angka dari satu hingga enam yang mewakili dadu roll, output skor mereka. Skor dihitung dengan cara berikut:
- Yang dihitung 100 poin
- Lima hitungan 50 poin
- Kembar tiga menghitung jumlah mereka kali 100 poin. Tiga berpasangan misalnya memberi 200 poin. Pengecualian adalah tiga yang menghitung 1000 poin.
- Enam dari jumlah yang sama dihitung seperti dua kembar tiga seperti dijelaskan di atas. Jadi enam bertiga memberi 600 poin. Hal yang sama berlaku untuk kasus tepi dengan yang: Enam yang 2.000 poin.
- Satu mati tidak dapat digunakan lebih dari sekali. Jika dadu adalah bagian dari triplet, dadu tidak dihitung untuk penilaian lainnya. Balita dalam triplet tidak menghitung 50 poin di samping 500 poin yang mereka berikan.
- Tiga kali lipat selalu dihitung pertama untuk memaksimalkan skor. Jadi tiga balita tidak pernah dihitung sebagai 150 poin. Empat balita dihitung sebagai satu triplet dan lima biasa yang kemudian memberikan 550 poin.
Catatan
- Input akan selalu berisi enam angka dari satu hingga enam. Anda tidak akan menerima input yang tidak valid.
- Jumlahnya bisa dalam urutan apa pun. Anda mungkin tidak menerima pesanan khusus apa pun.
Aturan
- Format input terserah Anda selama belum diproses.
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Jawaban:
05AB1E ,
343130 bytePenjelasan
Cobalah online
sumber
Python 2,
152148125 byteSolusi yang cukup sederhana. Dapat bermain golf lebih banyak.
L.count
agak lama, tapi saya tidak bisa menghapus panggilan pertama karena L diperbarui.Cobalah online - (semua kasus uji)
Tidak Disatukan:
Beberapa kredit golf untuk @Copper , menggunakan beberapa tips dari kode nya
sumber
PowerShell
v2 +v3 +,147144137133 byteDicoret 144 sepertinya 144?
Mengambil input
$args[0]
dan memasukkannyasort
ke dalam$n
. Kemudian,while
masih ada elemen yang tersisa, kita mengevaluasi sebuahif
/else
.Jika elemen pertama (temp disimpan ke dalam
$x
untuk menyimpan beberapa byte) cocok dengan elemen ketiga, kami memiliki tiga. Tambahkan ke$s
um hasil dari beberapa perkalian100*$x
ditambah900
hanya berbasis Boolean jika$x
sudah-eq
sampai1
. Ini memberi kita syarat1000
untuk tiga orang. Kemudian, lepaskan dua elemen pertama ke dalam$a
, dan$b
, dan sisanya ke$n
- menghapus elemen ketiga dari triple ditangani kemudian.Jika tidak, kami tidak memiliki triple, jadi tambahkan ke
$s
um hasil dari penambahan lain yang berbasis Boolean. Kami menambahkan50
jika$x
ini baik1
atau5
, kemudian tambahkan yang lain50
jika itu-eq
ual untuk1
. Bagian ini sekarang memerlukan v3 + untuk-in
operator.Dalam kedua kasus tersebut, kami masih memiliki elemen yang belum dihapus, jadi lepaskan elemen pertama ke dalam
$a
dan biarkan sisanya masuk$n
.Akhirnya, setelah loop selesai, letakkan
$s
di pipeline. Output adalah implisitWrite-Output
pada akhir eksekusi.Uji kasus
sumber
JavaScript (ES6),
8786 byteMengurutkan dan merangkai input sehingga kombinasi pemberian skor dapat diidentifikasi dengan cara regexp. Sunting: Disimpan 1 byte berkat @Arnauld.
sumber
s>>7
bukannyas>111
menyimpan satu byte di versi pertamaPython 2 atau 3,
123 122 121 116 109 108 104 102 10097 bytePython 2, 97 byte
Kasus uji ada di ideone
Python 3, 97 byte
sumber
Ruby,
8078 byteCobalah online!
-2 byte dari @ezrast.
sumber
i<2&&i=10
menghemat 2 byte.Haskell,
130123 byteIni bukan tantangan bagi Haskell. Saya juga bermain golf ini.
Terima kasih kepada @nimi.
sumber
Javascript (ES6),
8584 byteKasus uji:
sumber
Python 3, 131 byte
Ini adalah ungkapan lambda; untuk menggunakannya, tetapkan dengan menambahkan
f=
.Kami pertama kali memeriksa triples dua kali (dengan menggunakan modulus), menghapus tiga kali lipat saat kami pergi; maka kita cukup menambahkan hitungan
5
dan1
skor dan mengembalikannya.Cobalah di Ideone! (dengan semua kasus uji)
Inilah pengajuan Python 2 saya yang lebih lama:
Python 2,
176172171145136134133 bytesMenyimpan byte pada solusi Python 2 berkat @ mbomb007!
sumber
print s
lebih pendek dalam Python 2.BASH (sed + bc) 161
Saya ingin melakukan semuanya dalam sed, tetapi penambahan itu sangat sulit ...
Penjelasan:
00
ke nomor pertama dan hapusmis. Lainnya
1 2 1 3 1 4
->100 2 3 4
10
dengan1
kemudian1
dengan100
misalnya
100
->10
->1000
atau1
->1
->100
5
- masing yang tidak diikuti0
dengan50
0
+
+
s0
bc
menambahkan semuanya.sumber
Perl, 69 byte
Termasuk +2 untuk
-ap
Jalankan dengan input pada STDIN:
dice10000.pl
:sumber
C # (.NET Core) ,
228227 byteCobalah online!
Saya merasa seperti saya kehilangan banyak, banyak potensi optimasi di sini, tetapi saya memang menyimpan satu byte dengan mengalikannya dengan 10 pada akhirnya. Input harus diberikan sebagai argumen baris perintah terpisah.
sumber
Perl 5
-ap
, 78 byteCobalah online!
sumber