Introducción
Hay un recaudador de impuestos que tiene algunos problemas para administrar los impuestos de su reino: los registros históricos se han incendiado en un gran incendio.
Quiere saber cuántos pasados posibles podría haber en términos de dónde se heredó el dinero actual. Afortunadamente, su reino es muy simple.
El reino puede ser modelado por una matriz booleana 2D, donde l
representa a alguien que ha heredado dinero y O
representa a alguien que no lo ha hecho. Por ejemplo:
l O l l
O O O l
l O l O
O O O l
(Siempre será un rectángulo)
En la próxima generación, el reino es más pequeño (¡Los lobos son fuertes!).
La próxima generación se vería así, superpuesta a la generación anterior ( x
es un marcador de posición para un descendiente en la próxima generación)
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
Un descendiente se verá en los antepasados que son directamente alrededor de ellos (tanto la parte superior izquierda x
verá { l
, O
, O
, O
}, llamado un barrio rectangular Unaligned )
Si solo un antepasado ha heredado dinero, el descendiente heredará dinero de ellos. Si más de un antepasado ha heredado dinero, se pelearán y el descendiente terminará no heredando dinero. Si nadie ha heredado dinero, el descendiente no heredará dinero.
(Más de un descendiente puede heredar de un antepasado)
Entonces, la próxima generación se vería así:
l l O
l l O
l l O
Desafío
Entrada
El estado actual de la generación, como una matriz de matrices de dos valores distintos, donde las matrices internas tienen la misma longitud.
Por ejemplo, para el ejemplo anterior, podría ser:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
Salida
Un entero que representa el número de generaciones anteriores únicas donde la siguiente generación es la entrada.
Puede suponer que la respuesta siempre será menor que 2 ^ 30 - 1. (o 1073741823).
La generación anterior se llamaría una "preimagen" y este desafío sería contar las preimágenes .
Puntuación
Este es un desafío de código más rápido , por lo que cada envío se probará en mi computadora y el envío que demore menos será el ganador.
Ejemplo de entrada y salida
(¿Dónde 1
está un descendiente que heredó dinero y 0
es un descendiente que no heredó dinero)
Entrada:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
Salida:
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]]
Salida:
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]]
Salida:
11567