Казино использует следующую колоду карт. ( *
является одним из карточных мастей D
,S
, C
или H
.)
_________ _________ _________ _________ _________
| | | | | | | | | |
| | | | | * | | * * | | * * |
| | | * | | | | | | |
| * | | | | * | | | | * |
| | | * | | | | | | |
| | | | | * | | * * | | * * |
|_________| |_________| |_________| |_________| |_________|
_________ _________ _________ _________ _________
| | | | | | | | | |
| * * | | * * | | * * | | * * | | * * |
| | | | | * * | | * * | | * * |
| * * | | * * * | | | | * | | * * |
| | | | | * * | | * * | | * * |
| * * | | * * | | * * | | * * | | * * |
|_________| |_________| |_________| |_________| |_________|
_________ _________ _________
| | | | | |
| * * | | * * | | * * * |
| * * | | * * * | | * * |
| * * * | | * * | | * * * |
| * * | | * * * | | * * |
| * * | | * * | | * * * |
|_________| |_________| |_________|
После каждой ночи старые колоды сбрасывают и режут пополам, чтобы избежать повторного использования. В результате в казино есть большая комната, полная разрезанных половинок карт.
К сожалению, экономика плохая, а у казино финансовые проблемы. Кажется, что наиболее разумным способом сэкономить деньги является утилизация, поэтому владельцы казино решили склеить старые карты вместе. Поэтому они нанимают команду для создания машины, которая сделает это.
Вы являетесь частью команды, и ваша задача - помочь в идентификации карты.
Напишите программу или функцию, которая возьмет художественное изображение ASCII половины карты в форме строки и вернет строку с той картой, в которой она находится.
Ввод - строка 11x5, плюс символы разрыва строки (CR, LF или CRLF, вам нужна только одна). При необходимости вы можете использовать конечные пробелы в конце каждой строки ввода. На входе не будет никаких недопустимых символов (кроме_|-HSCD
пробелов и переносов строк).
Половина карты будет выглядеть так:
_________
| |
| H H |
| H H H |
---H---H---
которая должна быть идентифицирована как Королева Червей:
H12
Казино имеет ограниченный бюджет, так что это код гольф: выигрывает самая короткая программа.
источник
H 12
?Ответы:
CJam,
16151312 байтПроверьте это здесь.
объяснение
Основная идея состоит в том, чтобы манипулировать строкой таким образом, чтобы мы могли сделать так, чтобы встроенное в CJam кодирование длин серий работало для нас.
Давайте рассмотрим пример (один из вопроса). Входная строка
Мы повторяем это дважды:
И удалите последнюю строку:
Затем мы сортируем эту строку. Теперь у него будет несколько новых строк в начале, а затем это (сокращено на несколько пробелов, чтобы избежать горизонтальной полосы прокрутки):
Хотя символ масти будет меняться, это всегда будет заглавная буква, найденная в четвертом прогоне отсортированной строки (с учетом новой строки). Когда мы кодируем длину строки, мы получаем
Так что все, что нам нужно сделать, это выбрать четвертый элемент и обратить его вспять.
Вот разбивка фактического кода:
источник
Pyth (последняя версия), 16 байт
Попробуйте онлайн: Pyth Compiler / Executor
Объяснение:
Pyth 4.0, 13 байт
У Пита была сборка в кодировке длин серий. Но только на короткое время. Если кто-то хочет попробовать это: клонируйте репозиторий Pyth и оформите коммит 6a6dccd.
Эта программа работает почти так же, как и решение Martin's CJam.
источник
CJam, 22 байта
Глядя на другие варианты игры в гольф здесь. Вот как это работает:
Попробуйте онлайн здесь
источник
Python 2,
806866 байтПопробуй здесь
Дублируйте ввод, найдите все буквы во всех за исключением последней строки (первые две пары символов в последней строке не могут быть буквами), затем напечатайте первую букву и сколько.
вход :
' _________\n| |\n| H H |\n| H H H |\n---H---H---'
Выход :
H12
Предыдущая версия, которая использует регулярные выражения (68):
Спасибо Sp3000 за помощь в гольфе.
источник
i=input()*2;s="CDSH";r=[i[:-9].count(x)for x in s];n=sum(r);print s[r.index(n)]+`n`
APL, 39 байт
Я уверен, что это можно сделать намного короче, но это только начало.
Это создает именованную монадическую функцию, которая принимает входную строку и возвращает строку, содержащую масть и значение карты. Вы можете попробовать это онлайн !
Объяснение:
Предложения приветствуются как всегда!
источник
(⊃,≢)'HDCS'∩⍨¯11↓,⍨
?5⌷{⍺,≢⍵}⌸¯11↓,⍨⍞
J, 26 байт
Использование:
Чтение кода слева направо:
4{~.
).+/
) число, которое встречается в общем количестве символов на входе ([
) и на входе без последних 9 символов (_9}.[
).]
) со строковым представлением результирующей суммы (":
).источник
Perl, 75 байт
Неуправляемая версия
источник
Юлия, 58 байт
Это создает безымянную функцию, которая принимает строку в качестве входных данных и возвращает масть и стоимость карты. Чтобы назвать его, дайте ему имя, например
f=s->(...)
.Ungolfed + объяснение:
Предложения приветствуются как всегда!
источник
Bash + coreutils, 73
источник