Dans ce défi, votre tâche consiste à construire un graphe non orienté à partir d'une séquence de directives. Il existe une directive pour chaque entier non négatif, et chacune transforme un graphique donné en un nouveau.
- Directive
0
: ajoutez un nouveau nœud déconnecté. - Directive
1
: ajoutez un nouveau nœud et connectez-le à chaque nœud existant. - Directive
m > 1
: Supprimez tous les nœuds dont le degré (nombre de voisins) est divisible parm
. Notez que cela0
est divisible par tousm
, donc les nœuds déconnectés sont toujours supprimés.
Les directives sont appliquées une par une, de gauche à droite, en commençant par le graphique vide. Par exemple, la séquence [0,1,0,1,0,1,3]
est traitée comme suit, expliquée à l'aide d'un superbe art ASCII. Nous commençons avec le graphique vide et ajoutons un seul sommet comme indiqué par 0
:
a
Ensuite, ajoutez un autre sommet et connectez-le au premier, comme indiqué par 1
:
a--b
Nous ajoutons un autre sommet déconnecté puis un sommet connecté, comme indiqué par 0
et 1
:
a--b c
\ \ /
`--d
Nous répétons cette fois encore, comme dirigé par 0
et 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Enfin, nous supprimons les sommets de degré 3 a
et b
, comme indiqué par 3
:
f--e
|\
| c
|/
d
Il s'agit du graphique défini par la séquence [0,1,0,1,0,1,3]
.
Contribution
Une liste d'entiers non négatifs, représentant une séquence de directives.
Production
Le nombre de nœuds dans le graphique défini par la séquence.
Cas de 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
Règles détaillées
Vous pouvez écrire une fonction ou un programme complet. Le nombre d'octets le plus court gagne. Les failles standard ne sont pas autorisées. Veuillez expliquer votre algorithme dans votre réponse.
Cela fait une semaine, j'ai donc accepté la réponse la plus courte. Si une version encore plus courte arrive plus tard, je mettrai à jour mon choix. Une mention honorable va à la réponse de Peter Taylor , sur laquelle plusieurs autres étaient basés, y compris le gagnant.