Дилер был неаккуратным и потерял счет, какие карты содержит его колода и какие карты отсутствуют, можете ли вы помочь ему / ей?
Полная колода состоит из 52 игральных карт, а именно:
Каждый цвет в колоде (сердца, бубны, пики, трефы) содержит:
- Числа [2 - 10]
- Джек
- Королева
- Король
- Туз
задача
Ваша программа будет читать содержимое колоды из STDIN, пока не будет прочитана новая строка. Вы можете предположить, что ввод будет в форме "nX nX nX nX" и т. Д., Где:
- n - любое число от [2 до 10] или «J», «Q», «K» или «A». (Вы можете использовать заглавные буквы только для нечисловых символов)
- X - любое из следующего: «H», «D», «S», «C» (вы можете использовать только заглавные буквы)
Где:
- 'J' = домкраты
- 'Q' = Королева
- 'K' = король
- 'A' = туз
И
- 'H' = сердца
- 'D' = бриллианты
- 'S' = пики
- 'C' = клубы
Вы можете предположить, что на входе не будет дубликатов.
Ваша программа должна затем распечатать отсутствующие карты в колоде в STDOUT таким же образом, как вход («nX nX nX»), или распечатать «Нет отсутствующих карт», если все 52 карты поставляются. Нет ограничений на порядок вывода карт.
Пример ввода:
9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S
Выход:
3H 4H 5H 6H 7H 10H JH QH KH 2D 3D 5D 6D 8D 9D 10D QD 2S 4S 5S 7S 8S 9S QS KS 3C 4C 5C 6C 10C JC QC HC
Удачного игры в гольф!
T
вместо10
?J
представляет10
, хотя?2 3 4 5 6 7 8 9 10 J Q K A
.J
представляет11
.J
- 10-я буква алфавита, но дело не в этом. :)Ответы:
Пакет Windows (CMD),
205204 байтаПеребирает костюмы и ранги, собирая полную колоду, затем удаляет входные карты. Сохранить 1 байт, если
T
разрешено вместо10
. Сохраните 11 байтов, если аргументы командной строки допустимы. Редактировать: 1 байт благодаря @ user202729.источник
/v
к CMD (+3 байта?), ЧтобыEnableDelayedExpansion
исключитьcall
в цикле for. / Кажется, между вами(%c%)
иdo
?Python,
147146145138131129127125120 байтПолучает все возможные карты как набор и вычитает входные карты.
-1 байт благодаря mbomb007, указывающему на дополнительный пробел в моем коде.
-1 байт благодаря mbomb007 для указывая некоторые игры в гольф , которые могут быть сделаны с Python 2 (-5 байт и +4 байта
raw_
вraw_input
)-7 байт, переключаясь на основе набора и набора вычитанием вместо списковых
-7 байт благодаря ValueInk за указание на то, что мне не нужны
list
наборы-2 байта, спасибо Datastream за то, что он указал, что простая запись всех значений более эффективна, чем та странная вещь, которую я имел ранее
-2 байта, благодаря ValueInk за указание что наборы могут принимать генераторы, поэтому мне не нужно помещать его в список понимания
-2 байта спасибо Datastream за то, что он указал, что я могу сыграть в гольф еще больше, если я снова переключусь на Python 3 ... (+2 для паренсов после печати, -4 для
raw_
)-5 байтов благодаря Lulhum и мне за указание из-за того, что переключение обратно на Python 2 (!!!) может помочь мне сохранить байты (снова используя диапазон, используя backticks вместо
str(
, и +4 из-заraw_
)источник
`d`
вместо,str(d)
если вы используете Python 2, в дополнение к удалению скобок дляprint
.for y in 'HDSC'
также работает для получения всех персонажей. (Вам все еще нужнаlist('JQKA')
другая часть.)'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()
Может сэкономить несколько байтов вместо ваших манипуляций[
dfor d in range(2,11)]+list('JQKA')
.1
не нужно добавлять. Кроме того, вы можете удалить внешние скобки для вашего первого понимания списка, потому чтоset
конструктор прекрасно воспринимает объекты генератора.05AB1E , 39 байт
Попробуйте онлайн!
объяснение
источник
CJam ,
4947 байтПопробуйте онлайн!
объяснение
источник
Желе , 39 байт
Попробуйте онлайн!
Как?
источник
C #, 343 байта
Первый раз выкладывал один из моих гольфов, но не очень хороший соперник. Я уверен, что могу уменьшить это больше.
Идея, лежащая в основе этого, заключается в разреженном массиве, хранящем вхождения карточек, с индексами, рассчитанными по значениям ASCII различных значений и мастей, умноженных друг на друга (например, туз пик (AS) будет храниться в области по индексу (65 *) 83 = 5395)). Таким образом, каждый тип карты получает уникальный индекс, который можно проверить позже на наличие в массиве «карта».
источник
PowerShell ,
114111110 байтПопробуйте онлайн!
Принимает ввод
$n
в виде строки, разделенной пробелом или символом новой строки. Создает массив из диапазона,2..10
объединенного сJQKA
(индексируется,[0..3]
чтобы сделать егоchar
массивом). Этот массив подается в цикл,|%{}
который устанавливает хелпер, а$i
затем перебирает масти для объединения результатов с$i$_
. В конце этого цикла у нас есть массив строк вроде("2C", "2S", "2H", ... "AH", "AD")
. Этот массив подается вWhere-Object
(|?{}
) с фильтром в качестве тех элементов,$_
которые регулярного выражения-notmatch
ввода$n
. Результат этой фильтрации сохраняется в$a
.Затем мы используем псевдо-троичный,
( , )[]
чтобы выбрать, выводим ли мы'No missing cards'
или$a
, основываясь на том,!!$a
превращается ли в логическое значение$false
или$true
. Если$a
пусто (то есть все карты в колоде находится на входе), то!!$a
есть0
, поэтому"No missing cards"
выбран. Наоборот для$a
того, чтобы быть выбранным. В любом случае, это остается на конвейере, и вывод неявный.источник
Bash + coreutils, 89
Ввод / вывод в виде списка с разделителями новой строки.
объяснение
sort
читает вводимые через STDIN вводы, разделенные символом новой строки, и сортирует ихcomm
printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}
это скобка-расширение для генерации полной колоды карт.printf
Печатает каждую карту на своей собственной линии. Порядок задан так, что результат такой же, как если бы он был переданsort
comm
сравнивает полную колоду с отсортированным входом и выводит разницу.-3
подавляет вывод столбца 3 (общие)comm
по каналуgrep .
. Если не было выходных данныхcomm
(т. Е. Все карты были на входе), то предложение||
«или» выводит требуемое сообщение. В противном случаеgrep .
совпадает со всеми строками, выводимыми изcomm
.Попробуйте онлайн .
источник
Python 2 ,
104,93,130, 114 байтПопробуйте онлайн!
источник
list('23456789JQKA')+['10']
Умна. Я ломал голову над лучшим способом вычленить10
из списка одиночных символов в другом ответе на python, но это прекрасно работает.Рубин, 108 + 1 = 109 байт
Использует
-p
флаг.источник
PHP, 143 байта
источник
sed , 157 + 1 (
-r
флаг) =170158 байтПопробуйте онлайн!
Это генерирует все возможные карты, а затем удаляет каждую карту на входе из сгенерированных карт.
источник
C # , 282 байта
Golfed
Ungolfed
Ungolfed читабельный
Полный код
релизы
282 bytes
- Исходное решение.Примечания
Нечего добавить
источник
JavaScript (ES6),
117114111 байтЭто использует тот факт, что неопределенные записи в массиве, сгенерированном посредством,
map()
приводятся к пустым строкам, когдаjoin()
'd.демонстрация
Показать фрагмент кода
источник
Сетчатка , 76 байт
Ввод / вывод - это список разделенных пробелами карт. Выход имеет ведущий пробел.
Попробуйте онлайн!
объяснение
Большая часть кода посвящена составлению полного списка карт, которые должны быть в колоде:
Сначала мы добавляем к вводу новую строку со всеми возможными значениями карт, затем для каждого символа этой строки (или пары символов
10
) мы строим список всех возможных мастей этой карты.Это этап дедупликации, он разбивает строку на куски, состоящие из пробела и нескольких непробелов, и сохраняет только одно вхождение каждого чанка. Модификатор
r
заставляет это работать справа налево, сохраняя затем последнее вхождение каждого чанка.Мы оставляем только первую строчку, в которой сейчас находятся недостающие карточки.
Если результат пустой, мы заменяем его на «Нет пропущенных карточек»
источник
Python 3, 106 байт
Комбинация двух предыдущих ответов на python, смешанных с некоторыми строками, распаковывающими махинации.
источник
Юлия , 116 байт
Попробуйте онлайн!
Очень похоже на решение Python Кайла Гуллиона. Setdiff вместо - и лямбда для проверки пустой строки, тем не менее, усугубляют ситуацию.
источник
Japt, 39 байт
Попытайся
источник
Tcl ,
270228 символов(Сокращено с некоторой помощью от Wît Wisarhd)
Попробуйте онлайн!
Объяснение:
Эта реализация создает словарь, состоящий из логического флага для каждой из карт, представленных декартовым произведением HDSC и 2-через-A. Он читает строку из stdin, которая, если задана как спецификация, как требуется, на самом деле является правильно сформированным списком Tcl. При чтении каждой карточки в словарь этой карточки вводится логическое значение true.
В конце синтаксический анализатор просматривает словарь и добавляет любую карточку, которая не имеет истины в словаре, в список отсутствующих карточек. Если длина списка отсутствующих карточек равна нулю, выведите «Нет отсутствующих карточек», в противном случае выведите список отсутствующих карточек.
источник
PHP , 138 байт
Побежал с
-n
и-d error_reporting=0
Я повторно использую какой-то код из старого сообщения, которое я сделал и которое требовало создать колоду карт
Код
Попробуйте онлайн!
объяснение
источник
$argv
может так работать, спасибо @gwaughC # (.NET Core) , 197 байт
Без LINQ.
Попробуйте онлайн!
источник
Perl 6 , 73 байта
Попробуйте онлайн!
Некоторые довольно просто устанавливают вычитание между колодой карт и вводом.
источник
Python 3 , 102 байта
Попробуйте онлайн!
источник