В этой задаче ваша задача состоит в том, чтобы построить неориентированный граф из последовательности директив. Существует одна директива для каждого неотрицательного целого числа, и каждая преобразует данный граф в новый.
- Директива
0
: Добавить новый отключенный узел. - Директива
1
: Добавьте новый узел и подключите его к каждому существующему узлу. - Директива
m > 1
: Удалите все узлы, чья степень (количество соседей) делится наm
. Обратите внимание, что0
это делится на всеm
, поэтому отключенные узлы всегда удаляются.
Директивы применяются одна за другой слева направо, начиная с пустого графа. Например, последовательность [0,1,0,1,0,1,3]
обрабатывается следующим образом, объясненный с использованием удивительной ASCII-графики. Мы начинаем с пустого графа и добавляем одну вершину в соответствии с 0
:
a
Затем добавьте еще одну вершину и соедините ее с первой, как указано 1
:
a--b
Мы добавляем другую несвязанную вершину, а затем соединенную, как указано 0
и 1
:
a--b c
\ \ /
`--d
Мы повторяем это еще раз, как указано 0
и 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Наконец, мы удаляем вершины степени 3 a
и b
, как указано 3
:
f--e
|\
| c
|/
d
Это график, определенный последовательностью [0,1,0,1,0,1,3]
.
вход
Список неотрицательных целых чисел, представляющих последовательность директив.
Выход
Количество узлов в графе определяется последовательностью.
Контрольные примеры
[] -> 0
[5] -> 0
[0,0,0,11] -> 0
[0,1,0,1,0,1,3] -> 4
[0,0,0,1,1,1] -> 6
[0,0,1,1,0,0,1,1,2,5,7,0,1] -> 6
[0,0,1,1,1,1,5,1,4,3,1,0,0,0,1,2] -> 6
[0,0,1,1,0,0,1,1,5,2,3,0,0,1,1,0,0,1,1,3,4,0,0,1,1,2,1,1] -> 8
[0,0,1,1,0,0,1,1,2,5,7,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,8] -> 14
Подробные правила
Вы можете написать функцию или полную программу. Победит самый короткий счетчик байтов. Стандартные лазейки запрещены. Пожалуйста, объясните свой алгоритм в вашем ответе.
Прошла неделя, поэтому я принял кратчайший ответ. Если позже появится еще более короткий вариант, я обновлю свой выбор. Похвальное упоминание относится к ответу Питера Тейлора , на котором основывалось несколько других, включая победителя.