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ż, że0
jest 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 0
i 1
:
a--b c
\ \ /
`--d
Powtarzamy to jeszcze raz, zgodnie z zaleceniami 0
i 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Na koniec usuwamy wierzchołki stopnia-3 a
i b
zgodnie 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ę.