The Nonary Game - вымышленная игра, в которую играют в одноименную трилогию о видеоиграх. Ваша цель состоит в том, чтобы найти, сколько игроков (в лучшем случае) могут избежать данной игры, используя как можно меньше байт кода.
Правила игры
- Есть 9 игроков, пронумерованных от 1 до 9.
- Все игроки начинают в одной комнате.
- Есть любое количество дверей, каждая с номером от 1 до 9. Там могут быть повторяющиеся или отсутствующие номера дверей.
- Дверь - это односторонние связи между комнатами. Каждая дверь может быть использована только один раз .
- Только группы от 3 до 5 игроков могут пройти через дверь.
- Группа может пройти через дверь, только если сумма их чисел по модулю 9 совпадает с номером двери по модулю 9.
- Любой игрок, который проходит через 9 дверей, убегает (побеждает).
Примеры
┌───┬───┬───┐
│ 6 4 9
│ < │ | |
│ 3 5 9
└───┴───┴───┘
<
представляет собой отправную точку. Все игроки начинают там.
В этой обстановке каждый может убежать. Для этого есть различные способы, один из которых:
- [1, 2, 3, 4, 5] проходят через дверь 6 ((1 + 2 + 3 + 4 + 5)% 9 = 6), а [6, 7, 8, 9] проходят через дверь 3 ((6 + 7 + 8 + 9)% 9 = 3). Все встречаются во второй комнате.
- [1, 2, 3, 7] проходят через дверь 4, а [4, 5, 6, 8, 9] - через дверь 5.
- [1, 2, 3, 4, 8] пройти через одну из 9 дверей, [5, 6, 7, 9] пройти через другую.
┌───┬───┐
│ │ |
│ < 8 9
│ │ |
└───┴───┘
На этот раз могут убежать максимум 4 человека:
- [1, 3, 5, 8, 9] пройти через дверь 8.
- [1, 3, 5, 9] пройти через дверь 9.
Возможны и другие списки выживших, такие как [2, 3, 4] или [1, 4, 6, 7], но более 4 человек не могут сбежать.
Соревнование
Учитывая карту, выведите максимальное количество игроков, которые могут сбежать.
- Не волнуйтесь, вам не нужно разбирать мои ужасные диаграммы! Ввод представляет собой помеченный ориентированный граф, который вы можете представить в любом удобном формате (набор ребер, матрица смежности ...).
- Если вашему представлению требуются метки для комнат, вы можете использовать любой непротиворечивый набор значений. Однако двери должны быть представлены целыми числами от 1 до 9.
- На входе всегда будет хотя бы одна дверь 9. Все 9 дверей всегда ведут к выходу, в то время как другие двери никогда не делают.
- Ваше представление может быть функцией или полной программой.
- Стандартные лазейки запрещены.
Контрольные примеры
Входы отображаются в виде списков триплетов [номер двери из комнаты в комнату], где 0 - начальная комната, а -1 - выход. Если вы решите использовать другой формат, вам придется конвертировать их соответствующим образом.
Input Output
[[6, 0, 1], [3, 0, 1], [4, 1, 2], [5, 1, 2], [9, 2, -1], [9, 2, -1]] 9
[[8, 0, 1], [9, 1, -1]] 4
[[9, 0, -1]] 5
[[2, 0, 1], [1, 1, 2], [9, 2, -1]] 0
[[2, 0, 1], [3, 1, 2], [9, 2, -1]] 3
[[1, 0, 1], [9, 1, -1], [1, 0, 2], [9, 2, -1]] 4
[[2, 0, 1], [3, 0, 1], [5, 1, 2], [4, 0, 2], [9, 2, -1], [9, 2, -1]] 8
[[3, 0, 1], [4, 0, 1], [5, 0, 1], [9, 1, -1], [7, 1, 2], [9, 2, -1]] 7
[[1, 0, 1], [2, 0, 1], [4, 0, 1], [9, 1, -1], [8, 1, 2], [9, 2, -1]] 6
[[6, 0, 1], [7, 0, 1], [9, 1, -1], [9, 1, -1]] 7
Ответы:
JavaScript (ES6), 219 байт
Более медленная, но значительно более короткая версия, использующая битовые маски вместо строк.
Попробуйте онлайн!
JavaScript (ES7),
293 272271 байтПринимает участие в формате, описанном в задаче. Это поиск грубой силы.
Попробуйте онлайн! (первый тестовый случай истекает на TIO)
Как?
Массив
P[]
содержит список строк, описывающих игроков в каждой комнате.P=['241375698']
Для каждой комнаты
X
на местеr
мы рассчитываем мощностьX
:Для каждой группы игроков
p
и для каждой двери[d,s,t]
в индексеj
мы проверяем, не может ли группа пройти через дверь:Если группа может пройти, мы делаем рекурсивный вызов:
Мы отслеживаем максимальное количество сбежавших игроков
m
и в итоге возвращаем его.источник
Желе , 76 байт
Попробуйте онлайн!
Полная программа, принимающая один аргумент, ориентированный граф, использующий комнаты 1, 2, ... и 0 в качестве выхода. Возвращает целое число, которое является максимальным числом, которое может выйти. Полное объяснение, чтобы следовать.
Должен работать без
Ṣ€€Q
4-х байтового сохранения, но медленно отдыхать.источник