W tym wyzwaniu Twoim zadaniem jest zbudowanie niekierowanego wykresu z sekwencji dyrektyw. Istnieje jedna dyrektywa dla każdej nieujemnej liczby całkowitej i każda przekształca dany wykres w nowy.
- Dyrektywa
0: Dodaj nowy odłączony węzeł. - Dyrektywa
1: Dodaj nowy węzeł i podłącz go do każdego istniejącego węzła. - Dyrektywa
m > 1: Usuń wszystkie węzły, których stopień (liczba sąsiadów) jest podzielny przezm. Zauważ, że0jest podzielna przez wszystkichm, więc odłączone węzły są zawsze usuwane.
Dyrektywy są stosowane jeden po drugim, od lewej do prawej, zaczynając od pustego wykresu. Na przykład sekwencja [0,1,0,1,0,1,3]jest przetwarzana w następujący sposób, wyjaśniony przy użyciu niesamowitej grafiki ASCII. Zaczynamy od pustego wykresu i dodajemy pojedynczy wierzchołek zgodnie z instrukcjami 0:
a
Następnie dodaj kolejny wierzchołek i połącz go z pierwszym, zgodnie z instrukcjami 1:
a--b
Dodamy kolejny wierzchołek odłączony, a następnie podłączony jeden, zgodnie z zaleceniami 0i 1:
a--b c
\ \ /
`--d
Powtarzamy to jeszcze raz, zgodnie z zaleceniami 0i 1:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Na koniec usuwamy wierzchołki stopnia-3 ai bzgodnie z instrukcjami 3:
f--e
|\
| c
|/
d
To jest wykres zdefiniowany przez sekwencję [0,1,0,1,0,1,3].
Wejście
Lista nieujemnych liczb całkowitych reprezentujących sekwencję dyrektyw.
Wynik
Liczba węzłów na wykresie określona przez sekwencję.
Przypadki testowe
[] -> 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
Szczegółowe zasady
Możesz napisać funkcję lub pełny program. Najkrótsza liczba bajtów wygrywa. Standardowe luki są niedozwolone. Proszę wyjaśnić swój algorytm w swojej odpowiedzi.
Minął tydzień, więc zaakceptowałem najkrótszą odpowiedź. Jeśli później pojawi się jeszcze krótszy, zaktualizuję mój wybór. Wyróżnienie należy do odpowiedzi Petera Taylora , na której oparto kilka innych, w tym zwycięzcę.