Так как завтра 4 мая, вот небольшой пост на тему «Звездных войн», чтобы мысленно подготовить вас ко всем плохим шуткам, которые появятся завтра.
предыстория
Во время сессии галактического сената все сенаторы сидят в n*n
сетке. Внезапная вспышка гриппа JarJar (которая длится вечно и заставляет зараженных говорить как JarJar Binks) вызывает заражение некоторых сенаторов.
Вот пример с 6*6
сеткой, где X
зараженные сенаторы, соответствующий список [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
:
После этого инфекция начинает распространяться шаг за шагом. Два сенатора являются смежными, если они имеют общий край сетки (т. Е. Сверху, снизу, справа, слева), что означает, что мы исключаем диагонали.
Мы можем заключить, что сенатор может быть соседним с 2,3 или 4 другими сенаторами и требовать следующие правила заражения:
- Зараженный сенатор остается зараженным навсегда
- Сенатор заражается на шаге, если он был рядом с 2 или более зараженными сенатором на предыдущем шаге
Вот пример с предыдущей сеткой, которая показывает 2 первых шага заражения:
После следующих шагов весь сенат будет заражен
ТВОЕ ЗАДАНИЕ
Ваш код не должен обрабатывать неверные данные, такие как список больше n*n
или координаты, которые не являются отличительными.
Ваш код будет принимать в качестве входных данных список пар целых чисел (или двоичной сетки или любого другого формата, который подходит вашему языку) и целое число n
(которое может быть ненужным, если вы используете другой формат, чем список), например:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n является стороной сетки, что означает, что сетка будет * n сеткой, а список пар целых чисел будет координатами ячеек изначально зараженных сенаторов.
Нижний левый угол сетки [0,0], а верхний правый - [n-1, n-1]. Слева вверху - [0, n-1].
Ваш код должен вывести целое число:
-1
или ложное значение или ошибка, если вся сетка никогда не будет полностью заражена, или минимальное количество шагов, необходимых для заражения всей сетки
Контрольные примеры
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
Помните, что это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
n
? Есть ли максимальное значение?
CellularAutomaton
...