421 adalah permainan dadu yang agak populer di Prancis dan beberapa negara Eropa lainnya. Sebagian besar dimainkan di bar dan pub untuk menentukan siapa yang akan membeli minuman berikutnya. Gim penuh biasanya dimainkan dalam dua putaran, dengan token yang setiap pemain coba singkirkan, tetapi ini tidak relevan di sini. ( Halaman Wikipedia dalam bahasa Prancis.)
Permainan ini dimainkan dengan 3 dadu kubus standar.
Tugas
Tugas Anda adalah untuk mengurutkan daftar gulungan 3-dadu yang tidak kosong [X, Y, Z] dari tertinggi ke terendah, dengan menerapkan aturan pemberian skor pada game ini.
Penilaian dasar
- 4,2,1 adalah kombinasi setinggi mungkin. Tergantung pada aturannya, skor mungkin 8, 10, atau 11 poin. Karena kami menyortir gulungan daripada menghitung poin, nilai pastinya tidak masalah.
- Three Aces: 1,1,1 adalah kombinasi tertinggi kedua dan skor 7 poin.
- Two-Aces: X, 1,1 (di mana X adalah 2 hingga 6) mencetak poin X.
- Three-of-a-Kind: X, X, X (di mana X adalah 2 hingga 6) mencetak poin X.
- Straights: X, X + 1, X + 2 skor 2 poin.
- Semua gulungan lainnya menghasilkan 1 poin.
Menyelesaikan ikatan
Setiap kali dua gulungan memberikan jumlah poin yang sama, aturan berikut ini berlaku:
- Two-Aces lebih baik daripada Three-of-a-Kind. Contoh: 5,1,1 ketukan 5,5,5 .
- The Three-of-a-Kind 2,2,2 lebih baik daripada yang lurus. Contoh: 2,2,2 ketukan 4,5,6 .
- Straights dipesan dari terendah ke tertinggi. Contoh: 4,5,6 ketukan 2,3,4 .
- Semua gulungan lainnya diselesaikan dengan menyortir dadu dari tertinggi ke terendah. Contoh: 6,5,2 ketukan 6,4,3 . (Oleh karena itu, kombinasi serendah mungkin dalam permainan adalah 2,2,1 .)
Di bawah ini adalah 56 gulungan berbeda yang mungkin dipesan dari tertinggi ke terendah:
421 111 611 666 511 555 411 444 311 333 211 222 654 543 432 321
665 664 663 662 661 655 653 652 651 644 643 642 641 633 632 631
622 621 554 553 552 551 544 542 541 533 532 531 522 521 443 442
441 433 431 422 332 331 322 221
Aturan tantangan
- Anda dapat mengambil gulungan dalam format apa pun yang wajar, seperti daftar daftar
[[3,2,1],[4,2,1]]
, daftar string["321","421"]
, daftar bilangan bulat[321,421]
, dll. Namun, setiap dadu harus dapat diidentifikasi dengan jelas dengan nilai dari 1 hingga 6 . - Untuk setiap gulungan, Anda dapat mengasumsikan bahwa dadu diurutkan baik dari terendah ke tertinggi atau dari tertinggi ke terendah, selama konsisten. Silakan sebutkan jawaban yang Anda harapkan, jika ada.
- Jawaban terpendek dalam byte menang!
Uji kasus
Menggunakan daftar string dengan dadu diurutkan dari tertinggi ke terendah:
Input
[ "321", "654" ]
[ "222", "321", "211" ]
[ "333", "311", "331", "111" ]
[ "111", "222", "333", "444" ]
[ "321", "421", "521", "621" ]
[ "422", "221", "442", "421", "222" ]
[ "222", "111", "421", "211", "651", "652", "543" ]
Output yang diharapkan
[ "654", "321" ]
[ "211", "222", "321" ]
[ "111", "311", "333", "331" ]
[ "111", "444", "333", "222" ]
[ "421", "321", "621", "521" ]
[ "421", "222", "442", "422", "221" ]
[ "421", "111", "211", "222", "543", "652", "651" ]
012
bukan123
)Jawaban:
Python , 93 byte
Cobalah online!
sumber
sort
metode ini.Retina 0.8.2 , 67 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan: Tombol pengurutan angka dibuat sebagai berikut:
sumber
Jelly ,
3734 byteTautan monadik yang menerima daftar daftar dadu gulungan (masing-masing turun diurutkan) yang menghasilkan gulungan diurutkan turun.
Cobalah online! Atau lihat test-suite ... atau coba semua gulungan yang diurutkan secara leksikografis
Bagaimana?
Metode ini membangun daftar semua gulungan dari tertinggi ke terendah *, menggantikan
[4,2,1]
dengan0
(input roll tidak valid), untuk menentukan peringkat setiap roll menggunakan indeks-indeks-atom pertama Jellyi
,.* Daftar ini juga termasuk pengulangan dan entri berlebihan yang tidak akan mempengaruhi perilaku:
sumber
R , 73 byte
Cobalah online!
421 ... 221
)x % 37
bukannya111
Penjelasan:
Untuk masing-masing angka 5 kunci dihitung dan digunakan secara hierarkis untuk mengurutkan array:
sumber
05AB1E ,
764845 byteIni ternyata jauh lebih lama dari yang diharapkan, tetapi setidaknya itu mudah diterapkan. Akan melihat apakah saya dapat menemukan solusi yang lebih baik ..Membuat daftar dengan tangan sekarang, tetapi masih agak lama.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Berikut adalah daftar aktual yang dihasilkan oleh bagian pertama dari kode:
Cobalah online.
Seperti yang Anda lihat itu berisi barang-barang kosong; angka seperti
765
atau210
; dan angka dalam kisaran[216, 112]
. Tapi kita semua bisa mengabaikannya, karena barang yang ingin kita sortir berada dalam urutan yang benar.Solusi 76 byte asli:
Coba online
atau verifikasi semua test case(tidak ada test suite karena masih ada bug dengan sort-by dengan angka terkompresi tidak melihat bracket penutupan untuk menghentikan sortir ).Penjelasan:
Penjelasan
•X˜„Éε´õñ€9Ú ù?ä0₅9úd5àPÎøŒccuĆYÑ,o¾eíË¿¼À8@gID=vÆOΣxjF¨O‡J₃^εR™\èv•667в
:Segala sesuatu di antara keduanya
•
adalah angka terkompresi yang dihasilkan dengan program berikut:Cobalah online.
Z>
: Ambil maks daftar + 1 (667
dalam hal ini)β
: Konversikan daftar dari Pangkalan667
ke satu nomor255B
: Dan konversi nomor tunggal itu menjadi basis255
(menggunakan halaman kode 05AB1E), jadi kami memiliki nomor terkompresi kami .Dengan menggunakannya
667в
, konversi nomor terkompresi ini kembali ke daftar semula.sumber
JavaScript (ES7), 96 byte
Mengurutkan bergulir dengan mematuhi aturan penilaian. Mengharapkan array string dengan gulungan individual dalam urutan nilai yang menurun, misalnya
["654"]
Cobalah online!
Penjelasan
Kategori gulungan dinaikkan ke eksponen berikut:
Tidak disatukan
Secara mental membuka bungkusan pemeriksaan bersyarat membuat saya sakit kepala, dan saya yakin itu entah bagaimana bisa lebih lanjut golf.
sumber
Javascript, 101 karakter, 116 byte (UTF-8)
Mengambil array angka yang mewakili gulungan seperti
[ 321, 654 ]
.Cobalah online!
Penjelasan:
Aku mengambil pertama 16 dari 56 mungkin gulungan yang berbeda (orang-orang yang tidak benar-benar mengikuti urutan apapun) dan saya dikodekan mereka sebagai string:
"ƥoɣʚǿȫƛƼķōÓÞʎȟưŁ"
. Setiap karakter dari string ini sesuai dengan 16 kemungkinan gulungan pertama (ƥ
is421
,o
is111
, ...). Sekarang untuk setiap dua elemena
danb
dari array kita hanya memeriksa indeks mereka dari string, jika mereka termasuk indeks yang digunakan, jika tidak (indeksnya-1
) kita menggunakan nomor roll itu sendiri (kita kurangi dari700
untuk membalik urutan urutan yang tidak termasuk, yaitu untuk mengurutkannya dalam urutan menurun).sumber
Bersih ,
169102 byteSemua lolos oktal dihitung sebagai satu byte, karena Clean compiler akan dengan senang hati mengambilnya, tetapi TIO dan SE tidak akan melakukannya karena mereka tidak terbentuk dengan baik UTF-8.
Cobalah online!
Menggunakan fakta bahwa semua gulungan dadu, sebagai bilangan bulat modulo 256, adalah unik.
Mudah,
Char
diperlakukan (sebagian besar) sebagai bilangan bulat 256 modulo.sumber
Pyth , 48 byte
Diharapkan input sebagai array bersarang, setiap elemen dipesan menurun. Coba online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
05AB1E , 24 byte
Cobalah online!
Algoritma keseluruhan:
Detail:
sumber