O jogo Nonary é um jogo fictício jogado na trilogia de videogame de mesmo nome. Seu objetivo é descobrir quantos jogadores (na melhor das hipóteses) podem escapar de um determinado jogo, com o mínimo de bytes de código possível.
Regras do jogo
- Existem 9 jogadores, numerados de 1 a 9.
- Todos os jogadores começam na mesma sala.
- Existem inúmeras portas, cada uma com um número de 1 a 9. Pode haver números de porta duplicados ou ausentes.
- Porta são conexões unidirecionais entre quartos. Cada porta pode ser usada apenas uma vez .
- Apenas grupos de 3 a 5 jogadores podem passar por uma porta.
- Um grupo só pode passar por uma porta se a soma dos seus números módulo 9 corresponder ao número da porta módulo 9.
- Qualquer jogador que passa por uma porta 9 escapa (ganha).
Exemplos
┌───┬───┬───┐
│ 6 4 9
│ < │ | |
│ 3 5 9
└───┴───┴───┘
<
representa o ponto de partida. Todos os jogadores começam por aí.
Nesse cenário, todos podem escapar. Existem várias maneiras de conseguir isso, uma das quais é:
- [1, 2, 3, 4, 5] passam pela porta 6 ((1 + 2 + 3 + 4 + 5)% 9 = 6), enquanto [6, 7, 8, 9] passam pela porta 3 ((6 + 7 + 8 + 9)% 9 = 3). Todo mundo se encontra na segunda sala.
- [1, 2, 3, 7] passam pela porta 4, enquanto [4, 5, 6, 8, 9] passam pela porta 5.
- [1, 2, 3, 4, 8] passam por uma das 9 portas, [5, 6, 7, 9] passam pela outra.
┌───┬───┐
│ │ |
│ < 8 9
│ │ |
└───┴───┘
Desta vez, no máximo 4 pessoas podem escapar:
- [1, 3, 5, 8, 9] passam pela porta 8.
- [1, 3, 5, 9] passam pela porta 9.
Outras listas de sobreviventes são possíveis, como [2, 3, 4] ou [1, 4, 6, 7], mas não há como escapar mais de quatro pessoas.
O desafio
Dado um mapa, produza o número máximo de jogadores que podem escapar.
- Não se preocupe, você não precisa analisar meus terríveis diagramas! A entrada é um gráfico direcionado rotulado, que você pode representar em qualquer formato conveniente (conjunto de arestas, matriz de adjacência ...).
- Se sua representação exigir rótulos para salas, você poderá usar qualquer conjunto consistente de valores. No entanto, as portas devem ser representadas pelos números inteiros 1 a 9.
- A entrada sempre terá pelo menos uma porta 9. Todas as 9 portas sempre levam à saída, enquanto outras nunca.
- Seu envio pode ser uma função ou um programa completo.
- As brechas padrão são proibidas.
Casos de teste
As entradas são mostradas como listas de trigêmeos [número da porta, de sala em sala], com 0 sendo a sala inicial e -1 sendo a saída. Se você optar por usar outro formato, precisará convertê-los adequadamente.
Input Output
[[6, 0, 1], [3, 0, 1], [4, 1, 2], [5, 1, 2], [9, 2, -1], [9, 2, -1]] 9
[[8, 0, 1], [9, 1, -1]] 4
[[9, 0, -1]] 5
[[2, 0, 1], [1, 1, 2], [9, 2, -1]] 0
[[2, 0, 1], [3, 1, 2], [9, 2, -1]] 3
[[1, 0, 1], [9, 1, -1], [1, 0, 2], [9, 2, -1]] 4
[[2, 0, 1], [3, 0, 1], [5, 1, 2], [4, 0, 2], [9, 2, -1], [9, 2, -1]] 8
[[3, 0, 1], [4, 0, 1], [5, 0, 1], [9, 1, -1], [7, 1, 2], [9, 2, -1]] 7
[[1, 0, 1], [2, 0, 1], [4, 0, 1], [9, 1, -1], [8, 1, 2], [9, 2, -1]] 6
[[6, 0, 1], [7, 0, 1], [9, 1, -1], [9, 1, -1]] 7