introduction
Il y a un collecteur d'impôts qui a du mal à gérer les impôts de son royaume: les documents historiques ont brûlé dans un grand incendie.
Il veut savoir combien de passés possibles il pourrait y avoir en termes de provenance de l'argent actuel. Heureusement, son royaume est très simple.
Le royaume peut être modélisé par une matrice booléenne 2D, où l
représente quelqu'un qui a hérité de l'argent et O
représente quelqu'un qui ne l'a pas. Par exemple:
l O l l
O O O l
l O l O
O O O l
(Ce sera toujours un rectangle)
Dans la génération suivante, le royaume est plus petit (les loups sont forts!).
La prochaine génération ressemblerait à ceci, superposée à la génération précédente ( x
est un espace réservé pour un descendant de la génération suivante)
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
Descendante se penchera sur les ancêtres qui sont directement autour d' eux (donc en haut à gauche x
verra { l
, O
, O
, O
}, appelé un quartier rectangulaire Unaligned )
Si un seul ancêtre a hérité de l'argent, le descendant en héritera. Si plus d'un ancêtre a hérité de l'argent, ils se disputeront et le descendant finira par ne pas hériter de l'argent. Si personne n'a hérité d'argent, le descendant n'héritera pas d'argent.
(Plus d'un descendant peut hériter d'un ancêtre)
Ainsi, la prochaine génération ressemblerait à:
l l O
l l O
l l O
Défi
Contribution
L'état actuel de la génération, sous la forme d'un tableau de tableaux de deux valeurs distinctes, où les tableaux internes sont tous de la même longueur.
Par exemple, pour l'exemple ci-dessus, cela pourrait être:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
Production
Un entier représentant le nombre de générations précédentes uniques où la génération suivante est l'entrée.
Vous pouvez supposer que la réponse sera toujours inférieure à 2 ^ 30 - 1. (ou 1073741823).
La génération précédente s'appellerait une "préimage" et ce défi serait de compter les préimages .
Notation
C'est un défi de code le plus rapide , donc chaque soumission sera testée sur mon ordinateur, et la soumission qui prend le moins de temps sera gagnante.
Exemple d'entrée et de sortie
(Où 1
est un descendant qui a hérité de l'argent, et 0
est un descendant qui n'a pas hérité de l'argent)
Contribution:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
Production:
4
Contribution:
[[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]]
Production:
254
Contribution:
[[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]]
Production:
11567