Introdução
Há um cobrador de impostos que tem problemas para gerenciar os impostos de seu reino: os registros históricos queimaram em um grande incêndio.
Ele quer descobrir quantos passados possíveis poderiam existir em termos de onde o dinheiro atual foi herdado. Felizmente, seu reino é muito simples.
O reino pode ser modelado por uma matriz booleana 2D, onde l
representa alguém que herdou dinheiro e O
representa alguém que não herdou . Por exemplo:
l O l l
O O O l
l O l O
O O O l
(Sempre será um retângulo)
Na próxima geração, o reino é menor (os lobos são fortes!).
A próxima geração ficaria assim, sobreposta à geração anterior ( x
é um espaço reservado para um descendente na próxima geração)
l O l l
x x x
O O O l
x x x
l O l O
x x x
O O O l
Um descendente olhar para os antepassados que são diretamente em torno deles (Assim, o canto superior esquerdo x
verá { l
, O
, O
, O
}, chamado de bairro retangular Unaligned )
Se apenas um ancestral herdou dinheiro, o descendente herdará dinheiro deles. Se mais de um ancestral herdou dinheiro, eles brigam e o descendente acaba não herdando dinheiro. Se ninguém herdou dinheiro, o descendente não herdará dinheiro.
(Mais de um descendente pode herdar de um ancestral)
Portanto, a próxima geração seria assim:
l l O
l l O
l l O
Desafio
Entrada
O estado atual da geração, como uma matriz de matrizes de dois valores distintos, em que as matrizes internas têm o mesmo comprimento.
Por exemplo, para o exemplo acima, pode ser:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
Resultado
Um número inteiro que representa o número de gerações anteriores exclusivas em que a próxima geração é a entrada.
Você pode supor que a resposta sempre será menor que 2 ^ 30 - 1. (ou 1073741823).
A geração anterior seria chamada de "pré-imagem" e esse desafio seria contar as pré-imagens .
Pontuação
Esse é um desafio de código mais rápido ; portanto, cada envio será testado no meu computador, e o envio que demorar menos tempo será o vencedor.
Exemplo de entrada e saída
(Onde 1
está um descendente que herdou dinheiro e 0
é um descendente que não herdou dinheiro)
Entrada:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
Resultado:
4
Entrada:
[[1, 0, 1, 0, 0, 1, 1, 1],
[1, 0, 1, 0, 0, 0, 1, 0],
[1, 1, 1, 0, 0, 0, 1, 0],
[1, 0, 1, 0, 0, 0, 1, 0],
[1, 0, 1, 0, 0, 1, 1, 1]]
Resultado:
254
Entrada:
[[1, 1, 0, 1, 0, 1, 0, 1, 1, 0],
[1, 1, 0, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 1, 1, 0, 0]]
Resultado:
11567