In dieser Herausforderung besteht Ihre Aufgabe darin, aus einer Folge von Anweisungen ein ungerichtetes Diagramm zu erstellen. Es gibt eine Direktive für jede nichtnegative Ganzzahl und jede transformiert einen gegebenen Graphen in einen neuen.
- Anweisung
0
: Fügen Sie einen neuen getrennten Knoten hinzu. - Anweisung
1
: Fügen Sie einen neuen Knoten hinzu und verbinden Sie ihn mit jedem vorhandenen Knoten. - Richtlinie
m > 1
: Entfernen Sie alle Knoten, deren Grad (Anzahl der Nachbarn) durch teilbar istm
. Beachten Sie, dass dies0
durch alle teilbar istm
, sodass nicht verbundene Knoten immer entfernt werden.
Die Anweisungen werden nacheinander von links nach rechts angewendet, beginnend mit dem leeren Diagramm. Zum Beispiel wird die Sequenz [0,1,0,1,0,1,3]
wie folgt verarbeitet und mit großartiger ASCII-Grafik erklärt. Wir beginnen mit dem leeren Diagramm und fügen einen einzelnen Scheitelpunkt hinzu, wie von 0
:
a
Dann wird eine weitere Eckpunkt hinzuzufügen und es an die erste Verbindung, wie angewiesen durch 1
:
a--b
Wir fügen einen weiteren getrennten Vertex und dann einen verbundenen hinzu, wie von 0
und angewiesen 1
:
a--b c
\ \ /
`--d
Wir wiederholen dies noch einmal nach Anweisung von 0
und 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Zum Schluss entfernen wir die Eckpunkte des 3. Grades a
und b
, wie von 3
:
f--e
|\
| c
|/
d
Dies ist der durch die Sequenz definierte Graph [0,1,0,1,0,1,3]
.
Eingang
Eine Liste nichtnegativer Ganzzahlen, die eine Folge von Anweisungen darstellen.
Ausgabe
Die Anzahl der durch die Sequenz definierten Knoten im Diagramm.
Testfälle
[] -> 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
Detaillierte Regeln
Sie können eine Funktion oder ein vollständiges Programm schreiben. Die kürzeste Byteanzahl gewinnt. Standardlücken sind nicht zulässig. Bitte erläutern Sie Ihren Algorithmus in Ihrer Antwort.
Es ist eine Woche vergangen, deshalb habe ich die kürzeste Antwort akzeptiert. Wenn später eine noch kürzere erscheint, aktualisiere ich meine Auswahl. Eine lobende Erwähnung geht an Peter Taylors Antwort , auf der mehrere andere basierten, einschließlich des Gewinners.