421 - довольно популярная игра в кости во Франции и некоторых других европейских странах. Это в основном играется в барах и пабах, чтобы определить, кто собирается купить следующий раунд напитков. Полная игра обычно проводится в два раунда с токенами, от которых пытается избавиться каждый игрок, но здесь это не имеет значения. ( Википедия на французском.)
В игре используются 3 стандартных кубика.
задача
Ваша задача состоит в том, чтобы отсортировать непустой список отличных бросков с 3 кубиками [X, Y, Z] от наивысшего к низшему, применяя правила подсчета очков в этой игре.
Базовая оценка
- 4,2,1 - максимально возможная комбинация. В зависимости от правил он может набрать 8, 10 или 11 баллов. Поскольку мы сортируем броски, а не подсчитываем баллы, точное значение не имеет значения.
- Три туза: 1,1,1 - вторая по величине комбинация и набирает 7 очков.
- Two-Aces: X, 1,1 (где X от 2 до 6) набирает X очков.
- Три в своем роде: X, X, X (где X от 2 до 6) баллы X очков.
- Стриты: Х, Х + 1, Х + 2, очки 2 очка.
- Все остальные броски дают 1 очко.
Урегулирование галстуков
Когда два броска дают одинаковое количество очков, применяются следующие правила:
- Два туза лучше, чем тройка. Пример: 5,1,1 ударов 5,5,5 .
- Трехсторонняя 2,2,2 лучше, чем стрит. Пример: 2,2,2 ударов 4,5,6 .
- Стриты упорядочены от низшего к высшему. Пример: 4,5,6 ударов 2,3,4 .
- Все остальные броски рассчитываются путем сортировки игральных костей по возрастанию. Пример: 6,5,2 ударов 6,4,3 . (Следовательно, минимально возможная комбинация в игре - 2,2,1 .)
Ниже приведены 56 возможных различных рулонов, упорядоченных по возрастанию:
421 111 611 666 511 555 411 444 311 333 211 222 654 543 432 321
665 664 663 662 661 655 653 652 651 644 643 642 641 633 632 631
622 621 554 553 552 551 544 542 541 533 532 531 522 521 443 442
441 433 431 422 332 331 322 221
Правила вызова
- Вы можете брать броски в любом разумном формате, таком как список списков
[[3,2,1],[4,2,1]]
, список строк["321","421"]
, список целых чисел[321,421]
и т. Д. Однако каждый кубик должен быть четко идентифицирован со значением от 1 до 6 . - Для каждого броска вы можете предположить, что кости отсортированы либо по убыванию, либо по убыванию, либо по убыванию, если это не противоречит. Пожалуйста, укажите в своем ответе, какой порядок вы ожидаете, если таковой имеется.
- Самый короткий ответ в байтах побеждает!
Контрольные примеры
Используя списки строк с кубиками, отсортированными по возрастанию:
входные
[ "321", "654" ]
[ "222", "321", "211" ]
[ "333", "311", "331", "111" ]
[ "111", "222", "333", "444" ]
[ "321", "421", "521", "621" ]
[ "422", "221", "442", "421", "222" ]
[ "222", "111", "421", "211", "651", "652", "543" ]
Ожидаемые результаты
[ "654", "321" ]
[ "211", "222", "321" ]
[ "111", "311", "333", "331" ]
[ "111", "444", "333", "222" ]
[ "421", "321", "621", "521" ]
[ "421", "222", "442", "422", "221" ]
[ "421", "111", "211", "222", "543", "652", "651" ]
012
вместо123
)?Ответы:
Python , 93 байта
Попробуйте онлайн!
источник
sort
методом.Сетчатка 0.8.2 , 67 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение: Числовой ключ сортировки генерируется следующим образом:
источник
Желе ,
3734 байтаМонадическая ссылка, принимающая список списков бросков костей (каждый отсортированный по убыванию), который возвращает отсортированные броски по убыванию.
Попробуйте онлайн! Или посмотрите набор тестов ... или попробуйте все рулоны, отсортированные лексикографически
Как?
Этот метод создает список всех рулонов от высшего к низшему *, заменяя
[4,2,1]
с0
(недопустимого входного рулона), для того , чтобы ранга каждый рулон с использованием первого индекса-желе в атоме,i
.* Список также включает повторы и избыточные записи, которые не влияют на поведение:
источник
R , 73 байта
Попробуйте онлайн!
421 ... 221
)x % 37
от деления вместо111
Пояснение:
Для каждого из чисел 5 ключей вычисляются и используются иерархически для сортировки массива:
источник
05AB1E ,
764845 байтЭто оказалось намного дольше, чем ожидалось, но по крайней мере это легко реализовать. Посмотрим, смогу ли я найти лучшее решение ..Составил список вручную, но все же немного долго.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Вот фактический список, который генерирует первая часть кода:
Попробуйте онлайн.
Как вы можете видеть, он содержит пустые элементы; числа как
765
или210
; и числа в диапазоне[216, 112]
. Но мы все можем их игнорировать, потому что элементы, которые мы хотим отсортировать, находятся в правильном порядке.Оригинальное 76-байтовое решение:
Попробуйте онлайн
или проверьте все тесты(нет набора тестов, потому что все еще есть ошибка с сортировкой со сжатыми числами, которая не видит закрывающую скобку, чтобы остановить сортировку ).Объяснение:
Пояснение
•X˜„Éε´õñ€9Ú ù?ä0₅9úd5àPÎøŒccuĆYÑ,o¾eíË¿¼À8@gID=vÆOΣxjF¨O‡J₃^εR™\èv•667в
:Все, что
•
находится между ними, представляет собой сжатое число , которое генерируется следующей программой:Попробуйте онлайн.
Z>
: Взять максимум из списка + 1 (667
в этом случае)β
: Преобразовать список из базы667
в одно число255B
: И преобразовать это единственное число в основание255
(используя кодовую страницу 05AB1E), чтобы у нас было сжатое число .Используя
667в
его, преобразует этот сжатый номер обратно в исходный список.источник
JavaScript (ES7), 96 байт
Сортирует рулоны, придерживаясь правил скоринга. Ожидается массив строк с отдельными бросками в порядке убывания значения, например
["654"]
Попробуйте онлайн!
объяснение
Категории рулонов повышаются до следующих показателей:
Ungolfed
Мысленная распаковка условных чеков вызывает у меня головную боль, и я уверен, что это как-то может быть продолжено ...
источник
Javascript, 101 символ, 116 байтов (UTF-8)
Принимает массив чисел, представляющих роллы как
[ 321, 654 ]
.Попробуйте онлайн!
Объяснение:
Я взял первый 16 из 56 возможных различных рулонов (те , которые на самом деле не следует какому - либо заказу) , и я закодирован их в виде строки:
"ƥoɣʚǿȫƛƼķōÓÞʎȟưŁ"
. Каждый символ этой строки соответствует первым 16 возможным броскам (ƥ
есть421
,o
есть111
, ...). Теперь для каждых двух элементовa
иb
массива мы просто проверяем их индекс из строки, если они включены, используется индекс, в противном случае (индекс есть-1
) мы используем сам номер броска (мы его абстрагируем от700
обратного порядка те, которые не включены, т.е. сортировать их в порядке убывания).источник
Чисто ,
169102 байтаВсе восьмеричные экранирования считаются одним байтом, так как компилятор Clean с радостью примет их таким образом, а TIO и SE - нет, потому что они не имеют правильной формы UTF-8.
Попробуйте онлайн!
Использует тот факт, что все броски костей, как целые числа по модулю 256, являются уникальными.
Удобно,
Char
рассматривается (в основном) как целое число по модулю 256.источник
Pyth , 48 байтов
Ожидается ввод в виде вложенного массива, каждый элемент упорядочен по убыванию. Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
источник
05AB1E , 24 байта
Попробуйте онлайн!
Общий алгоритм:
Детали:
источник