Вступление
Игра в кости 10 000 - игра в кости, в которую можно сыграть с 6 кубиками и кое-чем написать. Игроки бросают кости несколько раз за ход и получают очки в конце. Игрок, набравший 10000 очков первым, выигрывает игру. Подсчет очков за один бросок - ваша работа в этом испытании.
Смотрите здесь для полных правил.
Обратите внимание, что правила (в частности, оценка) меняются от региона к региону, поскольку игра широко известна. Мы используем правила, описанные ниже.
Соревнование
Учитывая список из шести чисел от одного до шести, представляющих бросок костей, выведите их результат. Оценка рассчитывается следующим образом:
- Ones насчитывает 100 точек
- Пятерки подсчитывают 50 очков
- Тройняшки считают их количество раз 100 очков. Например, три пары дают 200 очков. Исключение составляют три, которые насчитывают 1000 баллов.
- Шесть из того же числа считаются двумя тройками, как описано выше. Итак, шесть тройок дают 600 очков. То же самое относится и к крайнему случаю с шестью: шесть - 2000 очков.
- Один кубик нельзя использовать более одного раза. Если кубик является частью триплета, он не учитывается для других очков. Пятерки в тройке не учитывают 50 очков в дополнение к 500 очкам, которые они дают.
- Тройки всегда учитываются в первую очередь, чтобы максимизировать счет. Таким образом, три пятерки никогда не считаются 150 очками. Четыре пятерки считаются одной тройкой и одной обычной пятеркой, что дает 550 очков.
Примечания
- Ввод всегда будет содержать шесть чисел от одного до шести. Вы не получите неверный ввод.
- Числа могут быть в любом порядке. Вы не можете принимать какие-либо конкретные заказы.
правила
- Формат ввода зависит от вас, если он не был предварительно обработан.
- Функция или полная программа разрешены.
- Правила по умолчанию для ввода / вывода.
- Применяются стандартные лазейки .
- Это код-гольф , поэтому выигрывает меньшее количество байт. Tiebreaker является более ранним представлением.
Контрольные примеры
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Ответы:
05AB1E ,
343130 байтобъяснение
Попробуйте онлайн
источник
Python 2,
152148125 байтДовольно простое решение. Можно играть в гольф больше.
L.count
Это немного долго, но я не мог удалить первый вызов, потому что L обновляется.Попробуйте онлайн - (все тестовые случаи)
Ungolfed:
Некоторые кредиты в гольф @Copper , используя некоторые советы из своего кода
источник
PowerShell
v2 +v3 +,147144137133 байтаВычеркнуто 144 выглядит как 144?
Принимает данные
$args[0]
иsort
сохраняет их в$n
. Затемwhile
остаются еще элементы, мы оцениваемif
/else
.Если первый элемент (временный элемент хранится в
$x
нескольких байтах) соответствует третьему элементу, у нас есть тройка. Добавьте к$s
умножению результат некоторого умножения100*$x
плюс логическое значение,900
только если это значение$x
равно-eq
ual1
. Это дает нам необходимое1000
для трех. Затем снимите первые два элемента в$a
, и$b
, а остальные в$n
- удаление третьего элемента тройки обрабатывается позже.В противном случае у нас нет тройки, поэтому добавим к
$s
результату другого логического сложения. Мы добавляем50
if$x
или1
or5
, а затем добавляем другую,50
если это-eq
ual1
. Этот раздел теперь требует v3 + для-in
оператора.В любом случае у нас еще есть элемент, который нужно удалить, поэтому снимите первый элемент
$a
и оставьте его в$n
.Наконец, когда цикл завершен, поместите его
$s
в конвейер. Вывод неявныйWrite-Output
в конце выполнения.Контрольные примеры
источник
JavaScript (ES6),
8786 байтСортирует и структурирует входные данные, чтобы можно было идентифицировать оценочные комбинации с помощью регулярных выражений. Редактировать: 1 байт сохранен благодаря @Arnauld.
источник
s>>7
вместо того, чтобыs>111
сохранить один байт в первой версииPython 2 или 3,
123 122 121 116 109 108 104 102 10097 байтPython 2, 97 байт
Тестовые случаи на ideone
Python 3, 97 байт
источник
Рубин,
8078 байтПопробуйте онлайн!
-2 байта от @ezrast.
источник
i<2&&i=10
экономит 2 байтаHaskell,
130123 байтаЭто не вызов для Хаскелла. Также я в этом играю в гольф.
Спасибо @nimi.
источник
Javascript (ES6),
8584 байтаТестовые случаи:
источник
Python 3, 131 байт
Это лямбда-выражение; чтобы использовать его, назначьте его, добавив
f=
.Сначала мы проверяем тройки дважды (используя модуль), удаляя тройки по ходу; затем мы просто добавляем количество
5
и1
к счету и возвращаем его.Попробуйте это на Ideone! (со всеми тестами)
Вот мое старое представление Python 2:
Python 2,
176172171145136134133 байтаСохранение байта в решении Python 2 благодаря @ mbomb007!
источник
print s
короче в Python 2.BASH (sed + bc) 161
Я хотел сделать все это в седе, но сложение действительно сложно ...
Объяснение:
00
к первому номеру и удалите другой,например
1 2 1 3 1 4
->100 2 3 4
10
с1
затем1
с ,100
например ,
100
->10
->1000
или1
->1
->100
5
не следует0
с50
0
+
+
с0
bc
сложить все.источник
Perl, 69 байт
Включает +2 для
-ap
Запустите с помощью ввода на STDIN:
dice10000.pl
:источник
C # (.NET Core) ,
228227 байтПопробуйте онлайн!
Я чувствую, что не хватает много, много потенциальных оптимизаций, но я сделал сохранить байты путем умножения на 10 в конце. Ввод должен быть передан как отдельные аргументы командной строки.
источник
Perl 5
-ap
, 78 байтПопробуйте онлайн!
источник