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