Penafian: ModTen adalah permainan kartu fiksi yang dibuat untuk tujuan tunggal tantangan ini.
Aturan ModTen
ModTen dimainkan dengan dek 52 kartu standar. Karena aturan lengkap belum ditemukan, kita akan fokus pada peringkat tangan secara eksklusif.
Kemenangan di ModTen. Grafik dari Wikipedia .
Nilai kartu
Kartu memiliki nilai-nilai berikut:
- 2 hingga 9 : layak nilai nominalnya
- Sepuluh : 0 poin
- Jack : 3 poin
- Ratu atau Raja : 8 poin
- As : 9 poin
Nilai tangan
Kartu ModTen dibuat dari dua kartu . Nilai dasar tangan diperoleh dengan mengalikan nilai kedua kartu bersama-sama dan menjaga digit terakhir saja (yaitu menerapkan modulo 10).
Satu-satunya aturan lain di ModTen adalah kartu yang cocok bernilai lebih dari yang tidak cocok. Dengan konvensi, kita akan menambahkan "s" ke nilai jika kedua kartu memiliki jenis yang sama.
Misalnya, nilai 9 ♠ - 5 ♠ akan dicatat sebagai " ", karena dan kartunya cocok.
Peringkat tangan dan pemenang
Aturan di atas menghasilkan 18 peringkat tangan yang berbeda yang dirangkum dalam tabel berikut, dari yang terkuat hingga terendah (atau terlangka hingga paling umum). Probabilitas diberikan hanya untuk informasi.
Diberi dua tangan, tangan dengan pangkat terendah menang. Jika kedua tangan memiliki peringkat yang sama, maka itu seri (tidak ada tie breaker).
hand rank | hand value(s) | deal probability
-----------+---------------+------------------
1 | 9s | 0.30%
2 | 3s | 0.60%
3 | 1s | 0.90%
4 | 7s | 1.21%
5 | 5s | 1.51%
6 | 3 | 1.81%
7 | 9 | 2.26%
8 | 8s | 2.71%
9 | 6s | 3.02%
10 | 1 or 7 | 3.62% each
11 | 2s or 4s | 3.92% each
12 | 5 | 4.98%
13 | 0s | 5.43%
14 | 8 | 8.14%
15 | 6 | 9.95%
16 | 2 | 11.76%
17 | 4 | 13.57%
18 | 0 | 16.74%
Tantangan
Diberi dua tangan ModTen , hasilkan satu dari tiga nilai konsisten pilihan Anda untuk mengetahui apakah:
- pemain pertama menang
- pemain kedua menang
- ini seri
Aturan berikut ini berlaku:
- Kartu harus dijelaskan oleh peringkatnya dalam huruf (
2
,3
, ...,9
,T
,J
,Q
,K
atauA
) diikuti dengan suit dalam huruf kecil (c
,d
,h
ataus
, untuk klub, berlian, hati dan sekop). - Anda dapat menggunakan
"10"
alih-alih"T"
tetapi pengganti lainnya dilarang. Selama aturan di atas diikuti, Anda dapat mengambil tangan dalam format yang masuk akal dan tidak ambigu. Anda diizinkan untuk mengambil peringkat dan setelan sebagai dua karakter berbeda daripada satu string.
Beberapa format input yang valid adalah:
"7c Qh 8s Ks"
[["7c","Qh"], ["8s","Ks"]]
[[['7','c'], ['Q','h']], [['8','s'], ['K','s']]]
- dll.
Alih-alih menggunakan 3 nilai berbeda yang konsisten, output Anda mungkin juga negatif , positif atau nol . Silakan tentukan format output yang digunakan dalam jawaban Anda.
- Ini adalah kode-golf .
Uji kasus
Pemain 1 menang
["Js","3s"], ["Ks","Kh"]
["7h","9h"], ["9s","7c"]
["Ah","5s"], ["Ts","8s"]
["Ts","8s"], ["Jh","2s"]
["4h","8s"], ["Qh","Ks"]
Pemain 2 menang
["Th","8d"], ["6s","Kd"]
["Jc","5c"], ["3s","9s"]
["Jc","Jd"], ["9h","Ah"]
["2d","4d"], ["3h","3s"]
["5c","4c"], ["3c","2c"]
Seri
["Js","3s"], ["3d","Jd"]
["Ah","Ac"], ["3d","9s"]
["Qc","Kc"], ["6d","4d"]
["2d","3d"], ["3s","2s"]
["Ts","9c"], ["4h","5d"]
sumber
{{J, s}, {3, s}}
apa-apa?Jawaban:
Python 3 ,
114110 byteCobalah online!
@Arnauld mengusulkan ide untuk menggabungkan nilai kartu dan string tabel peringkat. Setelah beberapa upaya saya berhasil membuat string yang digabungkan
R="T 2J45UNK9RL<3SLM;QAK:O>=/678"
, yang memiliki panjang yang sama dengan string nilai kartu asli. SubstringR[6:25]="UNK9RL<3SLM;QAK:O>=/"
berfungsi sebagai meja peringkat serta nilai kartu tabel untuk3
,9
,A
,K
, danQ
. Decoding nilai ASCII dari tabel peringkat baru memiliki efek peringkat yang sama dengan tabel peringkat sebelumnya.Menggunakan string byte sebagai input menghemat 4 byte.
Menggunakan
cmp
dalam Python 2 dapat mengurangi solusi hingga 102 byte, seperti yang ditunjukkan oleh solusi @ xnor .Python 3 ,
165142130129 byteCobalah online!
-23 byte terima kasih kepada @Jonathan Allan
-2 byte terima kasih kepada @ovs
-1 byte terima kasih kepada @mypetlion
Tidak Disatukan:
Fungsi ini
f
mengambil dua argumen yang mewakili tangan pemain 1 dan pemain 2. Ia mengembalikan nilai positif, negatif, atau nol dalam kasus kemenangan pemain 1, kemenangan pemain 2, atau hasil seri. Setiap tangan dikodekan sebagai string tunggal, misalnya "7cQh".sumber
"HC92FA51GAB4E893D760"[s==t::2]
cmp
tidak tersedia dalam Python 3)str.find
alih-alihstr.index
menyimpan satu byte. Satu-satunya perbedaan perilaku antara kedua metode adalah yangindex
melempar kesalahan ketika elemen tidak ditemukan, sementarafind
kembali-1
. Jadi itu tidak akan menjadi masalah untuk kode Anda.x86-16 Majelis,
8783 byteBiner:
Belum dirakit:
Input adalah sebagai string seperti
Js3sKsKh
, pada pointer diSI
. Output adalahZF = 0 and SF = OF
(uji denganJG
) jika pemain 1 menang,SF ≠ OF
(uji denganJL
) jika pemain 2 menang atauZF
(uji denganJE
) jika seri.Output menggunakan program uji DOS:
Unduh dan uji MODTEN.COM untuk DOS.
sumber
05AB1E ,
4137 byte-4 byte terima kasih kepada @Grimy .
Input sebagai daftar daftar karakter, seperti contoh format input ketiga dalam deskripsi tantangan. Yaitu P1
7c Qh
& P28s Ks
akan menjadi input sebagai[[["7","c"],["Q","h"]],[["8","s"],["K","s"]]]
. (Dan kegunaan"10"
untuk10
.)Menghasilkan bilangan bulat negatif jika pemain 1 menang; bilangan bulat positif jika pemain 2 menang; atau 0 jika itu seri.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Bagaimana cara menggunakan kamus? Cara kompres bilangan bulat besar? Dan Cara daftar bilangan bulat kompres? ) Untuk memahami mengapa
•V›{₆Ÿ&∊WÍj¸•
adalah36742512464916394906012008
,•V›{₆Ÿ&∊WÍj¸•19в
adalah[18,10,16,6,17,12,15,10,14,7,13,3,11,2,11,5,9,4,8,1]
,‘ߌQ‘
adalah"JAKEQ"
, danŽćS
ini39808
.sumber
T
sebagai10
, jadi Anda bisa langsung saja dropT
dariJTQKA
(dan menggunakan integer 3889 bukannya 30889). Juga,T* ... +
bisa... «
.10
T
T*...+
...«
PHP ,
212185178149 byteCobalah online!
Input melalui baris perintah. Output ke
STDOUT
adalah negatif jika pemain 1 menang, positif jika pemain 2 menang,0
jika dasi. Contoh:sumber
-1
,1
atau0
.Jelly , 46 byte
Cobalah online!
Sebuah program penuh mengambil sebagai argumennya misalnya
["7h","Ks"],["4s","Ts"]
dan mencetak nol jika kedua pemain menggambar, positif jika pemain 1 menang dan negatif jika pemain 2 menang.sumber
C (gcc) ,
172167165164 byteCobalah online!
2 byte dicukur berkat @ceilingcat!
Pada dasarnya port dari solusi Python3 @ Joel, tetapi tanpa pengkodean base18. Mengharapkan input sebagai satu string dengan spasi yang memisahkan tangan kedua pemain, dan menghasilkan bilangan bulat yang positif, negatif atau nol untuk menunjukkan pemain 1 menang, pemain 2 menang atau jika itu seri.
sumber
Perl 6 ,
1011009488 byte-1 byte terima kasih kepada Jo King
Cobalah online!
Mengambil input sebagai
f(((<J ♠>, <3 ♠>), (<10 ♠>, <K ♥>)))
gunakan10
untuk Sepuluh. Mengembalikan nilai <0 jika pemain 1 menang,> 0 jika pemain 2 menang, 0 jika itu seri.Penjelasan
sumber
Arang , 97 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai dua string 4 karakter, misalnya
QcKc
6d4d
dan mengeluarkan integer yang ditandatangani. Penjelasan:String yang dikompresi
2345678903889
mewakili nilai kartu.Simpulkan setiap kemungkinan pasangan nilai.
Lingkari setiap setelan kartu kedua yang mungkin. Tanpa kehilangan keumuman, kita dapat mengasumsikan bahwa kartu pertama memiliki setelan 3, sehingga setelan kartu kedua dapat berkisar dari 0 hingga 3 kecuali nilainya sama sehingga hanya berkisar dari 0 hingga 2.
Hitung skor tangan yang dimodifikasi, yang merupakan nilai tangan dua kali lipat, ditambah 1 jika suitnya sama (yaitu kartu kedua memiliki suit 3).
String terkompresi
23456789TJQKA
mewakili karakter kartu. Kartu input dilihat dalam string ini dan kemudian posisi digunakan untuk mengindeks ke dalam string pertama untuk mendapatkan nilai kartu.Inisialisasi hasilnya ke 0.
Lingkarkan kedua tangan.
Hitung skor tangan yang dimodifikasi, dan dengan demikian frekuensinya, dan kurangi hasilnya dari ini.
Keluarkan perbedaan frekuensi.
sumber
C # (Visual C # Interactive Compiler) , 139 byte
Cobalah online!
sumber
Perl 5
-p
, 107 byteCobalah online!
Memasukkan:
(Sebenarnya, koma dapat berupa karakter apa saja.)
Keluaran:
sumber