Beri nama tangan poker
Diberikan lima kartu, keluaran nama tangan poker, yang akan menjadi salah satu dari:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
Jika ragu, lihat peraturan di http://en.wikipedia.org/wiki/List_of_poker_hands .
Memasukkan
5 kartu dari argumen stdin atau commandline. Kartu adalah string dua huruf pada formulir RS
, di mana R adalah peringkat dan S sesuai. The jajaran yang 2
- 9
(kartu angka), T
(sepuluh), J
(Jack), Q
(Queen), K
(Raja), A
(Ace). The jas yang S
, D
, H
, C
untuk sekop, berlian, hati dan klub masing-masing.
Contoh kartu
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Contoh input => output yang diinginkan
3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house
Aturan
Kode terpendek menang
Edit
Tampak hebat sejauh ini! Saya benar-benar tidak dapat memverifikasi semua jawaban, karena saya tidak tahu bahasa-bahasa ini dengan sangat baik dan tidak memiliki kompiler / juru bahasa untuk semuanya, tetapi saya curiga tidak semua orang berpikir bahwa Aces bisa menjadi yang tertinggi dan juga baik. kartu terendah dari Straight (flush) .
Jawaban:
GolfScript (
209 208 207 206 200 199 197196 karakter)Saya mengeksploitasi kebebasan yang ditawarkan untuk mengubah huruf kapital: Straight Flush saya dan Royal Flush keduanya memanfaatkan Flush untuk menggunakan kembali kata dari flush yang sederhana.
Catatan: beberapa versi sebelumnya buggy: mereka hanya mendukung full house saat pasangan itu nilainya lebih rendah dari pasangan royal. Mereka dapat diperbaiki dengan mengganti ruang yang memisahkan
- 0
dengan a$
.Demo
sumber
.&
untuk menemukan karakter yang berbeda dalam sebuah string adalah trik yang sangat berguna.Datang dengan jawaban saya sendiri :)
Python -
312301298Membuat daftar 2x2 di mana indeks dari dua dimensi adalah boolean untuk memeriksa flush dan straight. Dalam hal keduanya, kami memeriksa apakah itu flush royal atau hanya straight flush. Untuk tidak flush dan tidak lurus, kami memeriksa tangan yang lain:
m
dann
memegang kartu dengan peringkat yang sama tertinggi dan kedua; nama-nama tangan disimpan dalam daftar dengan indeks sesuai denganm
. Sub-cek dalam nilai daftar ini dilakukan dengann
memisahkan satu pasangan dari dua pasangan, dan tiga sejenis dari rumah.Sunting: Terima kasih Nolen Royality untuk total 20 karakter yang disimpan!
sumber
m,n=g([c.count(x)for x in set(r)])
kem,n=g(map(c.count,set(r)))
?Ruby 1.9 (
427359348338296292)EDIT : Tetap bekerja dengan ace rendah.
Ide dasarnya adalah untuk membangun susunan jumlah kartu di setiap peringkat, menggabungkan angka menjadi string, dan kemudian menjalankan ekspresi reguler untuk melihat bentuk tangan mana yang cocok. Kami menghitung jumlah pakaian yang berbeda untuk menentukan apakah akan mengeceknya terhadap flushes yang berbeda (flush, straight flush, royal flush) atau ke bentuk lain (semuanya).
Mengambil kartu sebagai argumen baris perintah yang terpisah, seperti:
sumber
C, 454 karakter
Jalankan dari baris perintah dengan kartu sebagai argumen, misalnya ./a.out 8C 3H 8S 8H 3S
Versi diperluas, dengan komentar:
Suntingan:
sumber
Mathematica , 365
Ini jawaban saya atas jawaban David Carraher.
Ditampilkan dengan ruang putih untuk keterbacaan tertentu.
Versi satu baris:
sumber
_
bukannya{_,_,_,_}
K,
294295.
sunting: Menambahkan 1 karakter untuk lurus rendah Ace
sumber
Python
334,326322 KarakterSaya tahu bahwa liner terakhir semakin tidak dapat dibaca, saya akan membuat versi non-golf ketika saya senang dengan solusi saya.
sumber
GolfScript,
258250 karakterProgram mengharapkan input pada STDIN seperti yang diberikan di atas dan output ke STDOUT. Anda dapat menguji kode sendiri .
Sunting: Saran w0lf yang dimasukkan.
sumber
" of a kind"
variabel, karena itu digunakan dua kali."Straight"
AH KH 2C 3H 4H
dianggap sebagai kartu Straight, tetapi harus High.Mathematica -
500494465 karakterSolusi ini didasarkan pada demonstrasi poker oleh Ed Pegg, Jr. Dalam versi ini, kartu diperlakukan secara internal sebagai angka dalam
Range[2,14]
Input sampel, output:
Catatan:
f: siram
c: kartu (tanpa pakaian)
s: lurus
t: {kartu, suite}
d:
sumber
JH 4C 2C JD TH
?