У цьому виклику ваше завдання - побудувати непрямий графік із послідовності директив. Для кожного негативного цілого числа існує одна директива, і кожна перетворює заданий графік у новий.
- Директива
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
Детальні правила
Ви можете написати функцію або повну програму. Виграє найкоротший байт. Стандартні лазівки заборонені. Поясніть, будь ласка, свій алгоритм у відповіді.
Минув тиждень, тому я прийняв найкоротшу відповідь. Якщо пізніше з’явиться ще коротша, я обновлю свій вибір. Почесна згадка стосується відповіді Пітера Тейлора , на якій базувалося кілька інших, зокрема переможець.