Tulis kode untuk menentukan siapa yang memenangkan trik empat kartu dalam permainan Spades . Bytes paling sedikit menang.
Input adalah string yang berisi daftar empat kartu yang dimainkan secara berurutan seperti TH QC JH 2H
(Sepuluh Hati, Ratu Klub, Jack Hati, Dua Hati). Kartu diberikan oleh dua karakter: setelan dari CDHS
dan nilai dari 23456789TJQKA
. Anda dijamin bahwa inputnya valid dan kartunya berbeda.
Anda harus menampilkan angka 1, 2, 3, atau 4 untuk pemenang trik. Dalam contoh TH QC JH 2H
, jack of heart memenangkan trik, jadi Anda harus menampilkan 3.
Input dan output Anda harus persis seperti yang dijelaskan, kecuali mengikuti baris baru adalah opsional.
Berikut adalah aturan Sekop untuk memenangkan tipuan. Kartu yang menang adalah kartu tertinggi dari empat, dengan beberapa peringatan. Sekop adalah setelan truf , jadi setiap sekop mengalahkan yang bukan sekop. Suit kartu pertama yang dimainkan adalah suit utama , dan hanya kartu dari suit atau sekop yang memenuhi syarat untuk memenangkan trik. Kartu dengan jenis yang sama dibandingkan dengan nilainya, yang diberikan dalam urutan yang meningkat seperti 23456789TJQKA
.
Kasus uji:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
sumber
.e
barang itu sepadan - menggunakano
1 karakter lebih pendek seperti yang saya pikirkan..e
solusi 28. Tetapi solusi 27 berakhir dengan a)
dan karena itu juga memiliki 28 byte. : oops:+@z1"KTA"
ke"KTAZ"
, tetapi alih-alih menggunakan string secara langsung digunakanJ"KTAZ"
di awal dan+@z1J
keJ
.X
opsional (Hanya jika a dan b adalah string). Tapi saya tidak begitu yakin, jikaXab)
harus mengevaluasi keXab_b
(terbalik b, akan lebih baik untuk hal-hal sepertiXa"</\>"
) atauXab+tbhb
(b bergeser). Apa preferensi Anda?CJam,
3433 byteAlgoritma
Logikanya sederhana. Saya memiliki jenis kustom yang terjadi, di mana saya pertama kali memberikan prioritas pada karakter kedua yang mewakili setelan. Dalam hal ini, Spades mendapat prioritas tertinggi dan kemudian suite yang pertama kali dilempar. Sisanya semua
-1
. Kemudian saya mengurutkan karakter pertama dengan bertukarT
denganA
danQ
denganK
untuk memiliki penyortiran leksikal.Penjelasan kode
Pertama, mari kita lihat apa urutan leksikal dari nilai wajah kartu:
Jadi, semua angka berada pada posisi yang benar.
J
juga pada posisi yang benar. Kita perlu bertukarK
danQ
danJ
danA
untuk mendapatkan pesanan leksikal.Cobalah online di sini
sumber
JavaScript (ES6), 112
Pindai daftar dan kembalikan posisi nilai tertinggi yang ditemukan.
Jalankan cuplikan untuk menguji (di Firefox)
sumber
Perl, 73 byte
Coba saya .
Mengonversi nama kartu sehingga urutan nilai permainan mengikuti urutan alfabet, lalu memilih yang tertinggi dengan mengurutkan dan mencarinya di string asli untuk posisi.
sumber
Ruby, 59 + 2 = 61
Dengan bendera baris perintah
na
, jalankansumber
J, 47 byte
Pemakaian:
Metode:
'S[second char of input]AKQJT9876543'
string. Karakter yang tidak ditemukan mendapatkan nilailast position + 1
secara implisit. Karakter selanjutnya memiliki nilai yang jauh lebih kecil (value=(16-position)!
).TH_
QC_
9S_
dan8S
).(J sayangnya tidak dapat membandingkan karakter atau string secara langsung. Ini hanya dapat memeriksa kesetaraan mereka yang mengesampingkan beberapa pendekatan lain untuk tantangan ini.)
Cobalah online di sini.
sumber
C #, 237
Cara kerjanya: Iterasi masing-masing tangan untuk menghitung "nilai" kartu .. simpan indeks bernilai tertinggi. Nilai kartu ditentukan sebagai pangkat kartu dikalikan dengan 0 jika bukan sekop atau suit pembuka, 1 jika itu adalah suit pembuka dan 9 jika itu adalah sekop tetapi bukan suit pembuka. (9 dipilih b / c 2 * 9 = 18> A = 14 & 9 adalah char tunggal)
sumber
Pyth,
3633 bytePendekatan yang cukup mudah, menggunakan penyortiran dengan fungsi tombol khusus, lalu menemukan indeks dengan nilai tertinggi.
sumber
e
) Anda bisa mendapatkan elemen terakhir, jadi menemukan nilai tertinggi hanya mengurutkan diikuti dengan mendapatkan elemen terakhir.Pyth, 31 byte
Coba di sini.
Bagaimana itu bekerja:
Cara yang tepat untuk membaca prosedur ini adalah kembali ke depan. Prosedur mengurutkan kartu yang diinginkan ke akhir daftar, lalu menariknya keluar dan menemukan indeksnya dalam daftar asli.
cz
: Ini menghasilkan daftar string kartu.c
, chop, biasanya merupakan fungsi biner (arity 2), tetapi ketika dipanggil hanya dengan satu input, berfungsi sebagai.split()
metode string.S
: Ini berlaku perilaku penyortiran normal, yang mengurutkan kartu bernomor lebih rendah sebelum yang lebih tinggi.ox"TJQKA"hN
: Ini memerintahkan kartu berdasarkan indeks (x
) dalam string"TJQKA"
huruf pertama kartu (hN
). Untuk kartu dengan angka, huruf pertama tidak ditemukan, memberikan hasilnya-1
. Karena fungsi sortir Pyth stabil, urutan kartu bernomor tidak terpengaruh.o}@z1Z
: Selanjutnya kita memesan apakah setelan kartu pertama dimainkan (@z1
) ada dalam kartu yang dimaksud. SejakTrue
memilah di belakangFalse
, ini mengirimkan kartu dari setelan utama ke belakang.o}\SN
: Ini sama dengan jenis sebelumnya, tetapi mengurutkan apakah surat ituS
ada di kartu, mengirim sekop ke belakang.hxczde
: Ini mengekstraksi kartu terakhir yang diurutkan dengan cara ini (e
), menemukan indeksnya dalam daftar kartu (xczd
) dan kenaikannya sebesar 1 (h
), memberikan lokasi pemain yang diinginkan.sumber