In questa sfida, il tuo compito è costruire un grafico non orientato da una sequenza di direttive. Esiste una direttiva per ogni numero intero non negativo e ognuno trasforma un dato grafico in uno nuovo.
- Direttiva
0
: aggiungere un nuovo nodo disconnesso. - Direttiva
1
: aggiungere un nuovo nodo e collegarlo a ogni nodo esistente. - Direttiva
m > 1
: rimuovere tutti i nodi il cui grado (numero di vicini) è divisibile perm
. Nota che0
è divisibile per tuttim
, quindi i nodi disconnessi vengono sempre rimossi.
Le direttive vengono applicate una ad una, da sinistra a destra, a partire dal grafico vuoto. Ad esempio, la sequenza [0,1,0,1,0,1,3]
viene elaborata come segue, spiegata usando la straordinaria arte ASCII. Iniziamo con il grafico vuoto e aggiungiamo un singolo vertice come diretto da 0
:
a
Quindi, aggiungi un altro vertice e collegalo al primo, come indicato da 1
:
a--b
Aggiungiamo un altro vertice disconnesso e poi uno collegato, come indicato da 0
e 1
:
a--b c
\ \ /
`--d
Lo ripetiamo ancora una volta, come indicato da 0
e 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Infine, rimuoviamo i vertici di grado 3 a
e b
, come indicato da 3
:
f--e
|\
| c
|/
d
Questo è il grafico definito dalla sequenza [0,1,0,1,0,1,3]
.
Ingresso
Un elenco di numeri interi non negativi, che rappresentano una sequenza di direttive.
Produzione
Il numero di nodi nel grafico definito dalla sequenza.
Casi test
[] -> 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
Regole dettagliate
È possibile scrivere una funzione o un programma completo. Vince il conteggio dei byte più corto. Le scappatoie standard non sono ammesse. Spiega l'algoritmo nella tua risposta.
È passata una settimana, quindi ho accettato la risposta più breve. Se ne arriva uno ancora più corto, aggiornerò la mia scelta. Una menzione d'onore va alla risposta di Peter Taylor , su cui si basavano molti altri, incluso il vincitore.