Tantangan:
Diberi dua kartu lima tangan, tentukan yang satu menang dengan peringkat standar tangan poker .
Memasukkan:
Sepuluh kartu dipisahkan oleh spasi dari stdin atau sebagai argumen baris perintah, mana yang Anda inginkan. Lima kartu pertama adalah kartu Player 1 sedangkan kartu terakhir adalah kartu Player 2. Setiap kartu akan berupa string dua huruf dari bentuk RS di mana R adalah peringkat dan S sesuai. Jajarannya berkisar 2-9, T untuk sepuluh, dan J, Q, K, dan A untuk Jack, Queen, King, dan Ace. Setelannya masing-masing adalah H, D, C, S untuk Hati, Berlian, Klub, dan Sekop. Anda harus menampilkan jumlah pemain yang menang: '1' atau '2'.
Contoh Kartu:
AS - the Ace of Spades
QD - the Queen of Diamonds
2C - the Two of Clubs
TH - the Ten of Hearts
Contoh Input ke Output:
5H 5C 6S 7S KD 2C 3S 8S 8D TD -> 2
Penjelasan: Player 1 memiliki Pair of Fives sementara Player 2 memiliki Pair of Eights.
5D 8C 9S JS AC 2C 5C 7D 8S QH -> 1
Penjelasan: Tidak ada Player yang memiliki sesuatu yang istimewa, tetapi kartu tinggi Player 1 adalah Ace sedangkan kartu tinggi Player 2 adalah Queen.
2D 9C AS AH AC 3D 6D 7D TD QD -> 2
Penjelasan: Player 1 memiliki Three Aces, Player 2 memiliki Flush of Diamonds.
4D 6S 9H QH QC 3D 6D 7H QD QS -> 1
Penjelasan: Kedua pemain memiliki Pair of Queens, tetapi kartu tertinggi kedua Player 1 adalah Sembilan sedangkan Player 2 adalah Tujuh.
Aturan dan Klarifikasi:
- Lihat peringkat standar tangan poker untuk rincian membandingkan tangan.
- Anda dapat mengasumsikan bahwa tidak ada kartu berulang di setiap pasang tangan.
- Anda dapat berasumsi bahwa ada pemenang yang pasti dalam setiap kasus.
- Gugatan tidak menjadi faktor dalam peringkat tangan. Misalnya, dua flush royal dari suit yang berbeda sama (oleh karena itu setiap input di mana kedua pemain memiliki flush royal tidak valid oleh aturan sebelumnya).
- Karena ini adalah kode golf, jawaban terpendek menang.
Catatan:
- Terkait dengan pertanyaan ini dan ini satu ini .
- Berdasarkan Masalah Project Euler 54
Jawaban:
Haskell -
352339 karakterBerjalan:
Tidak dikomentari dan dikomentari, sehingga Anda dapat melihat techinque:
sumber
Python -
774722707698685 karakterSaya memilih untuk membuat string untuk masing-masing tangan yang mewakilinya, dimulai dengan karakter untuk jenis tangan, diikuti oleh karakter yang menggambarkan variasi jenis tertentu (misalnya, kartu apa yang baru Anda miliki 4?), Diikuti oleh nilai kartu yang tersisa dalam kasus seri (jika kedua pemain memiliki pasangan ganda yang sama, kartu ke-5 harus memutuskan siapa yang menang). Saya sudah mengujinya secara ekstensif, tetapi saya tidak benar-benar bermain poker, jadi saya harap saya bisa melakukannya dengan benar. Juga, saya tahu itu belum sepenuhnya golf, saya mungkin bisa mencukur beberapa lusin karakter di kemudian hari.
sumber
_=lambda c:chr(97+c)
. Juga, Anda memiliki spasi putih yang tidak perlu setelah:
s dan=
s. Akhirnya, gunakan;
bukan baris baru untuk memisahkan pernyataan untuk mengurangi spasi putih yang digunakan untuk indentasi.JavaScript -
526508pemakaian:
ungolfed:
sumber
sumber
perl,
801733 karakterSaya percaya ini adalah implementasi yang sangat mudah. Pada dasarnya, untuk masing-masing tangan, kami menyortir jas dan wajah secara terpisah. Kemudian kita membuat salinan lain dari wajah-wajah dengan ace menghitung rendah sehingga kita dapat memeriksa lurus dengan ace rendah. Kemudian kita menentukan apakah kita memiliki flush atau lurus, dan apa kartu tinggi itu. Kemudian kami hanya memeriksa pertandingan dalam urutan skor (pertama kami memeriksa straight flushes, kemudian empat dari jenis, dll.). Skor aktual hanyalah gabungan dari jenis tangan yang diikuti oleh nilai nominal kartu sesuai urutannya (itu _s () dalam versi yang tidak dikoleksi, u () dalam versi golf). Ini dia:
Dan inilah yang kurang setara golf:
sumber
AH 2C 3S 4S 5D 6C 7S 7C 7D TD
menghasilkan hasil2
, tapi saya pikir lurus mengalahkan tiga sejenis