Какая это карточка?

30

Введение

Давным-давно, когда я использовал для кодирования карточных игр обычные игральные карты, я обычно указывал номер для каждой карты и вызывал функцию с некоторым номером, чтобы получить карту. Это несколько вдохновило меня принять этот вызов.

Таким образом, для людей, не подозревающих об игральных картах, колода карт состоит из 52 карт (по 13 в каждой из четырех мастей, т. Е. Червы, алмазы, пики, трефы). В каждой масти есть 13 карт - сначала карты с номерами от 2 до 10, затем Джек (J), Королева (Q), Король (K) и Туз (A). Это заказ

Вызов

Задача состоит в том, чтобы взять целое число от 1 до 52 в качестве входных данных и отобразить карту в этой позиции. Но ваш вывод должен быть на словах. Кроме того, необходимо поддерживать порядок, то есть сначала 13 карт будут иметь Червы, затем Бриллианты, затем Пики и, наконец, Клубы.

Например, если кто-то выберет номер 30. Карта будет принадлежать третьей масти, то есть пикам. Кроме того, это будет четвертая карта в костюме, что означает число 5. Следовательно, ваш вывод в словах должен быть: five of spadesи он всегда должен следовать этому формату , то есть сначала карта, после которой следует знак ofи название масти в конец, с необходимыми пробелами между ними.

Вход и выход

Ввод будет целым числом от 1 до 52 (оба включительно). Обратите внимание, что здесь отсчет начинается с 1. Вы можете начать с 0 . Тем не менее, вы должны поддерживать порядок карт, упомянутых выше. Ваш вывод должен быть картой в этой позиции, написанной словами. Вам не нужно обрабатывать неверные данные. Кроме того, ваш вывод может быть в нижнем или верхнем регистре.

Ниже приведен список всех возможных входов и их выходов:

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

счет

Это , поэтому выигрывает самый короткий код.

Маниш Кунду
источник
1
Не по умолчанию порядок костюмов обычно червы, пробелы, алмазы, булавы (красный, черный, красный, черный). Не то чтобы это было важно для вызова, просто было интересно, почему это в таком порядке.
Кевин Круйссен
3
Это варьируется от игры к игре. Разные игры следуют разным порядкам. Кроме того, говоря о картах, в некоторых играх даже туз является самой низкой картой в масти.
Маниш Кунду
Могу ли я вывести two\s\s\sof\sheartsгде \sобозначает пробел? (Обратите внимание на два лишних пробела.)
полностью человек
2
@totallyhuman извините, но между ними должно быть ровно 1 пробел
Маниш Кунду

Ответы:

31

Python 3 ,  115  90 байт

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

Безымянная функция, возвращающая строку в верхнем регистре.

Попробуйте онлайн!

Как?

У символов Юникода есть имена. Названия некоторых из них похожи на «ИГРАЮЩАЯ КАРТА ДВА СПАДА», поэтому мы можем получить символы символа Юникод, представляющие требуемую карту, и убрать первые 13 символов, чтобы получить наш вывод.

Интересующие вас символы Юникода находятся внутри блока примерно так:

            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                           

Где xне те символы, которые нам нужны (четыре в Cстолбце - «рыцари»; три F- «джокеры»; один 0- общий; остальные - зарезервированные символы).

Таким образом, мы можем добавить некоторое значение к 0x1F0A1 = 127137 (As), чтобы найти нужную карту.

Значение, которое нужно добавить, осложняется только тремя вещами:

  1. Нам нужно изменить порядок костюмов (от s, h, d, c до h, d, s, c)
  2. Нам нужно изменить порядок рангов от (A, 2, ..., K до 2, ..., K, A)
  3. Нам нужно избегать столбцов без карточек интереса.

Использование опции одноиндексирования позволяет использовать отрицательное целочисленное деление для индексации в массив построчных смещений для переупорядочения мастей с [6,0,4,2][-n//13]*8+(эффективно [48,0,32,16][-n//13]), затем мы можем также разместить тузов в правильных местах с помощью n%13+и затем избежать Рыцари в колонне Cс n%13//11+(эффективно (n%13>10)+).

Джонатан Аллан
источник
Как раз когда я начинал такой ответ (уверен, мой был бы длиннее), я оглянулся и увидел твой ответ. Хороший.
mbomb007
... и еще один байт должен был быть в гольфе :)
Джонатан Аллан
13

Perl6 / Rakudo 70 байтов

Индекс 0

Используя perl6 -pe, и без сжатия словаря:

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

Он просто ищет карту в Unicode (начиная с туза), запрашивает имя и использует его. Это аналогичный маршрут (хотя я не знал его в то время!) К ответу Джонатана Эйткена на Python - я только индексирую все 4 туза, а не 4 смещения от туза пик, и умножаю на 1,091, чтобы получить индекс отойти от входа Рыцаря в Юникоде.

Посмотреть все выходные данные (для входных значений от 0 до 51) https://glot.io/snippets/ez5v2gkx83

Отредактировано, чтобы справиться с рыцарями в колоде Юникод, потому что Юникод.

Perl6 ♥ Unicode

Фил Х
источник
@JonathanAllan: он устанавливает порядок, используя 4 базовые карты (они находятся в требуемом порядке масти), но хорошо заметен на рыцарях - я этого не заметил. Исправлено за счет еще нескольких персонажей.
Фил Х
@JonathanAllan: в подсчете другого ответа есть некоторая неправильность - все говорят «байты», когда имеют в виду символы. Те, кто со сжатием, являются наиболее вопиющими преступниками.
Фил Х
3
Я думаю, вы обнаружите, что те, у которых есть строки сжатия, содержащие то, что представлено как Unicode, на самом деле имеют свои собственные кодовые страницы (это, безусловно, верно для Jelly, Husk, Charcoal & 05AB1E).
Джонатан Аллан
Спасибо, я не оценил это вообще.
Фил Х
@PhilH Если вы сомневаетесь в правильности подсчета байтов, вы можете попросить их предоставить hexdump.
user202729
9

05AB1E , 54 байта

0 индексированные

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

Попробуйте онлайн!

объяснение

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input
Emigna
источник
@PhilH 05AB1E использует кодовую страницу , как и большинство ответов на языках для игры в гольф здесь на PPCG
dzaima
Извинения, не понял, что это было так часто.
Фил Х
@PhilH ага, многие сделали то же самое, думая, что показанный юникод на самом деле является счетом представлений. Однако я хотел бы, чтобы это было стандартным здесь, чтобы всегда гиперссылка на кодовую страницу в заголовке (как в моем ответе SOGL)
dzaima
@dzaima: Я делал это некоторое время, но я все еще получал комментарии, поэтому я остановился. Но я согласен, было бы неплохо, если бы он был включен в шаблон TIO.
Эминья
LOL, я не смотрела на этот ответ ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 байта!
Волшебная Осьминог Урна
6

Python 2 , 167 148 байт

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-индексироваться.

Попробуйте онлайн!

РЕДАКТИРОВАТЬ: Bubbler сделал большой вывод, используя метод разделения (и предоставляя более короткий ответ). Во втором блоке использование split () дает тот же счетчик байтов.

PHC
источник
Добро пожаловать! По умолчанию представления должны обрабатывать ввод и вывод; см. сводку правил Python .
xnor
Понял, спасибо за указание!
PHC
1
141 байт с лямбдой и разделением. Пробовал чередовать символы для [n%13::13]чего-то, но не повезло.
Bubbler
Спасибо, что заставил меня понять, что разделение спасет несколько байтов Другой байт исчезает с целочисленным делением Python2 по умолчанию.
PHC
4
140 байт с использованием процентов обозначения для исключения s; Кснор указал на это в чате.
Bubbler
6

R 154 байта

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

Попробуйте онлайн!

Принимает ввод (1-индексированный) из STDIN и с помощью source(...,echo=T)распечатает результат на консоль.

Это не очень красиво, НО это на 2 байта короче, чем лучшее решение, которое я мог бы использовать outer(представлен ниже), так что пусть это будет напоминанием для изучения другого подхода!

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 байт

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

Попробуйте онлайн!

По сути, то же самое, что и выше; однако, outerбудет делать утилизации должным образом, но необходимость набора sep=" of "для pasteсделал это просто волосы дольше.

Giuseppe
источник
6

Эмоджикод , 202 байта

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

0 проиндексировано. Попробуйте онлайн!

Пояснение :

🍇		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
источник
10
Почему-то кажется правильным, что «разыменование без проверки» - это кружка пива.
макс. Тысяча
6

Excel, 156 байт

=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. К сожалению, в Excel нет функции для преобразования 1в "one"...

Использование TRIMи MIDкороче, чем использование CHOOSEдля номиналов, но дольше, чем использование CHOOSEдля костюма.

Chronocidal
источник
Умно MID()и сочетая слова!
Брюс Уэйн
5

Java 8, 141 байт

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]

Ввод 0-индексирован.

Объяснение:

Попробуйте онлайн.

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

Котлин , 154 152 140 байт

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"

Попробуйте онлайн!

Обновлено для использования только лямбда-выражения.

Makotosan
источник
Это совершенно нормально.
Nissa
2
Добро пожаловать в PPCG! Сначала я был обескуражен языками игры в гольф, но потом кто-то сказал мне: «Это действительно лучший ответ на каждом языке, который побеждает», и я понял, что это соревнование против других (ваш язык здесь) игроков в гольф. Так держать, и я надеюсь, вам здесь понравится.
Джузеппе
Лямбды в Kotlin (в отличие от Java) всегда имеют ведущий {и конечный}. Так, может быть, вы должны включить и считать их в своем решении?
Роланд Шмитц
3

JavaScript ES6, 124 118 байт, 0-индекс

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

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==
l4m2
источник
кажется, что онлайн-тест не
пройден
не работает в Chrome
Луис Фелипе Де Иисус Муньос
работает над Firefox @Luis felipe De jesus Munoz
м2 18
Ваша 118-байтовая версия измеряет 107 символов 136 байтов здесь: mothereff.in/byte-counter
Фил Х
1
@PhilH, если вы декодируете заданную base64 кода в список байтов (например, используя это ), вы увидите, что на самом деле это приводит к упомянутым 118 байтам.
dzaima
3

Stax , 58 57 56 байт

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

Запустите и отладьте его

Вот прокомментированное неоправданное представление той же программы. Он использует сжатые литералы Stax интенсивно. Вход 0 индексируется. Это алгоритм Эминьи 05AB1E.

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

Запустите этот

рекурсивный
источник
3

Баш, 133 байта

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

Выбор использовать 0 на основе предоставленной опции, поддерживая 0 (два черва) до 51 (туз треф)

crystalgecko
источник
Добро пожаловать в PPCG!
Мартин Эндер
3

Шелуха , 52 байта

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

Попробуйте онлайн!

Я всегда рад показать систему сжатия строк Husk: D

объяснение

Большая часть программы (начиная с этого ¨момента), очевидно, представляет собой сжатую строку. В несжатом виде он превращается в:

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

Программа тогда:

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

Осталось объяснить пару вещей:

  • Мы строим карты с мастями до значений из-за того, как Πработает декартово произведение: если бы мы делали это наоборот, список карт был бы упорядочен по значению (то есть два черва, два бриллианта, два пика, два клубы, три червы ...). Как следствие, мы должны полностью изменить наш результат.

  • Результатом программы является двумерная матрица строк. Это автоматически печатается Husk как единственная строка, построенная путем объединения строк матрицы с символами новой строки и ячейками с пробелами. Причина, по которой мы строим эту матрицу вместо того, чтобы использовать более простую w(объединить список слов с пробелами), заключается в том, что при использовании метода wопределения типов угадывается другая интерпретация для программы, которая дает другой результат.

Лео
источник
2

mIRCScript , 157 байт

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)

Загрузите в качестве псевдонима, а затем использовать: /c N. mIRC индексируется 1, поэтому деление по полу (//) на отрицательном значении ввода приводит от -1 до -4 по мере необходимости.

jaytea
источник
2

C (gcc) , 148 байтов

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

Попробуйте онлайн!

0 на основе.

gastropner
источник
Вы должны быть в состоянии сохранить 10 байтов, заменив их \0буквальными нулевыми байтами.
Caird Coneheringaahing
2

Haskell , 132 байта

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

Попробуйте онлайн!

Анонимная функция, использующая понимание списка для построения всех комбинаций масти и значения и внесения в результирующий список с помощью ввода.

Лео
источник
2

F #, 174 168 байт

Удалены лишние пробелы, как отметил Маниш Кунду. Благодарность!

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]

Попробуйте онлайн!

Я буду честен - я новичок в коде гольф, так что я не знаю, будет ли более уместным ответить с такой чистой функцией (с параметрами, но без ввода / вывода) или с работающим блоком кода с пользователем I / O.

Ciaran_McCarthy
источник
1
-4 байта , только удаляя ненужные пробелы
Маниш Кунду
Пробел полностью прошел мимо меня. Хорошо подмечено! Большое спасибо!
Ciaran_McCarthy
2

Октава , 155 153 151 150 байт

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

Попробуйте онлайн!

Это создает строку, начинающуюся с ' of 'и 's', затем все масти, за которыми следуют все ранги. Эта строка разделена запятыми на отдельные строки. Костюмы стоят перед строем, потому что это экономит байт при создании индексов. После этого мы индексируем его в квадратных скобках со следующими индексами:

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

который является рангом, сопровождаемым первым элементом ' of ', сопровождаемым иском, сопровождаемым 's'.

Наличие в 's'качестве части suit ( hearts,diamonds,spades,clubs) вместо отдельной строки точно такой же длины, но менее забавно.

Разделение на разделитель по умолчанию сэкономит 4 байта в strsplit-call, но пробелы вокруг ' of 'будут удалены, и их придется добавлять вручную, что будет стоить больше байтов.

Стьюи Гриффин
источник
2

V , 154 147 144 142 байт

-7 байт благодаря DJMcMayhem

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

Попробуйте онлайн!

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
источник
Вот сортировка ярлык: попробуйте онлайн! Всегда рад видеть кого-то нового использования V :)
DJMcMayhem
Вот несколько советов: 1) « == \+2)12dj == 13D
DJMcMayhem
Благодарность! :) А как мне пользоваться ò? Я попытался ò13j0Pòвместо 4ñ13j0Pñ, но это не закончилось
октуполь
Я на самом деле тоже это попробовал. Я не уверен, почему это не заканчивается. Может быть, это потому, что оно не достигает дна, потому что Pдобавляет новые строки? Кроме того, вы уверены, что вам нужно 0в этой части? Мне кажется, что это, вероятно, будет работать без
DJMcMayhem
О, это действительно так. А ты прав, то 0ненужно
октупол
2

C # , 219 207 202 197 байтов (0 проиндексировано)

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 и @raznagul

Принимает ввод int I, вычитает 1 для совпадения с индексированием массива строк 0 и выводит число на основе I mod 13 и масти на основе i / 14 + 13.

хорошо работает для моего второго гольф-кода, просто интересно, смогу ли я сократить его, используя LINQ или что-то еще.

Джеймс м
источник
2
До 200 , удалив i--; и вместо этого --i в первом индексе массива (перед уменьшением по модулю i уменьшается и остается таким же для следующего деления), удаляя «of» в массиве (это не нужно?) и удаляя скобки вокруг оператор return и добавление одного пробела между return и s [...
Ciaran_McCarthy
1
Задача позволяет вводить данные в индекс 0, чтобы их i++можно было полностью удалить. Преобразовав функцию в лямбду, я уменьшил ее до 178 байт .
Разнагул
2
Изначально я придумал ответ на 163 байта (см. Ссылку выше). Я решил не оставлять его, так как 1 к 1 порт @KevinCruijssen сек Java ответ будет еще короче. Может быть, позже я попытаюсь придумать ответ Linq просто ради его получения. Но я сомневаюсь, что это будет короче. Тем более, что Linq начинается с дефицита в 18 байт для using-Statement. В любом случае +1 от меня.
Разнагул
Спасибо Ciaran_McCarthy и разнагул за ваш вклад, теперь он уменьшен до 202, дайте мне знать, если вы видите что-нибудь еще, что может быть дополнительно сыграно в гольф
James m
1
У вас все еще есть лишнее "of"в массиве.
Разнагул
2

PowerShell , 207 192 182 174 165 163 161 157 байт

0-индексированные

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

Попробуйте онлайн!

4 байта сохранены благодаря AdmBorkBork в комментариях

Ник Вайс
источник
Вы можете унарничать -splitна пустом месте, чтобы сохранить 6 байтов -split'two three four five six seven eight nine ten jack queen king ace'и другой байт, используя встроенную замену вместо пола $_/13-replace'\..*'
AdmBorkBork
@AdmBorkBork Спасибо за советы! Как вы получаете 6 байтов от изменения -split? Я вижу только экономию в 3 байта. Кажется, все еще нужны скобки, поэтому я просто удаляю ',' и переупорядочиваю остальные.
Ник Вайс
Я не уверен, как я придумал 6, это действительно только экономия 3, лол.
AdmBorkBork
1

CJam , 114 байт

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

Попробуйте онлайн!

Zero-индексироваться. Вероятно будет побит языками со сжатием словаря, ну да ладно ...

Esolanging Fruit
источник
1

Желе , 61 байт

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

0 индексации. Попробуйте онлайн!

user202729
источник
“...“...»Ḳ€¤Œpị@j“ of наверное короче.
Джонатан Аллан
1

Haskell , 144 байта

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)

Попробуйте онлайн!

Это поражает все виды болевых точек Хаскелла.

totallyhuman
источник
1

Javascript 149 143 140 байт

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

-3 бит благодаря @ Рич Хичкок

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 байта, не разбивая второй массив, и индексируя его с помощью [_/13|0]. Например: ["hearts","diamonds","spades","clubs"][_/13|0]
Рик Хичкок,
Я не думаю, что вам нужно, a=так как ваша функция не является рекурсивной.
Оливер
1

Japt , 91 86 байт

0 индексированные.

Я использовал инструмент, написанный @Shaggy, для создания сжатых списков.

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

Попробуйте онлайн!

Объяснение:

Первая сжатая строка содержит значения карты, разделенные символом d. Вторая сжатая строка содержит ранги карт, разделенные символом k.

Эти символы выбирались с помощью инструмента Шегги, который генерирует строку, ограниченную символом, который оптимально сжимается с помощью shoco (сжатие, которое использует Japt). Это позволяет нам создать список значений карт и рангов.

Мы используем обратные метки, `чтобы распаковать эти строки, затем мы разделяем строку, используя q, а затем символ для разделения.

Как только у нас есть списки, мы отображаем значения карт, затем получаем индекс ввода. Важно отметить, что Japt оборачивает свои индексы, поэтому нам не нужно делить их на 13.

По каждому пункту мы перебираем ряды карт. Мы получаем индекс путем деления ввода на 13.

Как только у нас есть оба элемента, мы объединяем их " of ", что приводит к получению последней строки.

Оливер
источник