Kartu apa itu?

30

pengantar

Dahulu kala, ketika saya biasa memberi kode permainan kartu dengan kartu permainan yang biasa, saya biasa menentukan nomor untuk setiap kartu dan memanggil fungsi dengan beberapa nomor untuk mendapatkan kartu. Ini agak menginspirasi saya untuk membuat tantangan ini.

Jadi bagi orang-orang yang tidak mengetahui kartu bermain, setumpuk kartu terdiri dari 52 kartu (13 di masing-masing empat suit, yaitu, Hearts, Diamonds, Spades, Clubs). Di setiap suit, ada 13 kartu - pertama kartu bernomor 2-10, kemudian Jack (J), Queen (Q), King (K) dan Ace (A). Ini perintahnya

Tantangan

Tantangannya adalah mengambil integer antara 1-52 sebagai input dan menampilkan kartu pada posisi itu. Tapi, hasil Anda harus dalam kata-kata. Juga, pesanan harus dipertahankan, yaitu, 13 kartu pertama akan dari Hearts, kemudian Diamonds, kemudian Spades dan akhirnya Clubs.

Misalnya, jika seseorang memilih nomor tersebut 30. Kartu tersebut kemudian akan menjadi milik jas ketiga, yaitu Sekop. Juga, itu akan menjadi kartu keempat dalam gugatan itu, yang berarti angka 5. Oleh karena itu output Anda dalam kata-kata harus: five of spadesdan itu harus selalu mengikuti format ini , yaitu, pertama kartu, diikuti oleh ofdan nama gugatan pada akhirnya, dengan ruang yang dibutuhkan di antaranya.

Masukan dan keluaran

Input akan berupa bilangan bulat antara 1-52 (termasuk keduanya). Perhatikan bahwa penghitungan di sini dimulai dari 1. Anda dapat memilih mulai dari 0 . Namun, Anda harus menjaga urutan kartu yang disebutkan di atas. Keluaran Anda harus berupa kartu pada posisi itu yang ditulis dengan kata-kata. Anda tidak perlu menangani input yang tidak valid. Juga, output Anda mungkin dalam huruf kecil atau huruf besar.

Diberikan di bawah ini adalah daftar semua input yang mungkin dan outputnya:

1 -> two of hearts
2 -> three of hearts
3 -> four of hearts
4 -> five of hearts
5 -> six of hearts
6 -> seven of hearts
7 -> eight of hearts
8 -> nine of hearts
9 -> ten of hearts
10 -> jack of hearts
11 -> queen of hearts
12 -> king of hearts
13 -> ace of hearts
14 -> two of diamonds
15 -> three of diamonds
16 -> four of diamonds
17 -> five of diamonds
18 -> six of diamonds
19 -> seven of diamonds
20 -> eight of diamonds
21 -> nine of diamonds
22 -> ten of diamonds
23 -> jack of diamonds
24 -> queen of diamonds
25 -> king of diamonds
26 -> ace of diamonds
27 -> two of spades
28 -> three of spades
29 -> four of spades
30 -> five of spades
31 -> six of spades
32 -> seven of spades
33 -> eight of spades
34 -> nine of spades
35 -> ten of spades
36 -> jack of spades
37 -> queen of spades
38 -> king of spades
39 -> ace of spades
40 -> two of clubs
41 -> three of clubs
42 -> four of clubs
43 -> five of clubs
44 -> six of clubs
45 -> seven of clubs
46 -> eight of clubs
47 -> nine of clubs
48 -> ten of clubs
49 -> jack of clubs
50 -> queen of clubs
51 -> king of clubs
52 -> ace of clubs

Mencetak gol

Ini , jadi kode terpendek menang.

Manish Kundu
sumber
1
Bukankah urutan setelan jas biasanya hati, spasi, berlian, pentung (merah, hitam, merah, hitam). Bukannya itu penting untuk tantangan, hanya bertanya-tanya mengapa itu dalam urutan ini.
Kevin Cruijssen
3
Ini bervariasi dari game ke game. Game yang berbeda mengikuti pesanan yang berbeda. Juga berbicara tentang kartu, beberapa permainan bahkan memiliki kartu as sebagai kartu terendah dalam suit.
Manish Kundu
Bisakah saya menampilkan two\s\s\sof\sheartstempat \ssingkatan dari spasi? (Perhatikan dua ruang ekstra.)
totallyhuman
2
@tallyallyhuman maaf tapi harus ada tepat 1 ruang di antaranya
Manish Kundu

Jawaban:

31

Python 3 ,  115  90 byte

from unicodedata import*
lambda n:name(chr(n%13+n%13//11+[6,0,4,2][-n//13]*8+127137))[13:]

Fungsi yang tidak disebutkan namanya mengembalikan string dalam huruf besar.

Cobalah online!

Bagaimana?

Karakter Unicode memiliki nama. Nama-nama beberapa di antaranya seperti "KARTU PEMAIN DUA KEDUA", maka kita bisa mendapatkan karakter karakter Unicode yang mewakili kartu yang diperlukan dan menanggalkan 13 karakter pertama untuk mendapatkan output kami.

Karakter Unicode yang menarik ada di dalam blok seperti ini:

            0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
U+1F0Ax     x   As  2s  3s  4s  5s  6s  7s  8s  9s  Ts  Js  x   Qs  Ks  x
U+1F0Bx     x   Ah  2h  3h  4h  5h  6h  7h  8h  9h  Th  Jh  x   Qh  Kh  x
U+1F0Cx     x   Ad  2d  3d  4d  5d  6d  7d  8d  9d  Td  Jd  x   Qd  Kd  x
U+1F0Dx     x   Ac  2c  3c  4c  5c  6c  7c  8c  9c  Tc  Jc  x   Qc  Kc  x                           

Di mana xbukan karakter yang kita cari (empat di Ckolom adalah "ksatria"; tiga di Fadalah "pelawak"; satu di 0adalah generik; sisanya adalah karakter cadangan).

Dengan demikian kita dapat menambahkan beberapa nilai ke 0x1F0A1 = 127137 (As) untuk menemukan kartu yang kita inginkan.

Nilai untuk ditambahkan hanya rumit oleh tiga hal:

  1. Kita perlu menyusun ulang jas (dari s, h, d, c ke h, d, s, c)
  2. Kita perlu menyusun ulang peringkat dari (A, 2, ..., K ke 2, ..., K, A)
  3. Kita perlu menghindari kolom tanpa kartu yang menarik.

Menggunakan opsi satu-pengindeksan memungkinkan penggunaan divisi integer negatif untuk mengindeks ke dalam array of-line offset untuk setelan ulang pemesanan dengan [6,0,4,2][-n//13]*8+(secara efektif [48,0,32,16][-n//13]), kita kemudian dapat juga menempatkan kartu As ke lokasi yang benar dengan n%13+dan kemudian menghindari ksatria di kolom Cdengan n%13//11+(efektif (n%13>10)+).

Jonathan Allan
sumber
Tepat ketika saya memulai jawaban seperti ini (saya yakin jawaban saya akan lebih lama), saya melirik dan melihat jawaban Anda. Bagus
mbomb007
... dan byte lain ada di sana untuk bermain golf :)
Jonathan Allan
13

Perl6 / Rakudo 70 byte

Indeks 0

Menggunakan perl6 -pe, dan tanpa kompresi kamus:

chr('🂱🃁🂡🃑'.ords[$_/13]+($_+1)%13*1.091).uniname.substr(13)

Itu hanya mencari kartu di Unicode (mulai dari Ace), menanyakan nama dan menggunakannya. Ini adalah rute yang mirip (meskipun saya tidak tahu saat itu!) Untuk jawaban Python Jonathan Aitken - hanya saya indeks dari semua 4 ace daripada 4 offset dari Ace of Spades, dan saya kalikan dengan 1,091 untuk membuat indeks putaran dari entri Knight di Unicode.

Lihat semua output (untuk nilai input 0 hingga 51) https://glot.io/snippets/ez5v2gkx83

Diedit untuk mengatasi Knights di dek Unicode, karena Unicode.

Perl6 ♥ Unicode

Phil H
sumber
@ JonathanAllan: Ini menetapkan urutan menggunakan 4 kartu dasar (mereka berada dalam urutan yang diperlukan), tetapi terlihat dengan baik pada Ksatria - Saya tidak memperhatikan itu. Diperbaiki dengan biaya beberapa karakter lagi.
Phil H
@ JonathanAllan: Ada beberapa kesalahan dalam penghitungan jawaban lain - semua orang mengatakan 'byte' ketika artinya chars. Yang dengan kompresi adalah pelanggar yang paling mengerikan.
Phil H
3
Saya pikir Anda akan menemukan bahwa orang-orang dengan string kompresi berisi apa yang disajikan sebagai Unicode sebenarnya memiliki halaman kode mereka sendiri (ini tentu berlaku untuk Jelly, Husk, Charcoal & 05AB1E).
Jonathan Allan
Terima kasih, saya tidak menghargai itu sama sekali.
Phil H
@ PhilH Jika Anda ragu jumlah byte sudah benar, Anda dapat meminta mereka untuk memberikan hexdump.
user202729
9

05AB1E , 54 byte

Diindeks 0

“»€Å‹¡Šdesž…“#“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí" of "ýsè

Cobalah online!

Penjelasan

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input
Emigna
sumber
@PhilH 05AB1E menggunakan codepage , seperti halnya sebagian besar jawaban dalam bahasa golf di PPCG
dzaima
Permintaan maaf, tidak menyadari ini sangat umum.
Phil H
@ PhilHH eh, banyak yang melakukan hal yang persis sama dengan berpikir bahwa unicode yang ditampilkan sebenarnya adalah skor pengiriman. Namun saya ingin jika itu adalah standar di sini untuk selalu hyperlink codepage dalam judul (seperti pada jawaban SOGL saya)
dzaima
@zaza: Saya melakukan itu untuk sementara waktu, tetapi saya masih punya komentar jadi saya berhenti. Tapi saya setuju, alangkah baiknya jika itu dimasukkan dalam template TIO.
Emigna
LOL, saya tidak melihat jawaban ini ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 Bytes juga!
Magic Octopus Urn
6

Python 2 , 167 148 byte

n=input();print 'two three four five six seven eight nine ten jack queen king ace'.split()[n%13]+' of '+['hearts','diamonds','spades','clubs'][n/13]

Diindeks nol.

Cobalah secara Online!

EDIT: Bubbler membuat poin bagus menggunakan metode split (dan memberikan jawaban yang lebih pendek). Pada blok kedua menggunakan split () menghasilkan jumlah byte yang sama.

PHC
sumber
Selamat datang! Secara default kiriman harus menangani input dan output; lihat ringkasan aturan Python .
xnor
Mengerti, terima kasih untuk menunjukkan!
PHC
1
141 byte dengan lambda dan split. Mencoba interleaving untuk [n%13::13]atau sesuatu, tetapi tidak berhasil.
Bubbler
Terima kasih telah membuat saya menyadari bahwa perpecahan akan menghemat beberapa byte. Byte lain hilang dengan pembagian integer default Python2.
PHC
4
140 byte menggunakan notasi persen untuk faktor s; xnor menunjukkannya dalam obrolan.
Bubbler
6

R , 154 byte

paste(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),"of",rep(c("Hearts","Diamonds","Spades","Clubs"),e=13))[scan()]

Cobalah online!

Mengambil input (1-diindeks) dari STDIN dan dengan source(...,echo=T)akan mencetak hasilnya ke konsol.

Itu tidak cantik, TETAPI datang dalam 2 byte lebih pendek dari solusi terbaik yang saya bisa gunakan outer(disajikan di bawah), jadi biarkan ini menjadi pengingat untuk memeriksa pendekatan lain!

paste(                          # concatenate together, separating by spaces,
                                # and recycling each arg to match the length of the longest
el(strsplit("Two,...",",")),    # split on commas and take the first element
"of",                           # 
 rep(c("Hearts",...),           # replicate the suits (shorter as a vector than using strsplit
               e=13)            # each 13 times
                    )[scan()]   # and take the input'th index.

R , 156 byte

outer(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),c("Hearts","Diamonds","Spades","Clubs"),paste,sep=" of ")[scan()]

Cobalah online!

Intinya sama dengan di atas; Namun, outerakan melakukan daur ulang dengan benar, tetapi harus mengatur sep=" of "agar pasterambut ini hanya dibuat lebih panjang.

Giuseppe
sumber
6

Emojicode , 202 byte

🍇i🚂😀🍪🍺🐽🔫🔤two.three.four.five.six.seven.eight.nine.ten.jack.queen.king.ace🔤🔤.🔤🚮i 13🔤 of 🔤🍺🐽🔫🔤hearts.diamonds.spades.clubs🔤🔤.🔤➗i 13🍪🍉

0 diindeks. Cobalah online!

Penjelasan :

🍇		start of the closure block
  i🚂		 closure takes an integer argument i
  😀		 print:
    🍪		  concatenate these strings:
      🍺🐽🔫🔤...🔤🔤.🔤🚮i 13  [a]
      🔤 of 🔤
      🍺🐽🔫🔤...🔤🔤.🔤➗i 13  [b]
    🍪
🍉

[a]:
🍺		tell Emojicode to dereference without checking
🐽		 get the nth element of the following array
  🔫		  create an array using the following string and separator
    🔤...🔤
    🔤.🔤
  🚮 i 13	n, i mod 13

[b]
🍺🐽🔫🔤...🔤🔤.🔤➗i 13
same but with ⌊i÷13⌋
betseg
sumber
10
Entah bagaimana tampaknya benar bahwa "dereferencing tanpa memeriksa" adalah secangkir bir.
maxathousand
6

Excel, 156 byte

=TRIM(MID("two  threefour five six  seveneightnine ten  jack queenking ace",1+MOD(A1,13)*5,5))&" of "&CHOOSE(1+(A1/13),"hearts","diamonds","spades","clubs")

Kartu dari 0-51. Sayangnya, Excel tidak memiliki fungsi untuk dikonversi 1ke "one"...

Menggunakan TRIMdan MIDlebih pendek daripada menggunakan CHOOSEuntuk nilai nominal, tetapi lebih lama dari menggunakan CHOOSEuntuk Suit.

Kronologis
sumber
Pintar dengan MID()dan menggabungkan kata-kata!
BruceWayne
5

Java 8, 141 byte

n->"two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]+" of "+"hearts;diamonds;spades;clubs".split(";")[n/13]

Input diindeks 0.

Penjelasan:

Cobalah online.

n->         // Method with integer parameter and String return-type
  "two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]
            //  Take `n` modulo-13 as 0-indexed card value
   +" of "  //  append " of "
   +"hearts;diamonds;spades;clubs".split(";")[n/13]
            //  append `n` integer-divided by 13 as 0-indexed suit
Kevin Cruijssen
sumber
4

Kotlin , 154 152 140 byte

i->"two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace".split(',')[i%13]+" of ${"heart,diamond,spade,club".split(',')[i/13]}s"

Cobalah online!

Diperbarui untuk menggunakan hanya ekspresi lambda.

Makotosan
sumber
Tidak apa-apa.
Nissa
2
Selamat datang di PPCG! Pada awalnya saya berkecil hati dengan bahasa golf, tetapi kemudian di suatu tempat seseorang mengatakan kepada saya "Ini benar-benar jawaban terbaik dalam setiap bahasa yang menang" dan saya menyadari itu adalah kompetisi melawan pegolf lain (bahasa Anda di sini). Teruskan, dan saya harap Anda menikmati waktu Anda di sini.
Giuseppe
Lambdas di Kotlin (tidak seperti Jawa) selalu memiliki {dan trailing} terkemuka. Jadi mungkin Anda harus memasukkan dan menghitungnya dalam solusi Anda?
Roland Schmitz
3

JavaScript ES6, 124 118 Bytes, 0-indeks

F= x=>(h=btoa`O
?NÞ{ñhº¿Å÷¿J,IëÞñ"6)Þý7§üô.yéÿ*)àüÿÿÿæ«·÷bjj'wû)i׿r[`.split`/`)[x%13]+` of ${h[x/13|16]}s`

console.log (F(51))

Versi Base64

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==
l4m2
sumber
tes online tampaknya rusak
l4m2
tidak bekerja di chrome
Luis felipe De jesus Munoz
bekerja di Firefox @Luis felipe De jesus Munoz
l4m2
Versi 118 byte Anda mengukur 107 karakter 136 byte di sini: mothereff.in/byte-counter
Phil H
1
@ PhilH jika Anda memecahkan kode base64 yang diberikan kode ke daftar byte (misalnya menggunakan ini ), Anda akan melihat bahwa itu benar-benar menghasilkan 118 byte yang disebutkan.
dzaima
3

Stax , 58 57 56 byte

î↑à■?R╢8«E▄¡╔ÿ•L╫<<⌠ï∞∟⌡♪Ös1"TàLα╥▀¢¡◄└%≈δñM;;}'░o=⌡»╬í√

Jalankan dan debug itu

Berikut adalah representasi tanpa komentar yang dikomentari dari program yang sama. Ini menggunakan liter terkompresi stax banyak. Masukan diindeks 0. Ini adalah algoritma 05AB1E Emigna.

`SsUI'S~pTU5T@T^Ez+`j   suits
`fV:l7eTkQtL*L2!CZb6u[&YNO4>cNHn;9(`j   ranks
|*  cross-product
@   index with input
r   reverse pair
`%+(`*  join with " of "

Jalankan yang ini

rekursif
sumber
3

Bash, 133 byte

V=(two three four five six seven eight nine ten jack queen king ace hearts diamonds spades clubs)
echo ${V[$1%13]} of ${V[$1/13+13]}

Memilih untuk menggunakan 0 berdasarkan pilihan yang diberikan, mendukung 0 (dua hati) hingga 51 (ace klub)

crystalgecko
sumber
Selamat datang di PPCG!
Martin Ender
3

Sekam , 52 byte

;↔!Πmw¶¨×‼sÿẋδẎ₆ṡ⁷Ḃ6‰fωθ»&⌈θƒV₆x⁵▼Ëġ`nıEṅ'jĊk⁸"eïkÄc

Cobalah online!

Saya selalu senang memamerkan sistem kompresi string Husk: D

Penjelasan

Mayoritas program (dari ¨seterusnya) jelas merupakan string terkompresi. Ketika tidak terkompresi, ia berubah menjadi:

hearts diamonds spades clubs
of
two three four five six seven eight nine ten jack queen king ace

Programnya adalah:

;↔!Πmw¶¨…
       ¨…    The previous string
      ¶      Split on lines
    mw       Split each line into words
             - we now have a list of lists of words
   Π         Cartesian product of the three lists
             - with this we obtain all possible combinations of suits and values
               with "of" between the two (e.g. ["spades","of","king"])
  !          Pick the combination at the index corresponding to the input
 ↔           Reverse it, so words are in the correct order
;            Wrap it in a list. Result: [["king","of","spades"]]

Ada beberapa hal yang perlu dijelaskan:

  • Kami membuat kartu dengan setelan sebelum nilai karena cara Πkerja produk kartesius : jika kami melakukannya sebaliknya, daftar kartu akan dipesan berdasarkan nilainya (yaitu dua hati, dua berlian, dua sekop, dua dari klub, tiga hati ...). Sebagai konsekuensinya, kita harus membalikkan hasil kita.

  • Hasil dari program ini adalah matriks string dua dimensi. Ini secara otomatis dicetak oleh Husk sebagai string tunggal yang dibangun dengan menggabungkan baris-baris matriks dengan baris baru dan sel dengan spasi. Alasan kami membangun matriks ini alih-alih menggunakan yang lebih mudah w(bergabung dengan daftar kata dengan spasi) adalah bahwa jika menggunakan wtipe inferencer menebak interpretasi lain untuk program, menghasilkan hasil yang berbeda.

Leo
sumber
2

mIRCScript , 157 byte

c echo $token(ace two three four five six seven eight nine ten jack queen king,$calc(1+$1% 13),32) of $token(clubs spades diamonds hearts,$calc(-$1// 13),32)

Beban sebagai alias, kemudian gunakan: /c N. mIRC adalah 1-diindeks, sehingga pembagian lantai (//) pada nilai negatif dari input menghasilkan -1 hingga -4 seperti yang diperlukan.

jaytea
sumber
2

C (gcc) , 148 byte

f(n){printf("%.5s of %.7ss","two\0 threefour\0five\0six\0 seveneightnine\0ten\0 jack\0queenking\0ace"+n%13*5,"heart\0 diamondspade\0 club"+n/13*7);}

Cobalah online!

Berbasis 0.

gastropner
sumber
Anda harus dapat menyimpan 10 byte dengan mengganti \0dengan byte nol literal.
caird coinheringaahing
2

Haskell , 132 byte

(!!)[v++" of "++s|s<-words"hearts diamonds spades clubs",v<-words"two three four five six seven eight nine ten jack queen king ace"]

Cobalah online!

Fungsi anonim, menggunakan pemahaman daftar untuk membangun semua kombinasi yang sesuai dan nilai, dan mengindeks ke dalam daftar yang dihasilkan dengan input.

Leo
sumber
2

F #, 174 168 byte

Menghapus beberapa spasi putih tambahan seperti dicatat oleh Manish Kundu. Terima kasih!

let c x=["two";"three";"four";"five";"six";"seven";"eight";"nine";"ten";"jack";"queen";"king";"ace"].[(x-1)%13]+" of "+["hearts";"diamonds";"spades";"clubs"].[(x-1)/13]

Cobalah online!

Saya akan jujur ​​- Saya baru di kode golf, jadi saya tidak tahu apakah lebih tepat untuk menjawab dengan fungsi murni seperti ini (dengan parameter, tetapi tidak ada I / O) atau dengan blok kode yang berfungsi dengan pengguna I / O.

Ciaran_McCarthy
sumber
1
-4 byte dengan hanya menghapus spasi yang tidak perlu
Manish Kundu
Ruang putih benar-benar melewati saya. Terlihat dengan baik! Terima kasih banyak!
Ciaran_McCarthy
2

Oktaf , 155 153 151 150 byte

@(x)[strsplit(' of ,s,heart,diamond,spade,club,ace,two,three,four,five,six,seven,eight,nine,ten,jack,queen,king',','){[mod(x,13)+7,1,ceil(2+x/13),2]}]

Cobalah online!

Ini menciptakan string yang dimulai dengan ' of 'dan 's', kemudian semua setelan diikuti oleh semua peringkat. String ini dipisah pada koma menjadi string terpisah. Gugatan berada di depan pangkat, karena sejak itu menyimpan satu byte saat membuat indeks. Setelah ini, kami indeks menggunakan kurung siku dengan indeks berikut:

{[mod(x,13)+7,1,ceil(2+x/13),2]}

yang merupakan peringkat, diikuti oleh elemen pertama ' of ', diikuti oleh gugatan itu, diikuti oleh 's'.

Memiliki 's'sebagai bagian dari jas ( hearts,diamonds,spades,clubs) alih-alih string terpisah adalah panjang yang sama persis tetapi kurang menyenangkan.

Membagi pada pemisah default akan menghemat 4 byte di strsplit-call, tetapi ruang di sekitar ' of 'akan dihapus dan harus ditambahkan secara manual, dengan biaya lebih banyak byte.

Stewie Griffin
sumber
2

V , 154 147 144 142 Bytes

-7 Bytes berkat DJMcMayhem

13i1heart
2diamond
3spade
4club
ÚGxCtwo
three
four
five
six
seven
eight
nine
ten
jack
queen
king
aceH$A of 012j$d4ñ13jPñÍ «/ 
{ÀjYHVGpAs

Cobalah online!

Hexdump:

00000000: 3133 6931 6865 6172 740a 3264 6961 6d6f  13i1heart.2diamo
00000010: 6e64 0a33 7370 6164 650a 3463 6c75 620a  nd.3spade.4club.
00000020: 1bda 1647 7843 7477 6f0a 7468 7265 650a  ...GxCtwo.three.
00000030: 666f 7572 0a66 6976 650a 7369 780a 7365  four.five.six.se
00000040: 7665 6e0a 6569 6768 740a 6e69 6e65 0a74  ven.eight.nine.t
00000050: 656e 0a6a 6163 6b0a 7175 6565 6e0a 6b69  en.jack.queen.ki
00000060: 6e67 0a61 6365 1b16 4824 4120 6f66 201b  ng.ace..H$A of .
00000070: 3016 3132 6a24 6434 f131 336a 50f1 cd20  0.12j$d4.13jP.. 
00000080: ab2f 200a 7bc0 6a59 4856 4770 4173       ./ .{.jYHVGpAs
oktupol
sumber
Berikut cara pintasnya: Coba online! Selalu senang melihat seseorang menggunakan V baru :)
DJMcMayhem
Inilah beberapa tips: 1) « == \+2)12dj == 13D
DJMcMayhem
Terima kasih! :) Dan bagaimana cara saya menggunakan ò? Saya mencoba ò13j0Pòbukan 4ñ13j0Pñ, tapi itu tidak berhenti
oktupol
Saya benar-benar mencobanya juga. Saya tidak yakin mengapa itu tidak berakhir. Mungkin karena tidak menyentuh bagian bawah karena Pmenambah baris baru? Juga, apakah Anda yakin Anda membutuhkan 0bagian itu? Sepertinya saya seperti itu mungkin akan bekerja tanpa
DJMcMayhem
Oh, memang begitu. Dan Anda benar, 0itu tidak perlu
oktupol
2

C # , 219 207 202 197 byte (0 diindeks)

static string O(int i){string[]s={"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace","hearts","diamonds","spades","clubs"};return s[i%13]+" of "+s[i/14+13];}

terima kasih untuk masukan dari @Ciaran_McCarthy dan @raznagul

Mengambil input dari int I, kurangi 1 untuk mencocokkan 0 pengindeksan dari array string dan mengeluarkan angka berdasarkan pada I mod 13 dan setelan berdasarkan pada i / 14 + 13.

berfungsi cukup baik untuk kode golf kedua saya, hanya ingin tahu apakah saya bisa membuatnya lebih pendek menggunakan LINQ atau yang lainnya.

James m
sumber
2
Turun ke 200 dengan menghapus i--; dan melakukan --i dalam indeks array pertama sebagai gantinya (saya akan dikurangi sebelum modulo, dan tetap seperti itu untuk divisi berikut), menghapus, "of" dalam array (tidak diperlukan?), dan menghapus tanda kurung di sekitar pernyataan kembali dan menambahkan satu spasi putih antara kembali dan s [...
Ciaran_McCarthy
1
Tantangan memungkinkan input diindeks 0 sehingga i++dapat dihapus sepenuhnya. Dengan mengubah fungsi menjadi lambda saya mendapatkannya ke 178 byte .
raznagul
2
Awalnya saya mendapat jawaban 163 byte (lihat tautan di atas). Aku memutuskan untuk tidak posting, karena port 1 ke 1 dari @KevinCruijssen s jawaban Jawa masih akan lebih pendek. Mungkin nanti saya mencoba mencari jawaban Linq hanya demi memilikinya. Tapi saya ragu itu akan lebih pendek. Terutama karena Linq dimulai dengan defisit 18 byte untuk using-Statement. Pokoknya +1 dari saya.
raznagul
Terima kasih kepada Ciaran_McCarthy sebuah raznagul untuk masukan Anda, dapatkan hingga 202 sekarang, beri tahu saya jika Anda melihat hal lain yang juga bisa di mainkan
James m
1
Anda masih memiliki berlebihan "of"dalam array.
raznagul
2

PowerShell , 207 192 182 174 165 163 161 157 byte

Diindeks 0

$args|%{(-split'two three four five six seven eight nine ten jack queen king ace')[$_%13]+' of '+('hearts','diamonds','spades','clubs')[$_/13-replace'\..*']}

Cobalah online!

4 byte disimpan berkat AdmBorkBork di komentar

Nik Weiss
sumber
Anda dapat unary -splitpada spasi putih untuk menghemat 6 byte -split'two three four five six seven eight nine ten jack queen king ace'dan byte lain menggunakan inline replace, bukan floor $_/13-replace'\..*'
AdmBorkBork
@ AdmBorkBork Terima kasih atas tipsnya! Bagaimana Anda mendapatkan 6 byte dari perubahan -sit? Saya hanya melihat penghematan 3 byte. Tampaknya masih membutuhkan tanda kurung, jadi saya hanya menghapus ',' dan memesan ulang sisanya.
Nik Weiss
Saya tidak yakin bagaimana saya datang dengan 6, itu memang hanya penghematan 3, lol.
AdmBorkBork
1

CJam , 114 byte

riDmd"two three four five six seven eight nine ten jack queen king ace"S/=" of "@"hearts diamonds spades clubs"S/=

Cobalah online!

Diindeks nol. Mungkin akan dikalahkan oleh bahasa dengan kompresi kamus, tapi oh well ...

Buah Esolanging
sumber
1

Jelly , 61 byte

d13Uị"“¢¶/CŻ)Gụ+Ḷ}ċ<ʂḤaỴ£k7Ỵ€^ḥæ]¿9Ụ“¡¢|hḂṗƬßĖ,$ðĿȧ»Ḳ€¤j“ of 

Pengindeksan 0. Cobalah online!

pengguna202729
sumber
“...“...»Ḳ€¤Œpị@j“ of mungkin lebih pendek.
Jonathan Allan
1

Julia 0,6 , 156 byte

f(n)=print(split(" of ,hearts,diamonds,spades,clubs,two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace",',')[[(n-1)%13+6,1,div(n-1,13)+2]]...)

Cobalah online!

-2 byte terima kasih kepada @Stewie Griffin

niczky12
sumber
1

Haskell , 144 byte

f n=words"two three four five six seven eight nine ten jack queen king ace"!!(n`mod`13)++" of "++words"hearts diamonds spades clubs"!!(n`div`13)

Cobalah online!

Ini menyentuh semua jenis poin rasa sakit Haskell.

benar-benar manusiawi
sumber
1

Javascript 149 143 140 byte

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]

-3 bit terima kasih kepada @rick hitchcock

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]
console.log(a(14))
console.log(a(34))
console.log(a(51))
console.log(a(8))
console.log(a(24))

Luis felipe De jesus Munoz
sumber
1
Simpan 3 byte dengan tidak memisahkan array kedua, dan dengan mengindeksnya [_/13|0]. Misalnya: ["hearts","diamonds","spades","clubs"][_/13|0]
Rick Hitchcock
Saya tidak berpikir Anda perlu a=karena fungsi Anda tidak rekursif.
Oliver
1

Perl 5 -p , 119 byte

Berbasis 0

$_=(TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE)[$_%13].' OF '.(HEART,DIAMOND,SPADE,CLUB)[$_/13].S

Cobalah online!

Xcali
sumber
1

Japt , 91 86 byte

Diindeks 0.

Saya menggunakan alat yang ditulis oleh @Shaggy untuk menghasilkan daftar terkompresi.

`{`twodÈ(‚fÆfivÀ£xç P ightdÍÂdȈjackdquÁÈkˆg»­`qd gU}  {`Ê#tsk¹aÚˆäi£kclubs`qk gUzD

Cobalah online!

Penjelasan:

String terkompresi pertama berisi nilai kartu yang dibatasi oleh d. String terkompresi kedua berisi peringkat kartu yang dibatasi oleh k.

Karakter ini dipilih menggunakan alat Shaggy, yang menghasilkan string yang dibatasi oleh char yang dikompres secara optimal menggunakan shoco (kompresi yang digunakan Japt). Ini memungkinkan kami untuk membuat daftar nilai dan peringkat kartu.

Kami menggunakan backticks `untuk mendekompresi string ini, kemudian kami membagi string menggunakan q, diikuti oleh char untuk membagi.

Setelah kami memiliki daftar, kami memetakan melalui nilai kartu, lalu kami mendapatkan indeks dari input. Penting untuk dicatat bahwa Japt membungkus indeksnya, jadi kita tidak perlu modulo sampai 13.

Di setiap item, kami mengulangi peringkat kartu. Kami mendapatkan indeks dengan membagi input dengan 13.

Setelah kami memiliki kedua item, kami menggabungkannya dengan " of ", yang menghasilkan string terakhir.

Oliver
sumber
1

Jelly , 58 55 byte

“ıĿ⁽⁷lg3e/“ẏ“£Ṣ¢÷yḊ⁾⁶ƭ⁼ẎẇḄṡ¿Onṃ⁶ḂḂfṠȮ⁻ẉÑ%»Ḳ€p/⁸ịṚj“ of 

Cobalah online!

Erik the Outgolfer
sumber