Mölkky
Mölkky - финская метательная игра. Игроки используют деревянную булавку (также называемую «mölkky»), чтобы попытаться опрокинуть деревянные булавки почти одинакового размера с помощью метательной булавки, обозначенной цифрами от 1 до 12. Начальная позиция булавок следующая:
(07)(09)(08)
(05)(11)(12)(06)
(03)(10)(04)
(01)(02)
Это описание и приведенные ниже правила основаны на Википедии .
Упрощенные правила Mölkky
Опрокидывание одного штифта означает количество очков, отмеченных на штифте.
Если выбить 2 или более штифтов, количество выбитых штифтов (например, опрокидывание 3 штифтов набирает 3 балла).
Цель игры - набрать ровно 50 очков. Забив более 50 очков, штрафуется за счет установки 25 очков назад .
Для этой задачи мы сделаем предположение, что контакты всегда находятся в точном порядке, описанном выше. (В реальной игре булавки поднимаются снова после каждого броска в том месте, где они приземлились.)
Все остальные правила Mölkky игнорируются, и рассматривается только один игрок.
вход
Непустой список списков из 12 логических значений. Каждый список логических значений описывает результат броска: 1, если булавка была опрокинута, и 0 в противном случае. Логические значения даны в точном порядке выводов, слева направо и снизу справа: 7 , 9 , 8 , 5 , 11 , 12 , 6 , 3 , 10 , 4 , 1 , 2 .
Выход
Счет после всех бросков, описанных во входных данных, рассчитывается с применением правил 1 , 2 и 3 .
Подробный пример
Давайте рассмотрим следующий вход:
// 07 09 08 05 11 12 06 03 10 04 01 02
[ [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 5 (rule #1)
[ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 2 (rule #2), total: 7
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 ], // scores 7, total: 14
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], // scores 12, total: 26
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], // scores 12, total: 38
[ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], // scores 11, total: 49
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 7, total: 56 -> 25 (rule #3)
[ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] // scores 2, total: 27
Ожидаемый результат - 27 .
Правила вызова
- Вы можете принять участие в любом разумном формате. Вместо списков логических значений вы можете использовать целые числа, где старший бит - это контакт № 7, а младший бит - это контакт № 2. В этом формате приведенный выше пример будет передан как
[ 256, 2304, 127, 64, 64, 128, 2048, 3072 ]
. - Входной список может содержать броски, в которых ни один пин вообще не опрокинут, и в этом случае счет пропускается без изменений.
- У вас нет ничего особенного, когда счет достигает ровно 50 баллов. Но вы можете предположить, что никакой другой бросок не последует, когда это произойдет.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Контрольные примеры
Используя списки целых чисел в качестве входных данных:
[ 0 ] --> 0
[ 528 ] --> 2
[ 4095 ] --> 12
[ 64, 0, 3208 ] --> 16
[ 16, 1907, 2048 ] --> 18
[ 2023, 2010, 1, 8 ] --> 29
[ 1726, 128, 35, 3136, 1024 ] --> 34
[ 32, 32, 2924, 2, 256, 16 ] --> 28
[ 64, 64, 2434, 1904, 3251, 32, 256 ] --> 25
[ 3659, 2777, 2211, 3957, 64, 2208, 492, 2815 ] --> 25
[ 2047, 1402, 2, 2599, 4, 1024, 2048, 3266 ] --> 50
[ 256, 2304, 127, 64, 64, 128, 2048, 3072 ] --> 27
[ 16, 8, 128, 1, 2048, 1, 2048, 513, 8, 3206 ] --> 30
Вы можете перейти по этой ссылке, чтобы получить эти тестовые примеры в логическом формате.