Hangi kart?


30

Giriş

Uzun zaman önce, normal oyun kartlarıyla kart oyunlarını kodlarken, her kart için bir sayı belirtirdim ve bir kart almak için bazı numaralarla bir işlev çağırırdım. Bu biraz bu meydan okuma yapmak için bana ilham verdi.

Bu yüzden oyun kartlarından habersiz insanlar için 52 kağıttan oluşan bir iskambil destesi (dört takımdan 13'ünde, yani Hearts, Diamond, Spades, Clubs) vardır. Her takımda 13 kart var - önce 2-10, sonra Jack (J), Kraliçe (Q), Kral (K) ve As (A) numaralı kartlar. Sipariş bu

Meydan okuma

Zorluk, girdi olarak 1-52 arasında bir tamsayı almak ve kartı bu konumda görüntülemek. Ancak çıktınızın kelimelerden olması gerekir. Ayrıca, sipariş sürdürülmeli, yani ilk 13 kart Hearts, sonra Diamonds, sonra Spades ve nihayet Kulüpler olacak.

Örneğin, eğer biri numarayı seçerse 30. Kart daha sonra üçüncü maça, yani Maça'ya ait olur. Ayrıca, takım elbisedeki dördüncü kart olacaktır, bu da 5 sayısı anlamına gelir. Dolayısıyla, çıktınızın kelime cinsinden olması gerekir: five of spadesve her zaman bu formatı takip etmelidir , yani önce kart, ardından oftakımın adı ve Sonunda, aralarında gerekli boşluklar var.

Giriş ve çıkış

Giriş 1-52 (her ikisi de dahil) arasında bir tam sayı olacaktır . Burada sayımın 1 ile başladığını unutmayın . 0 ile başlamayı seçebilirsiniz . Ancak, yukarıda belirtilen kartların sırasını korumanız gerekir . Çıktınız, kelime ile yazılmış pozisyondaki kart olmalıdır. Geçersiz girişleri işlemenize gerek yoktur. Ayrıca, çıktınız küçük harf veya büyük harf olabilir.

Aşağıda verilen tüm olası girdilerin ve çıktıların listesidir:

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

puanlama

Bu , yani en kısa kod kazanır.


1
Takım elbiselerin varsayılan sıralaması genellikle kalpler, boşluklar, elmaslar, kulüpler değildir (kırmızı, siyah, kırmızı, siyah). Bu zorluk için önemli değil, sadece neden bu sırada olduğunu merak ediyordum.
Kevin Cruijssen

3
Oyundan oyuna değişir. Farklı oyunlar farklı siparişleri takip eder. Ayrıca kartlardan bahsederken, bazı oyunların takım elbiseli en düşük kart olduğu ası bile var.
Manish Kundu

Can I çıkışı two\s\s\sof\sheartsnerede \sbir boşluk anlamına gelmektedir? (Ekstra iki boşluğa dikkat edin.)
tamamen insanlıkta

2
@totallyhuman üzgünüm ama aralarında tam olarak 1 boşluk olması gerekiyor
Manish Kundu

Yanıtlar:


31

Python 3 ,  115  90 bayt

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

Dize büyük harfle dönen bir adsız işlev

Çevrimiçi deneyin!

Nasıl?

Unicode karakterlerin adları vardır. Bunların bazılarının adları "İKİ KARTININ OYNATMA KARTI" şeklinde olduğundan, istenen kartı temsil eden Unicode karakterinin karakterlerini alabilir ve çıktımızı elde etmek için ilk 13 karakteri çıkarabiliriz.

Unicode karakterleri ilgi çekici bir blok içinde:

            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                           

Peşinde xolduğumuz karakterlerin olmadığı yerlerde ( Csütundaki dördüncü "şövalyeler"; üçü F"joker"; biri 0genel; geri kalanlar ayrılmış karakterler).

Bu nedenle biz ekleyebilir bazı istediğimiz kartı bulmak için 0x1F0A1 = 127137 (As) değer.

Eklenecek değer yalnızca üç şey tarafından karmaşıktır:

  1. Elbiseleri yeniden sıralamamız gerekiyor (s, h, d, c, h, d, s, c)
  2. (A, 2, ..., K ila 2, ..., K, A) 'daki sıraları yeniden sıralamamız gerekiyor.
  3. İlgilenme kartı olmayan sütunlardan kaçınmamız gerekiyor.

Tek-indeksleme seçeneğini kullanmak, negatif bir tamsayı bölmesinin, [6,0,4,2][-n//13]*8+( yeniden etkin bir şekilde [48,0,32,16][-n//13]) siparişi vermek için uygun sırayla bir dizi ofset dizine endekslemek için kullanılmasını sağlar n%13+. sütununda şövalyeler Cile n%13//11+(etkili (n%13>10)+).


Aynen böyle bir cevabı başlatıyordum (eminim ki benimki daha uzun olurdu) Buna bir baktım ve cevabınızı gördüm. Güzel bir.
mbomb007, 14.03.2018

... ve yine başka bir bayt golf oynamak için oradaydı :)
Jonathan Allan,

13

Perl6 / Rakudo 70 bayt

Dizin 0

perl6 -peSözlük sıkıştırma olmadan ve kullanılmadan :

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

Sadece Unicode'da (Ace'den başlayarak) kartı arar, adı sorar ve kullanır. Bu, benzer bir yoldur (o sırada bilmiyordum!) Jonathan Aitken'in Python cevabına - sadece maça asının 4 ofset yerine 4 asın tümünden indeksliyorum ve endeksi yapmak için 1.091 ile çarpıyorum. Unicode'daki Knight girişinden uzaklaşıyor.

Tüm çıkışa bakın (0 ila 51 giriş değerleri için) https://glot.io/snippets/ez5v2gkx83

Unicode güverte Knights ile başa çıkmak için düzenlenmiştir, çünkü Unicode.

Perl6 ♥ Unicode


@JonathanAllan: 4 temel kartı kullanarak sırayı belirler (gerekli takım sırasına göre), ancak Şövalyeler üzerinde iyi bir nokta vardı - bunu farketmemiştim. Birkaç karakter daha pahasına düzeltildi.
Phil H

@ JonathanAllan: Diğer cevaplayıcıların sayımında bazı yanlışlıklar var - herkes karakterleri yazarken 'bayt' diyor. Sıkıştırma yapanlar en korkunç suçlulardır.
Phil H

3
Unicode olarak sunulanları içeren sıkıştırma dizeleri olanların aslında kendi kod sayfalarına sahip olduğunu göreceksiniz (bu kesinlikle Jelly, Husk, Charcoal & 05AB1E için geçerlidir).
Jonathan Allan,

Teşekkürler, bunu hiç takdir etmemiştim.
Phil H

@PhilH Eğer bayt sayısının doğru olduğundan şüpheleniyorsanız, onlardan bir hexdump sağlamalarını isteyebilirsiniz.
user202729

9

05AB1E , 54 bayt

0 endeksli

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

Çevrimiçi deneyin!

açıklama

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input

@PhilH 05AB1E kullanan kodsayfasi olarak PPCG burada dilleri golf Cevapları çoğunu yapmak,
dzaima

Özür dilerim, bunun çok yaygın olduğunu farketmemiştim.
Phil H

@PhilH eh, birçoğu gösterilen unicode'un aslında başvuru puanları olduğunu düşünerek aynı şeyi yaptı. Hep (benim SOGL Yanıta gibi), başlıkta kod sayfasını köprü olarak kullanmak burada standart ancak eğer böyle olur
dzaima

@dzaima: Bir süredir bunu yaptım ama yine de yorumum var, bu yüzden durdum. Ancak katılıyorum, TIO şablonuna dahil edilse iyi olur.
Emigna

LOL, Bu cevaba hiç bakmadım ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 Byte!
Magic Octopus Urn,

6

Python 2 , 167 148 bayt

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]

Sıfır endekslendi.

Çevrimiçi Deneyin!

EDIT: Bubbler split metodunu kullanarak (ve daha kısa bir cevap vererek) harika bir noktaya değindi. Split () kullanarak ikinci blokta aynı byte sayısını verir.


Hoşgeldiniz! Varsayılan olarak gönderimler girdi ve çıktıları işlemelidir; bkz Python kuralları özetini .
XNOR

Anladım, işaret ettiğiniz için teşekkürler!
PHC

1
Lambda ve bölünmüş 141 bayt . Karakterleri araya sokmaya çalıştım [n%13::13], ama şanssız.
Bubbler

Bu bölünmenin bazı baytları kurtaracağını fark etmemi sağladığınız için teşekkürler. Başka bir byte Python2'nin varsayılan tamsayı bölümü ile gider.
PHC

4
Faktör çıkışı için yüzde gösterimi kullanarak 140 bayts ; xnor sohbeti işaret etti.
Bubbler

6

R , 154 bayt

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()]

Çevrimiçi deneyin!

Girdiyi (1 indeksli) STDIN'den alır ve source(...,echo=T)sonucu konsola yazdırır.

Güzel değil, AMA kullanabileceğim en iyi çözümden 2 byte daha kısa geliyor outer(aşağıda sunulmuştur), bu yüzden başka bir yaklaşımı incelemek için bunun bir hatırlatıcı olmasına izin verin!

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 bayt

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()]

Çevrimiçi deneyin!

Temelde yukarıdaki ile aynı; Ancak outerdüzgün geri dönüşüm, ama sete sahip yapacağız sep=" of "için pastebu sadece bir saç uzun yaptı.


6

Emojicode , 202 bayt

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

0 dizin oluşturuldu. Çevrimiçi deneyin!

Açıklama :

🍇		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⌋

10
Her nasılsa, "kontrol etmeden düzenleme" nin bir bardak bira olduğu doğru gözüküyor.
saat

6

Excel, 156 bayt

=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")

0-51 arası kartlar. Ne yazık ki, Excel dönüştürmek 1için bir işlev içermiyor "one"...

Kullanma TRIMve yüz değerleri için MIDkullanmaktan daha kısa CHOOSE, ancak CHOOSETakım için kullanmaktan daha kısa .


Zeki MID()ve kelimeleri birleştirerek!
BruceWayne

5

Java 8, 141 bayt

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]

Giriş 0 dizinli.

Açıklama:

Çevrimiçi deneyin.

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

4

Kotlin , 154 152 140 bayt

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"

Çevrimiçi deneyin!

Sadece lambda ifadesi kullanmak için güncellendi.


Bu tamamen iyi.
Nissa,

2
PPCG'ye Hoşgeldiniz! İlk başta golf dilleri tarafından cesaretlendirildim, ama sonra birileri bana " Her dilin kazandığı en iyi cevap " demişti ve bunun diğer oyunculara karşı bir yarışma olduğunu fark ettim. Devam et, umarım zamanın tadını çıkarırsın.
Giuseppe

Kotlin’deki Lambdas’lar (Java’dan farklı olarak) daima öncü bir {ve izleyen} vardır. Öyleyse belki bunları çözümünüze dahil etmeli ve saymalısınız?
Roland Schmitz

3

JavaScript ES6, 124 118 Bayt, 0 dizini

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))

Base64 sürümü

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==

online testi kırılmış görünüyor
l4m2

krom çalışmıyor
Luis felipe De jesus Munoz

Firefox @Luis üzerinde çalışmalar De isa Munoz felipe
l4m2

118 byte versiyonunuz burada 107 karakter 136 byte ölçmektedir: mothereff.in/byte-counter
Phil H

1
@PhilH Eğer (örneğin kullanarak bayt listesine kod verilen base64 deşifre eğer bu ), içeri aslında sonuçları 118 bayt sözü olduğunu göreceksiniz.
dzaima

3

Stax , 58 57 56 bayt

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

Koş ve hata ayıkla

İşte aynı programın yorumlanmış ungolfed temsili. Stax'ın sıkıştırılmış değişmezlerini yoğun olarak kullanıyor. Giriş 0 dizinli. Emigna'nın 05AB1E algoritması.

`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 "

Bunu çalıştır


3

Bash, 133 bayt

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]}

Verilen seçeneğe göre 0'ı seçerek, 0'ı (iki kupa) 51'i (kulüplerin ası) destekleyen


PPCG'ye Hoşgeldiniz!
Martin Ender

3

Kabuğu , 52 bayt

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

Çevrimiçi deneyin!

Husk'in string sıkıştırma sistemini göstermekten daima mutlu oluyorum: D

açıklama

Programın çoğunluğu (başından ¨itibaren) açık bir şekilde sıkıştırılmış bir dizedir. Sıkıştırılmamış bir duruma dönüşür:

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

Ardından program:

;↔!Π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"]]

Açıklamak için birkaç şey kaldı:

  • Kartezyen ürünün nasıl işlediğine bağlı olarak kartları önceden değerlere göre hazırlıyoruz Π: Etrafı tam tersi şekilde yapsaydık, kart listesi değere göre sıralanırdı (yani iki kupa, iki elmas, iki maça, iki kulüpleri, kalplerin üçü ...). Sonuç olarak, sonucumuzu tersine çevirmeliyiz.

  • Programın sonucu iki boyutlu bir dizi matrisidir. Bu, otomatik olarak Husk tarafından matrisin satırlarını yeni satırlarla ve boşluklu hücrelerle birleştirerek oluşturulan tek bir dize olarak yazdırılır. Bu matrisi daha basit kullanmak yerine ( wboşluk içeren bir kelimelerin bir listesine katılın) oluşturmamızın nedeni , eğer winferencer türünü kullanmak program için başka bir yorum tahmin ederse , farklı bir sonuç ortaya çıkmasıdır.


2

mIRCScript , 157 bayt

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)

Bir takma ad olarak yükleyin, sonra: kullanın /c N. mIRC, 1 indeksli olduğundan, girişin negatif değeri üzerindeki kat bölümü (//) gerektiği şekilde -1 ila -4 üretir.



2

Haskell , 132 bayt

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

Çevrimiçi deneyin!

Davranış ve değerin tüm kombinasyonlarını oluşturmak için liste kavramasını kullanan ve girdiyle sonuçlanan listeye indeksleyen anonim bir işlev.


2

F #, 174 168 bayt

Manish Kundu tarafından belirtildiği gibi bazı ekstra boşluk kaldırıldı. Teşekkürler!

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]

Çevrimiçi deneyin!

Dürüst olacağım - kod golfünde yeniyim, bu yüzden böyle saf bir işlevle (parametrelerle, ancak G / Ç olmadan) veya kullanıcı ile çalışan bir kod bloğuyla cevap vermenin daha uygun olup olmadığını bilmiyorum G / Ç.


1
-4 bayt sadece gerekli olmayan alanları kaldırarak
Manish Kundu

Boşluk beni tamamen geçti. İyi benekli! Çok teşekkürler!
Ciaran_McCarthy 14:18

2

Octave , 155 153 151 150 bayt

@(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]}]

Çevrimiçi deneyin!

Bu, ' of 've 's'ardından gelen tüm kıyafetlerden sonra tüm sıralamalardan oluşan bir ip yaratır . Bu dize, virgüllerde ayrı dizelere ayrılır. Kıyafetler rütbeden önce, çünkü bu indeksleri oluştururken bir bayt kazandırıyor. Bundan sonra, aşağıdaki indekslere sahip köşeli parantez kullanarak indeksleriz:

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

rütbe olan, onu ilk eleman ' of 'takip etti, ardından takım izledi, ardından takip etti 's'.

Farklı bir dize yerine 's'takım elbise ( hearts,diamonds,spades,clubs) parçası olarak sahip olmak, aynı uzunluktadır ancak daha az eğlencelidir.

Varsayılan ayırıcıda bölme işlemi çağrı sırasında 4 bayt strsplitkaydeder, ancak etrafındaki boşluklar ' of 'kaldırılır ve daha fazla bayta mal olmak üzere manuel olarak eklenir.


2

V , 154 147 144 142 Bayt

-7 DJMCMayhem sayesinde Bayt

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

Çevrimiçi deneyin!

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

İşte sıralama kısayolu: Çevrimiçi deneyin! Yeni birini V kullanarak görmek her zaman mutludur :)
DJMcMayhem

İşte bazı ipuçları: 1) « == \+2)12dj == 13D
DJMcMayhem

Teşekkürler! :) Ve nasıl kullanırım ò? Denedim ò13j0Pòyerine 4ñ13j0Pñ, ama bu sona vermedi
oktupol

Bunu ben de denedim. Neden sona ermediğinden emin değilim. Belki de Pyeni çizgiler eklediği için dibe vurmadığı içindir. Ayrıca, 0bu kısımda ihtiyacınız olduğuna emin misiniz ? Muhtemelen onsuz çalışacak gibi görünüyor bana
DJMcMayhem

Oh, gerçekten durum bu. Ve haklısın, bu 0gereksiz
oktupol

2

C # , 219 207 202 197 bayt (0 dizinlenmiş)

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];}

@Ciaran_McCarthy ve @raznagul'dan gelen giriş sayesinde

İnt I girişini alır, dize dizisinin 0 dizinine uyması için 1'i çıkarır ve I mod 13'e ve sayıyı i / 14 + 13'e göre olan sayıya göre çıkarır.

benim ikinci kod golf için oldukça iyi çalışıyor, sadece LINQ veya başka bir şeyi kullanarak daha kısa sürebilir miyim diye merak ediyorum.


2
200 Aşağı ben-- kaldırarak; ve --i yerine ilk dizi indeksinde --i yapıyoruz (i ​​modulodan önce azalır ve aşağıdaki bölüm için böyle kalır), dizideki "of" işaretini kaldırmak (gerekli değil mi?) ve etrafındaki parantezleri çıkarmak return deyimi ve return ve s arasında bir boşluk eklenmesi [...
Ciaran_McCarthy

1
Zorluk, girişin 0 indeksli olmasına izin verir, böylelikle i++tamamen çıkarılabilir. Fonksiyonu bir lambdaya dönüştürerek onu 178 bayta indirdim .
raznagul

2
Gerçekten, 163 baytlık bir cevap aldım (yukarıdaki bağlantıya bakın). Yayınlamamaya karar verdim, çünkü @KevinCruijssen in Java yanıtı 1 - 1 bağlantı noktası daha kısa olacak. Belki daha sonra sadece bir tane olması uğruna bir Linq cevabı bulmaya çalışırım. Ancak daha kısa olacağından şüpheliyim. Özellikle Linq using-Statement için 18 byte açıkla başladığından. Neyse benden +1.
raznagul

Her iki Ciaran_McCarthy sayesinde girişiniz için bir raznagul, şimdi 202'ye indirdi, ek olarak golf oynayabilecek başka bir şey görürseniz haber verin
James m

1
"of"Dizide hala gereksiz olan sizde var .
raznagul

2

PowerShell , 207 192 182 174 165 163 161 157 bayt

0-Endeksli

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

Çevrimiçi deneyin!

Yorumlarda AdmBorkBork sayesinde 4 bayt kaydedildi


Şunları yapabilirsiniz tekli -split6 bayt kaydetmek için boşluk üzerinde -split'two three four five six seven eight nine ten jack queen king ace've inline kullanarak başka bayt yerine zeminin yerine $_/13-replace'\..*'
AdmBorkBork

@AdmBorkBork Tavsiyeler için teşekkürler! Split değiştirmeden 6 bayt nasıl alıyorsunuz? Sadece 3 baytlık tasarruf görüyorum. Paranteze hala ihtiyaç duyuyor gibi görünüyor, bu yüzden sadece ',' işaretini kaldırıyorum ve gerisini yeniden sıralıyorum.
Nik Weiss,

Nasıl 6 ile geldiğimden emin değilim, bu gerçekten sadece 3 tasarruf, lol.
AdmBorkBork

1

CJam , 114 bayt

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

Çevrimiçi deneyin!

Sıfır endekslendi. Muhtemelen sözlük sıkıştırmalı diller tarafından dövülecek, ama ah, peki ...



1

Julia 0.6 , 156 bayt

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]]...)

Çevrimiçi deneyin!

@Stewie Griffin sayesinde -2 bayt


1

Haskell , 144 bayt

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)

Çevrimiçi deneyin!

Bu, Haskell'in her türlü acı noktasına çarpıyor.



1

Javascript 149 143 140 bayt

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

@Rick hitchcock sayesinde -3 bit

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))


1
3 bayt kaydet değil bölme ikinci dizidir ve onu endekslenmesi [_/13|0]. Örneğin: ["hearts","diamonds","spades","clubs"][_/13|0]
Rick Hitchcock

a=İşlevinin özyinelemeli olmadığı için ihtiyacın olduğunu sanmıyorum .
Oliver


1

Japt , 91 86 bayt

0 endeksli.

Sıkıştırılmış listeler oluşturmak için @Shaggy tarafından yazılmış bir araç kullandım .

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

Çevrimiçi deneyin!

Açıklama:

İlk sıkıştırılmış dize, sınırlandırılmış kart değerlerini içerir d. İkinci sıkıştırılmış dizge ile sınırlandırılmış kart sıralarını içerir k.

Bu karakterler, shogg (Japt'un kullandığı sıkıştırma) kullanılarak en iyi şekilde sıkıştırılmış bir karakter tarafından sınırlandırılmış bir karakter dizisi üreten Shaggy'nin aracı kullanılarak toplandı. Bu, kart değerleri ve derecelerinin bir listesini oluşturmamızı sağlar.

`Bu dizeleri açmak için geri tepmeler kullanıyoruz q, sonra dizeyi kullanarak bölmeyi, ardından ayrılmak için char'ı izliyoruz .

Listeleri aldıktan sonra, kart değerlerini eşleriz, sonra girişin dizinini alırız. Japt'in endekslerini tamamladığını not etmek önemlidir, bu yüzden 13'e kadar modulo yapmak zorunda değiliz.

Her maddede, kart sıralarında dolaşıyoruz. Girdiyi 13'e bölerek indeksi elde ediyoruz.

Her iki öğeye de sahip olduktan sonra " of ", son dizgeyi üreten bunları bir araya getiririz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.