En este desafío, su tarea es construir un gráfico no dirigido a partir de una secuencia de directivas. Hay una directiva para cada entero no negativo, y cada uno transforma un gráfico dado en uno nuevo.
- Directiva
0
: agregue un nuevo nodo desconectado. - Directiva
1
: agregue un nuevo nodo y conéctelo a cada nodo existente. - Directiva
m > 1
: elimine todos los nodos cuyo grado (número de vecinos) es divisible porm
. Tenga en cuenta que0
es divisible por todosm
, por lo que los nodos desconectados siempre se eliminan.
Las directivas se aplican una por una, de izquierda a derecha, comenzando con el gráfico vacío. Por ejemplo, la secuencia [0,1,0,1,0,1,3]
se procesa de la siguiente manera, explicada usando un increíble arte ASCII. Comenzamos con el gráfico vacío y agregamos un vértice único según lo indicado por 0
:
a
Luego, agregue otro vértice y conéctelo al primero, como lo indique 1
:
a--b
Agregamos otro vértice desconectado y luego uno conectado, como lo indica 0
y 1
:
a--b c
\ \ /
`--d
Repetimos esto una vez más, según las indicaciones 0
y 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Finalmente, eliminamos los vértices de grado 3 a
y b
, como lo indica 3
:
f--e
|\
| c
|/
d
Este es el gráfico definido por la secuencia [0,1,0,1,0,1,3]
.
Entrada
Una lista de enteros no negativos, que representa una secuencia de directivas.
Salida
El número de nodos en el gráfico definido por la secuencia.
Casos de prueba
[] -> 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
Reglas detalladas
Puede escribir una función o un programa completo. El conteo de bytes más corto gana. Las lagunas estándar no están permitidas. Por favor explique su algoritmo en su respuesta.
Ha pasado una semana, así que he aceptado la respuesta más corta. Si aparece uno aún más corto más tarde, actualizaré mi elección. Una mención de honor va a la respuesta de Peter Taylor , en la que se basaron varios otros, incluido el ganador.