Terkait: Beri nama tangan poker
Straight flush adalah kartu poker yang berisi lima kartu peringkat berurutan, semuanya berjenis sama. Sebagai bagian dari flush lurus, kartu As dapat peringkat di atas seorang raja atau di bawah dua. Ace dapat peringkat tinggi (mis. A ♥ K ♥ Q ♥ J ♥ 10 ♥ adalah siraman lurus ace-high) atau rendah (mis. 5 ♦ 4 ♦ 3 ♦ 2 ♦ A ♦ adalah straight flush lima-tinggi), tetapi tidak dapat peringkat tinggi dan rendah di tangan yang sama (misalnya Q ♣ K ♣ A ♣ 2 ♣ 3 ♣ adalah flush ace-tinggi, bukan flush lurus).
Tantangan
N
Kartu yang diberikan (dalam format apa pun yang masuk akal) menghasilkan nilai yang jujur jika flush lurus ada di tangan poker.
Memasukkan
N
jumlah kartu. (Dalam format apa pun yang masuk akal)
Ada empat setelan; hati, sekop, berlian, dan klub (H, S, D, C)
.
Setiap suit memiliki satu kartu untuk angka 2 hingga 10, ditambah 4 kartu 'gambar', Ace, Jack, Queen, dan King (A, J, Q, K)
Catatan: Anda dapat mengambil 10 sebagai T
Keluaran
Truthy/Falsy
nilai
Kasus cobaan
["AS", "2S", "3S", "4S", "5S"] => true
["3D", "9C", "4S", "KH", "AD", "AC"] => false
["5D", "6D", "7D", "8H", "9D", "10D", "JD"] => false
["JC", "7C", "5D", "8C", "AC", "10C", "9C", "5S"] =>true
[] => false
["AS", "2S", "3S"] => false
["JC", "QC", "KC", "AC", "2C"] => false
[ "2H", "3H", "4H", "5H", "6H", "7H"] => true
Aturan standar kode-golf berlaku.
Kriteria pemenang: Kode terpendek di setiap bahasa
sumber
10
sebagaiT
?Jawaban:
Python 2 , 95 byte
Cobalah online!
Ada 40 kemungkinan straight flushes, dan ini hanya memeriksa semuanya. Chas Brown menyimpan 2 byte; Jo King menyimpan 4 lebih banyak.
sumber
A
pada kedua ujungnya jadi saya percaya berubah36
untuk40
harus memperbaikinya.R ,
128 1269491 byteCobalah online!
Logika asli diperpendek oleh @ J.Doe.
Membuat matriks 26 kali 26 dengan kebanyakan omong kosong tetapi semua kartu (dengan Aces diulang di bagian bawah) terkandung dalam baris 10 hingga 23 kolom 3,4,8 dan 24. Matriks dibuat dengan menggabungkan semua kombinasi huruf besar alfabet dengan huruf J hingga X digantikan oleh A, 2-9, T, J, Q, K, A, S via
chartr
. Kami mendapatkan C, D, H gratis!The
%in%
merata matriks kolom-bijaksana dalam vektor. Kemudian lihat apakah pengkodean run-length lebih besar dari 4 untuk setiapTRUE
pertandingan yang cocok.sumber
rle
ANDouter
! Ini menghemat dua byteouter
panggilan simetris yang menghasilkan banyak kartu yang tidak valid, dan menggunakan paksaan vektorin
untuk menghindariapply
. Mereka berdua harus ada di tempat ini agar bisa bekerja!JavaScript (ES6), 116 byte
Cobalah online!
Bagaimana?
sumber
Brachylog , 31 byte
Cobalah online!
sumber
Retina 0.8.2 , 66 byte
Cobalah online! Penjelasan:
Konversikan kartu gambar menjadi nilainya.
A
bisa 1 atau 14.Konversikan nilainya menjadi unary, dan sufiks agar kartu tersortir dengan benar.
Cocokkan 5 kartu yang bertambah 1 setiap kali, dan pastikan bahwa kenaikan terakhir tepat 1.
sumber
JavaScript (ES6), 106 byte
Menerima susunan representasi string dari kartu, menggantikannya
10
denganT
. Cobalah online!Penjelasan
Ulangi setiap kartu dan atur bendera dalam array boolean menggunakan indeks yang dihitung dari kombinasi unik peringkat dan suitnya. Array ini kemudian diubah untuk memungkinkan pencocokan pola 5 nilai kebenaran berturut-turut.
Misalnya, sebuah tangan dengan flush lurus dapat menghasilkan yang berikut sebagai substring dari representasi string penuh dari array boolean:
,,,,1,1,1,1,1,,,,
Karena nilai peringkat pertama (yaitu A) diimbangi dari awal string, akan selalu ada nilai kosong sebelum semua
1
dalam array, memastikan representasi string akan dimulai dengan,
sumber
Java 10,
189167165164160157156 byteMengambil input sebagai String dengan batasan ruang tunggal (yaitu
"AS 2S 3S 4S 5S"
).-22 byte terima kasih kepada @ OlivierGrégoire .
-1 byte terima kasih kepada @AlexRacer .
Cobalah online.
Versi kode yang telah saya gunakan untuk Project Euler # 54 , yang terutama saya lakukan dengan regex (untuk bersenang-senang dan untuk mempelajari lebih lanjut tentang regex). Tanpa regex mungkin akan lebih baik untuk kinerja dan lebih mudah (mungkin juga berlaku untuk bermain golf jawaban ini; akan kita lihat nanti).
Penjelasan:
Penjelasan regex tambahan:
"AKQJT98765432A".substring(i,i+5)
membutuhkan lima kartu yang berdekatan berdasarkani
.replaceAll(".","(?=.*$0\\\\1)")
mengganti masing-masing kartu dengan"(?=.*c\\1)"
(di manac
karakter kartu).replaceFirst(".1","([HSDC])")
maka akan menggantikan pertama\\1
dengan([HSDC])
.Ie total regex untuk memeriksa Straight Flush untuk kartu dalam rentang nilai
[9,5]
akan menjadi:^(?=.*9([HSDC]))(?=.*8\\1)(?=.*7\\1)(?=.*6\\1)(?=.*5\\1).*$
(CATATAN:
String#matches
secara implisit menambahkan trailing / mengarah^...$
untuk memeriksa seluruh String.) Regex ini akan:sumber
".*"+
awalan yang tidak perlu .f
break
toi=-2
dan kembalireturn-1>i;
menggunakan pendekatan Anda (dan 2 lagi mengubah(.)
to.
dan$1
to$0
). :)Bersih ,
145135 byteCobalah online!
Sederhana:
sumber
Japt , 37 byte
Mengambil input sebagai array 2D.
Cobalah
Penjelasan
sumber
Jelly , 18 byte
Cobalah online!
[..., ...]
Format output: daftar kosong sebagai salah, daftar tidak kosong sebagai kebenaran.
sumber
PHP , 264 byte
Ini bergema
1
jika itu adalah flush lurus dan0
ataunull
jika tidak.Jika Anda memberi nama file
1X
maka Anda dapat menyimpan11 bytes
karena Anda tidak perlu mengubah$argv[0]
. Tidak yakin pada saat mengapa nama file dapat memecahkannya.Untuk beberapa alasan string
:;<=>
diurutkan sebelum string0123456789
olehasort
di TIO meskipun:;<=>
memiliki nilai ASCII 58-62 dan0123456789
memiliki nilai ASCII 48-57. Jadi jika Anda mengambil kode dari tautan TIO atau di bawah ini dan menggunakan PHPTester dengan suite tes berikut ini berfungsi.Kode TIO
Cobalah online!
sumber
Kotlin , 226 byte
Digunakan T untuk 10 sehingga semua kartu memiliki panjang 2 karakter.
Cobalah online!
sumber
Pascal (FPC) ,
223216210209 byteCobalah online!
Penggunaan
T
untuk 10. Input berisi 1 kartu per baris.Sekarang saya bermain golf begitu banyak sehingga saya tidak tahu cara kerjanya lagi ...
Penjelasan:
sumber