Einführung
Es gibt einen Steuereintreiber, der Schwierigkeiten hat, die Steuern seines Königreichs zu verwalten: Die historischen Aufzeichnungen sind in einem großen Feuer niedergebrannt.
Er möchte herausfinden, wie viele mögliche Vergangenheiten es geben könnte, woher das aktuelle Geld stammt. Zum Glück ist sein Königreich sehr einfach.
Das Königreich kann durch eine 2D-Boolesche Matrix modelliert werden, l
die jemanden darstellt, der Geld geerbt hat, und O
jemanden darstellt, der dies nicht getan hat. Beispielsweise:
l O l l
O O O l
l O l O
O O O l
(Es wird immer ein Rechteck sein)
In der nächsten Generation ist das Königreich kleiner (Die Wölfe sind stark!).
Die nächste Generation würde so aussehen, überlagert die vorherige Generation ( x
ist ein Platzhalter für einen Nachkommen in der nächsten Generation).
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
Ein Nachkomme an den Vorfahren sucht, die direkt um sie herum sind (also oben links x
sehen { l
, O
, O
, O
}, eine genannter Unaligned rechteckige Nachbarschaft )
Wenn nur ein Vorfahr Geld geerbt hat, erbt der Nachkomme Geld von ihnen. Wenn mehr als ein Vorfahr Geld geerbt hat, streiten sie sich und der Nachkomme erbt kein Geld. Wenn niemand Geld geerbt hat, erbt der Nachkomme kein Geld.
(Mehr als ein Nachkomme kann von einem Vorfahren erben)
Die nächste Generation würde also so aussehen:
l l O
l l O
l l O
Herausforderung
Eingang
Der aktuelle Status der Generation als Array von Arrays mit zwei unterschiedlichen Werten, wobei die inneren Arrays alle dieselbe Länge haben.
Für das obige Beispiel könnte es beispielsweise sein:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
Ausgabe
Eine Ganzzahl, die die Anzahl der eindeutigen vorherigen Generationen darstellt, wobei die nächste Generation die Eingabe ist.
Sie können davon ausgehen, dass die Antwort immer kleiner als 2 ^ 30 - 1 ist (oder 1073741823).
Die vorherige Generation würde als "Vorbild" bezeichnet, und diese Herausforderung würde darin bestehen, die Vorbilder zu zählen .
Wertung
Dies ist eine Herausforderung mit dem schnellsten Code. Daher wird jede Einreichung auf meinem Computer getestet, und die Einreichung, die am wenigsten Zeit in Anspruch nimmt, ist der Gewinner.
Beispiel für Ein- und Ausgabe
(Wo 1
ist ein Nachkomme, der Geld geerbt hat, und 0
ein Nachkomme, der kein Geld geerbt hat?)
Eingang:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
Ausgabe:
4
Eingang:
[[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]]
Ausgabe:
254
Eingang:
[[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]]
Ausgabe:
11567