Która to karta?

30

Wprowadzenie

Dawno temu, kiedy kodowałem gry karciane zwykłymi kartami do gry, podawałem liczbę dla każdej karty i wywoływałem funkcję z pewnym numerem, aby uzyskać kartę. To nieco zainspirowało mnie do podjęcia tego wyzwania.

Tak więc dla osób nieświadomych kart do gry, talia kart składa się z 52 kart (13 w każdym z czterech kolorów, tj. Kier, Diamentów, Pik, Maczug). W każdym kolorze jest 13 kart - najpierw karty ponumerowane od 2 do 10, następnie walet (J), królowa (Q), król (K) i as (A). To jest zamówienie

Wyzwanie

Wyzwanie polega na przyjęciu liczby całkowitej od 1 do 52 jako wartości wejściowej i wyświetleniu karty w tej pozycji. Ale twój wynik musi być w słowach. Ponadto należy zachować porządek, tzn. Pierwsze 13 kart będzie kier, następnie karo, następnie pik i wreszcie trefl.

Na przykład, jeśli ktoś wybierze numer 30. Karta należałaby wówczas do trzeciego koloru, tj. Pik. Byłaby to także czwarta karta w kolorze, co oznacza liczbę 5. Stąd wynik musi być następujący: five of spadesi zawsze powinien być zgodny z tym formatem , tj. Najpierw karta, po której następuje ofi nazwa koloru w koniec z wymaganymi odstępami pomiędzy.

Wejście i wyjście

Dane wejściowe będą liczbami całkowitymi od 1 do 52 (oba włącznie). Pamiętaj, że tutaj liczenie zaczyna się od 1. Możesz zacząć od 0 . Należy jednak zachować kolejność kart wymienionych powyżej. Twój wynik powinien być kartą w tej pozycji zapisaną słowami. Nie musisz obsługiwać nieprawidłowych danych wejściowych. Ponadto dane wyjściowe mogą być pisane małymi lub dużymi literami.

Poniżej znajduje się lista wszystkich możliwych danych wejściowych i ich wyników:

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

Punktacja

To jest , więc wygrywa najkrótszy kod.

Manish Kundu
źródło
1
Nie jest domyślną kolejnością kolorów zwykle kier, spacji, diamentów, trefl (czerwony, czarny, czerwony, czarny). Nie żeby miało to znaczenie dla wyzwania, po prostu zastanawiałem się, dlaczego jest w tej kolejności.
Kevin Cruijssen
3
Różni się w zależności od gry. Różne gry wykonują różne zamówienia. Mówiąc również o kartach, niektóre gry mają nawet asa jako najniższą kartę w kolorze.
Manish Kundu
Czy mogę wyprowadzać, two\s\s\sof\sheartsgdzie \soznacza miejsce? (Zwróć uwagę na dwie dodatkowe spacje).
całkowicie ludzki
2
@ totalniehuman przepraszam, ale pomiędzy nimi musi być dokładnie 1 miejsce
Manish Kundu

Odpowiedzi:

31

Python 3 ,  115  90 bajtów

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

Nienazwana funkcja zwracająca ciąg znaków wielkimi literami.

Wypróbuj online!

W jaki sposób?

Znaki Unicode mają nazwy. Nazwy niektórych z nich przypominają „GRA W KARTĘ DWIE SPADY”, dlatego możemy uzyskać znaki postaci Unicode reprezentujące wymaganą kartę i usunąć 13 pierwszych znaków, aby uzyskać wynik.

Interesujące znaki Unicode znajdują się w bloku, takim jak:

            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                           

Gdzie xnie jesteśmy znakami, których szukamy (cztery w Ckolumnie to „rycerze”; trzy w Fto „żarty”; jeden w 0jest ogólny, reszta to znaki zastrzeżone).

W związku z tym możemy dodać pewną wartość do 0x1F0A1 = 127137 (As), aby znaleźć kartę, którą chcemy.

Wartość dodaną komplikują tylko trzy rzeczy:

  1. Musimy zmienić kolejność kolorów (od s, h, d, c do h, d, s, c)
  2. Musimy zmienić kolejność rang od (A, 2, ..., K do 2, ..., K, A)
  3. Musimy unikać kolumn bez interesujących kart.

Użycie opcji z jednym indeksowaniem pozwala na zastosowanie ujemnego podziału na liczby całkowite w celu indeksowania do tablicy przesunięć wierszy w celu ponownego uporządkowania koloru za pomocą [6,0,4,2][-n//13]*8+(skutecznie [48,0,32,16][-n//13]), możemy również umieścić asy we właściwych lokalizacjach za pomocą, n%13+a następnie uniknąć rycerze w kolumnie Cz n%13//11+(skutecznie (n%13>10)+).

Jonathan Allan
źródło
Gdy zaczynałem taką odpowiedź (jestem pewien, że moja byłaby dłuższa), zerknąłem i zobaczyłem twoją odpowiedź. Niezłe.
mbomb007
... i był jeszcze jeden bajt do gry w golfa :)
Jonathan Allan
13

Perl6 / Rakudo 70 bajtów

Indeks 0

Używanie perl6 -pei bez kompresji słownika:

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

Po prostu wyszukuje kartę w Unicode (zaczynając od asa), prosi o nazwę i używa jej. Jest to podobna trasa (chociaż wtedy nie znałem!) Do odpowiedzi Pythona Jonathana Aitkena - tylko indeksuję ze wszystkich 4 asów, a nie 4 odsunięcia od asa pik, i mnożę przez 1,091, aby zrobić indeks zaokrąglić od wpisu rycerza w Unicode.

Zobacz wszystkie dane wyjściowe (dla wartości wejściowych od 0 do 51) https://glot.io/snippets/ez5v2gkx83

Edytowane, aby radzić sobie z Rycerzami w talii Unicode, ponieważ Unicode.

Perl6 ♥ Unicode

Phil H.
źródło
@JonathanAllan: Ustawia kolejność za pomocą 4 kart podstawowych (są one w wymaganej kolejności kolorów), ale dobrze zauważone na Rycerzach - tego nie zauważyłem. Naprawiono kosztem kilku dodatkowych znaków.
Phil H
@JonathanAllan: Istnieje pewna niepoprawność w liczeniu innych odpowiedzi - wszyscy mówią „bajty”, gdy mają na myśli znaki. Ci z kompresją są najbardziej skandalicznymi przestępcami.
Phil H
3
Myślę, że przekonasz się, że te z ciągami kompresji zawierającymi to, co jest prezentowane jako Unicode, faktycznie mają własne strony kodowe (z pewnością dotyczy to Jelly, Husk, Charcoal i 05AB1E).
Jonathan Allan
Dzięki, wcale tego nie doceniałem.
Phil H
@ PhilH Jeśli masz wątpliwości, czy liczba bajtów jest prawidłowa, możesz poprosić ich o dostarczenie zrzutu heksadecymalnego.
user202729,
9

05AB1E , 54 bajty

0-indeksowane

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

Wypróbuj online!

Wyjaśnienie

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input
Emigna
źródło
@PhilH 05AB1E używa strony kodowej , podobnie jak większość odpowiedzi w językach golfowych tutaj na PPCG
dzaima
Przepraszam, nie zdawałem sobie sprawy, że to tak powszechne.
Phil H
@ PhilH eh, wielu zrobiło dokładnie to samo, myśląc, że pokazany unicode jest tak naprawdę wynikiem przesłania. Chciałbym jednak, aby tutaj standardem było zawsze hiperłączenie strony kodowej w tytule (jak w mojej odpowiedzi SOGL)
dzaima
@dzaima: Robiłem to przez jakiś czas, ale wciąż otrzymałem komentarze, więc przestałem. Ale zgadzam się, byłoby miło, gdyby został włączony do szablonu TIO.
Emigna
LOL, nie spojrzałem na tę odpowiedź ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 bajty też!
Magic Octopus Urn
6

Python 2 , 167 148 bajtów

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]

Zero indeksowane.

Wypróbuj online!

EDYCJA: Bubbler bardzo się przydał, stosując metodę podziału (i udzielając krótszej odpowiedzi). W drugim bloku użycie split () daje taką samą liczbę bajtów.

PHC
źródło
Witamy! Domyślnie zgłoszenia muszą obsługiwać dane wejściowe i wyjściowe; zobacz podsumowanie reguł Python .
xnor
Rozumiem, dzięki za wskazanie!
PHC
1
141 bajtów z lambda i splitem. Próbowałem przeplatać znaki [n%13::13]lub coś takiego, ale bez powodzenia.
Bubbler
Dzięki za uświadomienie mi, że podział zaoszczędziłby trochę bajtów. Kolejny bajt odchodzi od domyślnego podziału liczb całkowitych Python2.
PHC
4
140 bajtów przy użyciu notacji procentowej do wyodrębnienia s; xnor wskazał to na czacie.
Bubbler
6

R , 154 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe (1 indeksowane) ze STDIN i za pomocą source(...,echo=T)wypisze wynik na konsolę.

To nie jest ładne, ALE jest o 2 bajty krótsze niż najlepsze rozwiązanie, jakie mogłem zastosować outer(przedstawione poniżej), więc niech to będzie przypomnienie, aby przeanalizować inne podejście!

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 bajtów

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

Wypróbuj online!

Zasadniczo takie same jak powyżej; Jednak outerzrobi recykling właściwie, ale trzeba ustawić sep=" of "na to, pasteże to tylko włosy dłużej.

Giuseppe
źródło
6

Emojicode , 202 bajty

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

0 zindeksowanych. Wypróbuj online!

Objaśnienie :

🍇		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
źródło
10
Jakoś wydaje się słuszne, że „dereferencja bez sprawdzania” to kufel piwa.
maxathousand
6

Excel, 156 bajtów

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

Karty od 0-51. Niestety, Excel nie ma funkcji do konwersji 1na "one"...

Używanie TRIMi MIDjest krótsze niż używanie CHOOSEdla wartości nominalnych, ale dłuższe niż używanie CHOOSEdla koloru.

Chronocidal
źródło
Sprytne z MID()łączeniem słów!
BruceWayne
5

Java 8, 141 bajtów

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]

Wejście jest indeksowane na 0.

Wyjaśnienie:

Wypróbuj 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
źródło
4

Kotlin , 154 152 140 bajtów

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"

Wypróbuj online!

Zaktualizowano, aby używał tylko wyrażenia lambda.

Makotosan
źródło
W porządku.
Nissa
2
Witamy w PPCG! Początkowo zniechęciły mnie języki gry w golfa, ale potem ktoś powiedział mi: „To naprawdę najlepsza odpowiedź w każdym języku wygrywa” i zdałem sobie sprawę, że była to konkurencja przeciwko innym golfistom. Tak trzymaj i mam nadzieję, że spodoba ci się twój czas tutaj.
Giuseppe
Lambda w Kotlinie (w przeciwieństwie do Javy) zawsze ma wiodące {i końcowe}. Więc może powinieneś je uwzględnić i policzyć w swoim rozwiązaniu?
Roland Schmitz,
3

JavaScript ES6, 124 118 bajtów, 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))

Wersja Base64

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==
l4m2
źródło
test online wydaje się zepsuty
l4m2
nie działa w chromie
Luis Felipe De Jesus Munoz
działa na Firefox @Luis felipe De jesus Munoz
l4m2
Twoja 118-bajtowa wersja ma 107 znaków tutaj 136 bajtów: mothereff.in/byte-counter
Phil H
1
@ PhilH, jeśli zdekodujesz dany kod base64 kodu na listę bajtów (np. Używając tego ), zobaczysz, że faktycznie powoduje to wspomniane 118 bajtów.
dzaima
3

Stax , 58 57 56 bajtów

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

Uruchom i debuguj

Oto skomentowana niegolfowana reprezentacja tego samego programu. Używa mocno skompresowanych literałów Stax. Dane wejściowe mają indeks 0. To algorytm 05AB1E Emigny.

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

Uruchom ten

rekurencyjny
źródło
3

Bash, 133 bajty

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

Wybór użycia 0 w oparciu o podaną opcję, wspieranie 0 (dwóch kier) do 51 (asa trefl)

crystalgecko
źródło
Witamy w PPCG!
Martin Ender
3

Łuska , 52 bajty

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

Wypróbuj online!

Zawsze chętnie pokazuję system kompresji struny Husk: D

Wyjaśnienie

Większość programu (od ¨początku) jest oczywiście skompresowanym łańcuchem. Po rozpakowaniu zmienia się w:

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

Program to:

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

Pozostało jeszcze kilka rzeczy do wyjaśnienia:

  • Karty budujemy z kolorami przed wartościami ze względu na działanie produktu kartezjańskiego Π: jeśli zrobilibyśmy to na odwrót, lista kart byłaby uporządkowana według wartości (tj. Dwa serca, dwa karo, dwa pik, dwa trefl, trzy serca ...). W konsekwencji musimy odwrócić nasz wynik.

  • Wynikiem programu jest dwuwymiarowa macierz ciągów znaków. Jest to automatycznie drukowane przez Husk jako pojedynczy ciąg zbudowany przez połączenie rzędów matrycy ze znakami nowej linii i komórek ze spacjami. Powodem, dla którego budujemy tę matrycę zamiast korzystania z prostszych metod w(łączenie listy słów ze spacjami) jest to, że użycie winferencji typu domyślnie zgaduje inną interpretację programu, co daje inny wynik.

Lew
źródło
2

mIRCScript , 157 bajtów

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)

Obciążenie jako alias, a następnie użyć: /c N. mIRC ma indeks 1, więc podział podłogi (//) na ujemną wartość wejściową daje -1 do -4 zgodnie z wymaganiami.

jaytea
źródło
2

C (gcc) , 148 bajtów

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

Wypróbuj online!

W oparciu o 0.

gastropner
źródło
Powinieneś być w stanie zapisać 10 bajtów, zastępując \0literał bajtami zerowymi.
caird coinheringaahing
2

Haskell , 132 bajty

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

Wypróbuj online!

Anonimowa funkcja, wykorzystująca rozumienie listy do zbudowania wszystkich kombinacji koloru i wartości oraz indeksująca do wynikowej listy za pomocą danych wejściowych.

Lew
źródło
2

F # 174 168 bajtów

Usunięto dodatkowe białe znaki, jak zauważył Manish Kundu. Dzięki!

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]

Wypróbuj online!

Będę szczery - jestem nowy w golfie kodu, więc nie wiem, czy lepiej jest odpowiedzieć za pomocą czystej funkcji takiej jak ta (z parametrami, ale bez we / wy) lub z działającym blokiem kodu z użytkownikiem I / O.

Ciaran_McCarthy
źródło
1
-4 bajty , usuwając tylko niepotrzebne spacje
Manish Kundu
Biała przestrzeń całkowicie mnie ominęła. Dobrze zauważony! Dziękuję bardzo!
Ciaran_McCarthy
2

Oktawa , 155 153 151 150 bajtów

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

Wypróbuj online!

To tworzy ciąg rozpoczynający się ' of 'i 's', wtedy wszystkie garnitury przestrzegane przez wszystkich szeregach. Ciąg ten jest dzielony przecinkami na osobne ciągi. Kolorami są przed szeregami, ponieważ to oszczędza bajt podczas tworzenia indeksów. Następnie indeksujemy go za pomocą nawiasów kwadratowych o następujących indeksach:

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

czyli ranga, pierwszy element ' of ', następnie kolor, a następnie's' .

Mając 's'jako część garnitury (hearts,diamonds,spades,clubs ) zamiast osobnego łańcucha to dokładnie ta sama długość, ale mniej radości.

Podział na domyślny separator pozwoliłby zaoszczędzić 4 bajty w strsplitwywołaniu -c, ale spacje wokół ' of 'zostałyby usunięte i trzeba by je dodać ręcznie, co kosztuje więcej bajtów.

Stewie Griffin
źródło
2

V , 154 147 144 142 bajtów

-7 bajtów dzięki DJMcMayhem

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

Wypróbuj 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
źródło
Oto skrót sortowania: Wypróbuj online! Zawsze cieszę się, że ktoś nowy używa V :)
DJMcMayhem
Oto kilka wskazówek: 1) « == \+2)12dj == 13D
DJMcMayhem
Dzięki! :) A jak korzystać ò? Próbowałem ò13j0Pòzamiast 4ñ13j0Pñ, ale to nie zakończyło się
oktupol
Ja też tego spróbowałem. Nie jestem pewien, dlaczego się nie kończy. Może dlatego, że nie uderza w dno, ponieważ Pdodaje nowe linie? Czy na pewno potrzebujesz 0tej części? Wydaje mi się, że prawdopodobnie działałoby bez
DJMcMayhem
Och, tak właśnie jest. I masz rację, 0to nie jest konieczne
oktupol
2

C # , 219 207 202 197 bajtów (0 indeksowanych)

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

dzięki wkładowi @Ciaran_McCarthy i @raznagul

Pobiera dane wejściowe z int I, odejmuje 1, aby dopasować 0 indeksowania tablicy ciągów i wypisuje liczbę na podstawie I mod 13 oraz koloru na podstawie i / 14 + 13.

działa całkiem dobrze na moim drugim kodzie golfowym, tylko zastanawiam się, czy mogę go skrócić za pomocą LINQ lub czegoś innego.

James m
źródło
2
Zmniejsz do 200 , usuwając i--; i zamiast tego robię - i w pierwszym indeksie tablicy (jestem zmniejszany przed modulo i pozostaje taki do następnego podziału), usuwając „z” w tablicy (nie jest to potrzebne?) i usuwając nawiasy wokół instrukcja return i dodanie jednej spacji między return a s [...
Ciaran_McCarthy
1
Wyzwanie pozwala na indeksowanie danych wejściowych, dzięki czemu i++można je całkowicie usunąć. Konwertując funkcję na lambda, zmniejszyłemdo 178 bajtów .
raznagul
2
Początkowo wymyśliłem odpowiedź na 163 bajty (patrz link powyżej). Zdecydowałem się nie publikować, ponieważ 1 do 1 port odpowiedzi Java @KevinCruijssen 's nadal będzie krótszy. Może później próbuję wymyślić odpowiedź Linq tylko ze względu na taką odpowiedź. Ale wątpię, że będzie krótszy. Zwłaszcza, że ​​Linq zaczyna od 18-bajtowego deficytu dla -Statement. W każdym razie +1 ode mnie. using
raznagul
Dzięki Ciaran_McCarthy raznagulowi za twój wkład, teraz spadłem do 202, daj mi znać, jeśli zobaczysz coś jeszcze, co można dodatkowo zagrać w golfa
James m
1
Nadal masz zbędne "of"w tablicy.
raznagul
2

PowerShell , 207 192 182 174 165 163 163 157 157 bajtów

Indeksowane 0

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

Wypróbuj online!

4 bajty zapisane dzięki AdmBorkBork w komentarzach

Nik Weiss
źródło
Możesz unarować się -splitna białych znakach, aby zaoszczędzić 6 bajtów -split'two three four five six seven eight nine ten jack queen king ace'i kolejny bajt za pomocą zastępowania zamiast $_/13-replace'\..*'
wiersza
@AdmBorkBork Dzięki za wskazówki! W jaki sposób otrzymujesz 6 bajtów ze zmiany -split? Widzę tylko oszczędności 3 bajtów. Wydaje się, że nadal potrzebuje nawiasów, więc po prostu usuwam „i”, a resztę porządkuję.
Nik Weiss,
Nie jestem pewien, jak wymyśliłem 6, to rzeczywiście tylko oszczędność 3, lol.
AdmBorkBork
1

CJam , 114 bajtów

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

Wypróbuj online!

Zero indeksowane. Prawdopodobnie zostaną pokonane przez języki z kompresją słownikową, ale no cóż ...

Esolanging Fruit
źródło
1

Galaretka , 61 bajtów

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

Indeksowanie 0. Wypróbuj online!

użytkownik202729
źródło
“...“...»Ḳ€¤Œpị@j“ of jest prawdopodobnie krótszy.
Jonathan Allan
1

Julia 0.6 , 156 bajtów

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

Wypróbuj online!

-2 bajty dzięki @Stewie Griffin

niczky12
źródło
1

Haskell , 144 bajty

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)

Wypróbuj online!

Uderza to we wszystkie punkty bólu Haskella.

całkowicie ludzki
źródło
1

Javascript 149 143 140 bajtów

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

-3 bity dzięki @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
źródło
1
Zaoszczędź 3 bajty, nie dzieląc drugiej tablicy i indeksując ją [_/13|0]. Na przykład: ["hearts","diamonds","spades","clubs"][_/13|0]
Rick Hitchcock
Nie sądzę, że potrzebujesz, a=ponieważ twoja funkcja nie jest rekurencyjna.
Oliver
1

Perl 5 -p , 119 bajtów

W oparciu o 0

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

Wypróbuj online!

Xcali
źródło
1

Japt , 91 86 bajtów

0-indeksowane.

Użyłem narzędzia napisanego przez @Shaggy do wygenerowania skompresowanych list.

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

Wypróbuj online!

Wyjaśnienie:

Pierwszy skompresowany ciąg zawiera wartości kart ograniczone przez d. Drugi skompresowany ciąg zawiera szeregi kart ograniczone przez k.

Te znaki zostały wybrane przy użyciu narzędzia Shaggy, który generuje ciąg rozdzielany znakiem, który jest optymalnie skompresowany przy użyciu shoco (kompresja, której używa Japt). To pozwala nam stworzyć listę wartości kart i rang.

Używamy wstecznych `znaków do dekompresji tych ciągów, a następnie dzielimy ciąg za pomocą q, a następnie znak char, aby podzielić.

Kiedy mamy listy, mapujemy wartości kart, a następnie otrzymujemy indeks danych wejściowych. Należy zauważyć, że Japt zawija swoje indeksy, więc nie musimy modulo o 13.

Przy każdym elemencie przeglądamy szeregi kart. Otrzymujemy indeks dzieląc dane wejściowe przez 13.

Kiedy już mamy oba przedmioty, łączymy je " of ", co daje końcowy ciąg.

Oliver
źródło
1

Galaretka , 58 55 bajtów

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

Wypróbuj online!

Erik the Outgolfer
źródło