Tantangan
Bar Dice adalah gim sederhana yang dimainkan di Bar with Dice (karena itulah namanya). Anda melempar 5 dadu enam sisi dan berusaha membuat yang terbaik.
Penilaian didasarkan pada mengumpulkan jumlah dadu terbesar dengan angka yang sama. Setiap tangan harus menyertakan setidaknya satu "Ace", atau satu, untuk menjadi tangan yang valid; Aces bertindak sebagai "liar", dan dapat dipasangkan dengan digit lainnya. Kekuatan tangan pemain pertama-tama bergantung pada jumlah digit dan kemudian nilai dari digit tersebut. Sebagai contoh, tangan (menghitung binatang buas) dengan empat 3 lebih baik daripada tangan dengan tiga 5, tetapi tidak lebih baik dari tangan dengan lima 2.
Diambil dari artikel Wikipedia
Ini berarti tangan dengan peringkat tertinggi seluruhnya terbuat dari 6 dan 1, dan peringkat terendah adalah tangan tanpa 1.
Tantangan Anda adalah mengambil dua tangan dan mengembalikan pemain mana yang menang, atau jika mereka terikat.
Memasukkan
Dua daftar yang tidak disortir dari 5 angka, mulai dari 1 hingga 6. Setiap daftar mewakili tangan pemain. Format input fleksibel.
Keluaran
Tiga nilai statis yang berbeda namun konsisten, (rentang tidak diizinkan) menandakan apakah pemain 1 atau pemain 2 menang, atau jika itu seri. Silakan sebutkan dalam jawaban Anda nilai apa yang Anda gunakan untuk apa. Misalnya, Anda dapat kembali -1
jika P1 menang, 0
jika seri, dan 1
jika P2 menang.
Aturan
- Masukan akan selalu valid
- Hanya skor terbaik dari masing-masing tangan yang digunakan untuk menentukan pemenang. Tidak ada pemutus dasi. Misalnya,
[1,4,4,3,3]
akan mengikat[1,4,4,2,2]
bukannya menggunakan 3's dan 2's sebagai tie-breaker. - Output harus menjadi salah satu dari 3 nilai yang dipilih setiap kali. Cukup memetakan semua angka negatif agar
P1 Wins
tidak diperbolehkan dan harus dinormalisasi. - Tangan yang tidak valid, yaitu yang tidak memiliki nomor satu, kalah dari semua tangan yang valid tetapi ikat dengan semua tangan yang tidak valid lainnya. Misalnya,
[2,2,2,2,2]
ikatan[3,3,3,3,3]
. - Sejumlah
[1,1,1,1,1]
dihitung sebagai set 6 yang valid untuk tujuan peringkat. - Ini adalah kode-golf sehingga hitungan byte terpendek menang.
Contohnya
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
sumber
IṠ
denganM
dan menampilkan daftar pemenang.Ḍ
sekarang mungkin berlebihan juga karena daftar mengurutkan sama dengan bilangan bulat.R ,
11596 byte-6 byte terima kasih kepada Giuseppe.
-6 byte terima kasih kepada Aaron Hayman.
-2 byte terima kasih kepada Arnauld, mengikuti format output dalam jawaban JavaScript- nya .
Cobalah online!
Pengembalian
Inf
untuk P1,NaN
untuk dasi,-Inf
untuk P2.Menggunakan fungsi helper
f
yang menghitung skor untuk masing-masing tangan. Skor didefinisikan sebagai berikut: biarkand
menjadi digit yang paling banyak diulang, dann
berapa kali itu diulang. Maka skornya adalah6*n+d
jika ada setidaknya satu kartu as, dan0
jika tidak ada kartu As. Kami kemudian hanya perlu menemukan pemain dengan skor tertinggi.Tidak Disatukan:
sumber
order(l)[5]
alih-alihmax.col(t(l),"l")
untuk mendapatkan solusi 96 byte: Cobalah secara online!JavaScript (ES6),
9790 byteMengambil input sebagai
(a)(b)
. Pengembalian+Infinity
untuk P1,-Infinity
untuk P2 atauNaN
untuk dasi.Cobalah online!
Berkomentar
sumber
05AB1E ,
1615 byte-1 byte terima kasih kepada JonathanAllan
Cobalah online!
Mengembalikan [1, 0] untuk P1 menang, [1, 1] untuk dasi, [0, 1] untuk P2 menang.
Alih-alih menggunakan urutan leksikografis pada 2-tupel (jumlah dadu, nilai dadu), ini menghitung skor sebagai 10 ** jumlah dadu * nilai dadu. Tangan tanpa skor 1 5.
sumber
ć+
(sekarang saya melihatnya saya tidak percaya saya tidak memikirkannya ..)! Itu jauh lebih baik daripada apa yang saya coba .. Saya memang punya ide serupa°
. :) Kecuali bahwa saya sudah pada 20 byte dan masih harus memperbaiki masalah untuk test case[[1,1,1,1,1],] [6,1,1,6,6]]
.. Jadi terima kasih telah menghemat waktu saya sehingga saya dapat menempatkan usaha saya di tempat sampah ..; pć+
kerjanya. Ide awal saya dimulai denganæʒW}ʒ1KË
, tetapi ini terbunuh oleh[1,1,1,1,1]
masalah ini.ε1¢©Āy{γéθ¬sg®+°P}`.S
, tetapi[1,1,1,1,1]
mengacaukan itu juga. Seluruh jawaban Anda mendapat sinergi yang bagus denganWΘ*
,6L¢
,ć+
, dan°ƶ
. Terutama builtinWćƶ
benar-benar menunjukkan kekuatan mereka di sini.W
sebenarnya tidak dibutuhkan,6L¢¬Ā*
sama dengan byte-countWΘ*6L¢
.W
tanpa muncul dan kemudian*
menunjukkan kekuatannya, tetapi¬
tanpa muncul dan*
pada dasarnya sama. Fakta bahwa itu tidak muncul adalah kekuatan yang saya maksudkan, menghemat satu byte. Tapi itu memang terutamaćƶ
.Python 2 ,
858180 byteCobalah online!
Pengembalian
1
untuk P1,0
untuk dasi, dan-1
untuk P2.-1 byte, terima kasih kepada squid
sumber
1
danin
bisa pergiPerl 6 ,
6049 byteCobalah online!
Pengembalian
More
,Same
,Less
untukP1 Wins
,Tie
,P2 Wins
.Penjelasan
sumber
Permintaan T-SQL, 148 byte
Menggunakan variabel tabel sebagai input
Cobalah online
sumber
Jelly , 21 byte
hancur sebelum aku bahkan diposting oleh Nick Kennedy :)
Tautan monadik yang menerima daftar pemain yang menampilkan daftar pemenang (diindeks).
Jadi P1 adalah
[1]
, P2 adalah[2]
dan seri[1,2]
.Cobalah online!
sumber
PowerShell ,
112126123121 byteMengambil input sebagai
(a)(b)
. Pengembalian-1
untuk kemenangan P1,1
untuk P2 atau0
untuk seri.Cobalah online!
Test case
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)
ditambahkan.Belum dibuka:
sumber
Bahasa Wolfram (Mathematica) ,
787574 byte-1 byte oleh Greg Martin
Cobalah online!
Output -1 saat pemain 1 menang, 1 saat pemain 2 menang, dan 0 untuk seri.
sumber
FreeQ[#,1]
dengan#~FreeQ~1
.Java 8,
244240236215199 byte-4 byte terima kasih kepada @someone .
-21 byte terima kasih kepada @Neil .
-16 byte terima kasih @ceilingcat .
Kembali
1
jika P1 menang;-1
jika P2 menang;0
jika itu dasi.Cobalah online.
Penjelasan:
sumber
...*(c[p][1]>0?1:0)
denganc[p][1]>0?...:0
. Saya tidak dapat memposting tautan TIO, karena terlalu panjang dan saya tidak ingin mempersingkatnya. Versi ungolfed memiliki tanda kurung yang tidak seimbang di sekitar sana.c[p][1]>0?
cek nanti sebagai perbaikan bug, tetapi ternyata tanpa banyak berpikir. Terima kasih untuk -4. :)*(i<2?6:i)
? Anda hanya menduplikasi usaha untuki=6
dani=1
. Ini bisa adil*i
(dan hentikan perulangan ketika Anda sampai ke 2).9
dapat berupa angka ajaib di antara keduanya5
dan sekitar32
, kan? Jika Anda menggunakan8
maka(int)Math.pow(8,(...)*i)
Anda tidak dapat menggunakani<<3*(...)
.a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}
yang tampaknya lulus semua kasus pengujian Anda ...Jelly , 27 byte
Cobalah online!
1 untuk P1, -1 untuk P2, 0 untuk dasi
Penjelasan
sumber
Sledgehammer 0.4 , 27 byte
Dekompresi ke dalam fungsi Bahasa Wolfram ini:
yang ternyata persis sama dengan jawaban Mathematica saya .
sumber
Arang ,
4845 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai array array dan output
-1
jika pemain 1 menang,0
untuk seri, dan1
jika pemain 2 menang. Penjelasan:Ganti setiap tangan dengan hitungan berapa kali nilai
6..1
muncul di tangan. Daftar dibalik karena a) membuatnya lebih mudah untuk menemukan nilai tertinggi dengan jumlah tertinggi dan b) membuatnya lebih mudah untuk menghapus hitungan1
s. Hitungan1
s digandakan karena harus dihapus dua kali, sekali untuk memeriksa bahwa itu bukan nol dan sekali lagi untuk menambahkannya ke jumlah lain.Tambahkan jumlah
1
s ke jumlah untuk6..2
, tetapi set semua jumlah menjadi nol jika jumlah1
s adalah nol.Untuk masing-masing tangan menemukan hitungan tertinggi dan nilai tertinggi dengan penghitungan itu. (Sebenarnya kami menemukan nilai minus
6
karena itu golfier.)Tentukan tangan mana yang dimenangkan dengan mengurangi posisi tangan yang menang dan yang kalah. (Jika tangan terikat maka tangan pertama menang dan kalah sehingga hasilnya
0
seperti yang diinginkan.)sumber
C (gcc) / 32 bit, 117 byte
Cobalah online!
Membawa dua array bilangan nol yang diakhiri. Pengembalian
1
,0
,-1
untukP1 Wins
,P2 Wins
,Tie
.sumber
J ,
4744 byteCobalah online!
Terinspirasi oleh ide Nick Kennedy.
ungolfed
sumber
Perl 5
-MList::Util=max -pl
, 80 byteCobalah online!
Memasukkan:
Setiap pemain di jalur yang terpisah, tanpa spasi
Keluaran:
1
Baris satu menang0
Dasi-1
Baris dua menangsumber