Введение
Давным-давно, когда я использовал для кодирования карточных игр обычные игральные карты, я обычно указывал номер для каждой карты и вызывал функцию с некоторым номером, чтобы получить карту. Это несколько вдохновило меня принять этот вызов.
Таким образом, для людей, не подозревающих об игральных картах, колода карт состоит из 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
счет
Это код-гольф , поэтому выигрывает самый короткий код.
источник
two\s\s\sof\shearts
где\s
обозначает пробел? (Обратите внимание на два лишних пробела.)Ответы:
Python 3 ,
11590 байтБезымянная функция, возвращающая строку в верхнем регистре.
Попробуйте онлайн!
Как?
У символов Юникода есть имена. Названия некоторых из них похожи на «ИГРАЮЩАЯ КАРТА ДВА СПАДА», поэтому мы можем получить символы символа Юникод, представляющие требуемую карту, и убрать первые 13 символов, чтобы получить наш вывод.
Интересующие вас символы Юникода находятся внутри блока примерно так:
Где
x
не те символы, которые нам нужны (четыре вC
столбце - «рыцари»; триF
- «джокеры»; один0
- общий; остальные - зарезервированные символы).Таким образом, мы можем добавить некоторое значение к 0x1F0A1 = 127137 (As), чтобы найти нужную карту.
Значение, которое нужно добавить, осложняется только тремя вещами:
Использование опции одноиндексирования позволяет использовать отрицательное целочисленное деление для индексации в массив построчных смещений для переупорядочения мастей с
[6,0,4,2][-n//13]*8+
(эффективно[48,0,32,16][-n//13]
), затем мы можем также разместить тузов в правильных местах с помощьюn%13+
и затем избежать Рыцари в колоннеC
сn%13//11+
(эффективно(n%13>10)+
).источник
Perl6 / Rakudo 70 байтов
Индекс 0
Используя
perl6 -pe
, и без сжатия словаря:Он просто ищет карту в Unicode (начиная с туза), запрашивает имя и использует его. Это аналогичный маршрут (хотя я не знал его в то время!) К ответу Джонатана Эйткена на Python - я только индексирую все 4 туза, а не 4 смещения от туза пик, и умножаю на 1,091, чтобы получить индекс отойти от входа Рыцаря в Юникоде.
Посмотреть все выходные данные (для входных значений от 0 до 51) https://glot.io/snippets/ez5v2gkx83
Отредактировано, чтобы справиться с рыцарями в колоде Юникод, потому что Юникод.
Perl6 ♥ Unicode
источник
05AB1E , 54 байта
0 индексированные
Попробуйте онлайн!
объяснение
источник
“»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»
- 54 байта!Python 2 ,
167148 байтZero-индексироваться.
Попробуйте онлайн!
РЕДАКТИРОВАТЬ: Bubbler сделал большой вывод, используя метод разделения (и предоставляя более короткий ответ). Во втором блоке использование split () дает тот же счетчик байтов.
источник
[n%13::13]
чего-то, но не повезло.s
; Кснор указал на это в чате.R 154 байта
Попробуйте онлайн!
Принимает ввод (1-индексированный) из STDIN и с помощью
source(...,echo=T)
распечатает результат на консоль.Это не очень красиво, НО это на 2 байта короче, чем лучшее решение, которое я мог бы использовать
outer
(представлен ниже), так что пусть это будет напоминанием для изучения другого подхода!R 156 байт
Попробуйте онлайн!
По сути, то же самое, что и выше; однако,
outer
будет делать утилизации должным образом, но необходимость набораsep=" of "
дляpaste
сделал это просто волосы дольше.источник
Эмоджикод , 202 байта
0 проиндексировано. Попробуйте онлайн!
Пояснение :
источник
Excel, 156 байт
Открытки от 0-51. К сожалению, в Excel нет функции для преобразования
1
в"one"
...Использование
TRIM
иMID
короче, чем использованиеCHOOSE
для номиналов, но дольше, чем использованиеCHOOSE
для костюма.источник
MID()
и сочетая слова!Java 8, 141 байт
Ввод 0-индексирован.
Объяснение:
Попробуйте онлайн.
источник
Котлин ,
154152140 байтПопробуйте онлайн!
Обновлено для использования только лямбда-выражения.
источник
JavaScript ES6,
124118 байт, 0-индексВерсия Base64
источник
Stax ,
585756 байтЗапустите и отладьте его
Вот прокомментированное неоправданное представление той же программы. Он использует сжатые литералы Stax интенсивно. Вход 0 индексируется. Это алгоритм Эминьи 05AB1E.
Запустите этот
источник
Баш, 133 байта
Выбор использовать 0 на основе предоставленной опции, поддерживая 0 (два черва) до 51 (туз треф)
источник
Шелуха , 52 байта
Попробуйте онлайн!
Я всегда рад показать систему сжатия строк Husk: D
объяснение
Большая часть программы (начиная с этого
¨
момента), очевидно, представляет собой сжатую строку. В несжатом виде он превращается в:Программа тогда:
Осталось объяснить пару вещей:
Мы строим карты с мастями до значений из-за того, как
Π
работает декартово произведение: если бы мы делали это наоборот, список карт был бы упорядочен по значению (то есть два черва, два бриллианта, два пика, два клубы, три червы ...). Как следствие, мы должны полностью изменить наш результат.Результатом программы является двумерная матрица строк. Это автоматически печатается Husk как единственная строка, построенная путем объединения строк матрицы с символами новой строки и ячейками с пробелами. Причина, по которой мы строим эту матрицу вместо того, чтобы использовать более простую
w
(объединить список слов с пробелами), заключается в том, что при использовании методаw
определения типов угадывается другая интерпретация для программы, которая дает другой результат.источник
mIRCScript , 157 байт
Загрузите в качестве псевдонима, а затем использовать:
/c N
. mIRC индексируется 1, поэтому деление по полу (//) на отрицательном значении ввода приводит от -1 до -4 по мере необходимости.источник
C (gcc) , 148 байтов
Попробуйте онлайн!
0 на основе.
источник
\0
буквальными нулевыми байтами.Haskell , 132 байта
Попробуйте онлайн!
Анонимная функция, использующая понимание списка для построения всех комбинаций масти и значения и внесения в результирующий список с помощью ввода.
источник
F #,
174168 байтУдалены лишние пробелы, как отметил Маниш Кунду. Благодарность!
Попробуйте онлайн!
Я буду честен - я новичок в коде гольф, так что я не знаю, будет ли более уместным ответить с такой чистой функцией (с параметрами, но без ввода / вывода) или с работающим блоком кода с пользователем I / O.
источник
Октава ,
155153151150 байтПопробуйте онлайн!
Это создает строку, начинающуюся с
' of '
и's'
, затем все масти, за которыми следуют все ранги. Эта строка разделена запятыми на отдельные строки. Костюмы стоят перед строем, потому что это экономит байт при создании индексов. После этого мы индексируем его в квадратных скобках со следующими индексами:который является рангом, сопровождаемым первым элементом
' of '
, сопровождаемым иском, сопровождаемым's'
.Наличие в
's'
качестве части suit (hearts,diamonds,spades,clubs
) вместо отдельной строки точно такой же длины, но менее забавно.Разделение на разделитель по умолчанию
сэкономит 4 байта в
strsplit
-call, но пробелы вокруг' of '
будут удалены, и их придется добавлять вручную, что будет стоить больше байтов.источник
V ,
154147144142 байт-7 байт благодаря DJMcMayhem
Попробуйте онлайн!
HexDump:
источник
« == \+
2)12dj == 13D
ò
? Я попыталсяò13j0Pò
вместо4ñ13j0Pñ
, но это не закончилосьP
добавляет новые строки? Кроме того, вы уверены, что вам нужно0
в этой части? Мне кажется, что это, вероятно, будет работать без0
ненужноC # ,
219207202197 байтов (0 проиндексировано)благодаря вкладу @Ciaran_McCarthy и @raznagul
Принимает ввод int I, вычитает 1 для совпадения с индексированием массива строк 0 и выводит число на основе I mod 13 и масти на основе i / 14 + 13.
хорошо работает для моего второго гольф-кода, просто интересно, смогу ли я сократить его, используя LINQ или что-то еще.
источник
i++
можно было полностью удалить. Преобразовав функцию в лямбду, я уменьшил ее до 178 байт .using
-Statement. В любом случае +1 от меня."of"
в массиве.PowerShell ,
207192182174165163161157 байт0-индексированные
Попробуйте онлайн!
4 байта сохранены благодаря AdmBorkBork в комментариях
источник
-split
на пустом месте, чтобы сохранить 6 байтов-split'two three four five six seven eight nine ten jack queen king ace'
и другой байт, используя встроенную замену вместо пола$_/13-replace'\..*'
CJam , 114 байт
Попробуйте онлайн!
Zero-индексироваться. Вероятно будет побит языками со сжатием словаря, ну да ладно ...
источник
Желе , 61 байт
0 индексации. Попробуйте онлайн!
источник
“...“...»Ḳ€¤Œpị@j“ of
наверное короче.Юлия 0,6 , 156 байт
Попробуйте онлайн!
-2 байта благодаря @Stewie Griffin
источник
Haskell , 144 байта
Попробуйте онлайн!
Это поражает все виды болевых точек Хаскелла.
источник
SOGL V0.12 , 53 байта
Попробуй здесь!
источник
Javascript
149143140 байт-3 бит благодаря @ Рич Хичкок
источник
[_/13|0]
. Например:["hearts","diamonds","spades","clubs"][_/13|0]
a=
так как ваша функция не является рекурсивной.Perl 5
-p
, 119 байт0 на основе
Попробуйте онлайн!
источник
Japt ,
9186 байт0 индексированные.
Я использовал инструмент, написанный @Shaggy, для создания сжатых списков.
Попробуйте онлайн!
Объяснение:
Первая сжатая строка содержит значения карты, разделенные символом
d
. Вторая сжатая строка содержит ранги карт, разделенные символомk
.Эти символы выбирались с помощью инструмента Шегги, который генерирует строку, ограниченную символом, который оптимально сжимается с помощью shoco (сжатие, которое использует Japt). Это позволяет нам создать список значений карт и рангов.
Мы используем обратные метки,
`
чтобы распаковать эти строки, затем мы разделяем строку, используяq
, а затем символ для разделения.Как только у нас есть списки, мы отображаем значения карт, затем получаем индекс ввода. Важно отметить, что Japt оборачивает свои индексы, поэтому нам не нужно делить их на 13.
По каждому пункту мы перебираем ряды карт. Мы получаем индекс путем деления ввода на 13.
Как только у нас есть оба элемента, мы объединяем их
" of "
, что приводит к получению последней строки.источник
Желе ,
5855 байтПопробуйте онлайн!
источник