Nesse desafio, sua tarefa é construir um gráfico não direcionado a partir de uma sequência de diretivas. Há uma diretiva para cada número inteiro não negativo e cada uma transforma um dado gráfico em um novo.
- Diretiva
0
: Adicione um novo nó desconectado. - Diretiva
1
: adicione um novo nó e conecte-o a todos os nós existentes. - Diretiva
m > 1
: Remova todos os nós cujo grau (número de vizinhos) é divisível porm
. Observe que0
é divisível por todosm
, portanto os nós desconectados são sempre removidos.
As diretivas são aplicadas uma a uma, da esquerda para a direita, começando com o gráfico vazio. Por exemplo, a sequência [0,1,0,1,0,1,3]
é processada da seguinte maneira, explicada usando a incrível arte ASCII. Começamos com o gráfico vazio e adicionamos um único vértice conforme indicado por 0
:
a
Em seguida, adicione outro vértice e conecte-o ao primeiro, conforme indicado por 1
:
a--b
Adicionamos outro vértice desconectado e depois um conectado, conforme indicado por 0
e 1
:
a--b c
\ \ /
`--d
Repetimos isso mais uma vez, conforme indicado por 0
e 1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
Finalmente, removemos os vértices de grau 3 a
e b
, conforme indicado por 3
:
f--e
|\
| c
|/
d
Este é o gráfico definido pela sequência [0,1,0,1,0,1,3]
.
Entrada
Uma lista de números inteiros não negativos, representando uma sequência de diretivas.
Resultado
O número de nós no gráfico definido pela sequência.
Casos de teste
[] -> 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
Regras detalhadas
Você pode escrever uma função ou um programa completo. A menor contagem de bytes vence. As brechas padrão não são permitidas. Por favor, explique seu algoritmo na sua resposta.
Já faz uma semana, então aceitei a resposta mais curta. Se um mais curto aparecer mais tarde, atualizarei minha escolha. Uma menção honrosa vai para a resposta de Peter Taylor , na qual várias outras foram baseadas, incluindo o vencedor.