проблема
Вы застряли в хижине посреди леса, и только старый скрэббл настроен развлекать себя. При осмотре вы видите, что буквы скрэббл так изношены, что видны только точки для каждой буквы.
Тем не менее, вы решили сыграть в игру. Вы достаете из сумки семь букв и кладете их на свой поднос, ваша задача - определить, какими могут быть эти буквы.
Таким образом, обычно, учитывая список точек, преобразуйте его в любую возможную строку или список букв.
Плитка Эрудита и Распределения
- 2 пустых фишки (0 очков)
- 1 балл: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 балла: D × 4, G × 3
- 3 балла: B × 2, C × 2, M × 2, P × 2
- 4 балла: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 баллов: К × 1
- 8 очков: J × 1, X × 1
- 10 баллов: Q × 1, Z × 1
Таким образом, если у вас есть список очков, [10,10,8,5,1,1,1]
то "QZJKEEE"
он будет действительным, но "QQJKEEE"
не будет действительным (поскольку в сумке только 1 Q)
Особые правила проблемы
- Вы можете предположить, что все входные данные верны и что всегда будет 7 плиток (то есть это не будет список из семи плиток с 10 точками и не будет 9 плиток)
- Вы можете предположить, что никакие плитки не были ранее извлечены из сумки (таким образом, распределение является стандартным распределением английских плиток, как определено выше)
- Вам не нужно генерировать правильное слово, только правильную строку букв.
- Порядок вашей строки не имеет значения, если для каждой плитки есть соответствующая буква.
- Очки основаны на стандартных точках английского скрэббл-тайла, как определено выше.
- Вы можете выводить в верхнем или нижнем регистре, для пустой плитки вы можете вывести либо пробел, либо знак подчеркивания '_'
- Ваш ответ может выводиться как любое разумное представление плиток, таких как List, String, Array или Sequence
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи
Очевидно, что поскольку вы можете вывести любое возможное значение, трудно определить строгие тестовые случаи.
Некоторые случаи с возможным допустимым возвращаемым значением:
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
Некоторые случаи с недопустимым возвращаемым значением:
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
[2,2,2,2,2,2,2]
(единственный случай, когда важно начать с «D
вместо»,G
если используется метод езды на велосипеде)Ответы:
JavaScript (ES6), 72 байта
Более короткий вариант, предложенный @supercat
Попробуйте онлайн!
JavaScript (ES6),
137 ... 84 78 7776 байтСохранено 10 байт с помощью метода циклирования Нила
Возвращает список плиток. Используется
_
для пустых плиток.Попробуйте онлайн!
Как?
Для каждого количества точек мы циклически проходим группу из ровно 4 плиток, начиная со второй плитки каждой группы (это важно для
G
vsD
):Все эти группы хранятся в виде одной строки из 31 символа:
NB : нам не нужно хранить финал
"_"
в"_XJ_"
, так как он никогда не будет доступен в любом случае.Количество точекN преобразуется в правильный индекс яN в эту строку с помощью:
источник
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Короче, «почти» версия есть,a=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
но для этого подхода потребуется компактный способ сопоставления значений 8 и 10 с 11 и 12, плюс небольшая корректировка строки, чтобы исправить проблему «один на один».'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
со строкой поиска, состоящей всего из 22 символов. Однако полный код по-прежнему на 2 байта длиннее вашего решения.Древесный уголь , 33 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Желе ,
31 30 2726 байтМонадическая ссылка, принимающая список целых чисел, который выдает список символов.
- путаница моего предыдущего, ниже, и мое улучшение Ника Кеннеди
Попробуйте онлайн!
Вывод не дается в том же порядке, что и ввод (это разрешено).
Использование 2-х моих собственных дополнений к языку в ответе случается не часто! (
ṃ
иɓ
здесь).Как?
предыдущая @ 30
Монадическая ссылка, принимающая список целых чисел, который выдает список символов.
Попробуйте онлайн!
Вывод этого также является смешанным (это разрешено).
Как?
источник
' NWGMZQ'
после многомерного индекса в это будет подвиг без каких-либоW
в строке. ;)Pyth -
9286838180756052494236 байтПеребирает ввод, выталкивая доступные буквы. У меня есть только одно письмо, которое вместе дает 7 для этой категории баллов. Теперь используем упакованное кодирование строк.
Кстати, это оригинальная буквенная строка перед кодированием:
"_ E DG BCMP FHVW K JX QZ"
.Попробуйте онлайн .
источник
Perl 5 , 71 байт
Попробуйте онлайн!
источник
05AB1E ,
70523938292625 байт-18 байт благодаря @ExpiredData .
-13 байт, используя тот же продлить до размера 7 из @Maltysen Pyth ответа «s .
-9 байт, создав порт ответа @JonathanAllan 's Jelly , так что убедитесь, что проголосовали за него!
-3 байта благодаря @Emigna .
Результатом является список символов и использование строчных букв и пробелов.
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•3Oû}α›ηö‡.ÝŽ{•
это так"endgmpfykkzzzzjxzzqz "
.Предыдущие 38 байт ответа:
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжимать строки, не являющуюся частью словаря? ), Чтобы понять, почему
.•Mñ&Àû«ì{₆v*Å+µ-•
это так"e dg bcmp fhvw k jx qz"
.источник
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
вместо7F
иy
вместоI{Nè
.C (gcc) , 110 байтов
Попробуйте онлайн!
Использует
_
массив в качестве индекса в статической строке"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
Динамически с исключениями для 0 и 1.Аргумент представляет собой
-1
-определенный массив баллов, который преобразуется на месте в-1
-определенную строку.источник
C # (интерактивный компилятор Visual C #) ,
10490 байтПопробуйте онлайн!
источник
Желе ,
3432 байтаПопробуйте онлайн!
Я не видел, чтобы был короткий ответ Желе, когда я писал это, и это использует другой подход, поэтому я подумал, что стоит также опубликовать.
Спасибо @JonathanAllan за сохранение 2 байта!
источник
ṃ
вы можете сохранить 2 байтаPython 3 ,
178142135127112117 байтПопробуйте онлайн!
-1 байт благодаря cdlane
исправить благодаря mathmandan
источник
d=list(map(list,"...".split('_')))
сохранить еще один байтf
вероятно, не нуждается в названии, поэтому вы можете сохранить 2 байта. Однако онf
использует записиd
, поэтому я не уверен, что это соответствует консенсусному требованию о том, что «функцию необходимо многократно использовать произвольно, без ... перезапуска ... любого другого кода, сопровождающего представление». (Например, запускf([10,0,10,5,8,8,0])
более одного раза приведет к ошибке.) Пожалуйста, ознакомьтесь с мета-обсуждением здесь: codegolf.meta.stackexchange.com/a/7615/36885Python 2 , 102 байта (или, может, 95?)
(Также хорошо для Python 3.)
Попробуйте онлайн!
Я не думаю, что было бы приемлемо следующее:
Эта вторая версия выдаст результат как
['__', 'JX', 'QZ', 'K']
. Таким образом, буквы будут правильными, но они будут собраны по баллам. (Если бы это было приемлемо, это спасло бы 7 байтов.)источник
PHP , 101 байт
В качестве отдельной программы ввод через командную строку:
Попробуйте онлайн!
Или 112 байт как функция
Попробуйте онлайн!
Выход
источник
Рубин ,
7776 байтПопробуйте онлайн!
источник
Perl 6 , 63 байта
Попробуйте онлайн!
По сути, он сохраняет поиск смещений для каждого значения плитки и при необходимости увеличивает их, используя смещение, чтобы извлечь символ из доступного набора.
источник