introduzione
C'è un esattore delle tasse che ha qualche problema a gestire le tasse del suo regno: i documenti storici sono stati bruciati in un grande incendio.
Vuole scoprire quanti possibili passati potrebbero esserci in termini di provenienza del denaro attuale. Fortunatamente, il suo regno è molto semplice.
Il regno può essere modellato da una matrice booleana 2D, dove l
rappresenta qualcuno che ha ereditato il denaro e O
rappresenta qualcuno che non lo ha fatto. Per esempio:
l O l l
O O O l
l O l O
O O O l
(Sarà sempre un rettangolo)
Nella prossima generazione, il regno è più piccolo (I lupi sono forti!).
La prossima generazione sarebbe simile a questa, sovrapposta alla generazione precedente ( x
è un segnaposto per un discendente nella prossima generazione)
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 discendente esaminerà gli antenati che sono direttamente intorno a loro (Così in alto a sinistra x
vedrà { l
, O
, O
, O
}, chiamato quartiere rettangolare Unaligned )
Se solo un antenato ha ereditato denaro, il discendente erediterà il denaro da loro. Se più di un antenato ha ereditato denaro, si borbotteranno e il discendente finirà per non ereditare denaro. Se nessuno ha ereditato denaro, il discendente non erediterà denaro.
(Più di un discendente può ereditare da un antenato)
Quindi, la prossima generazione sarebbe simile a:
l l O
l l O
l l O
Sfida
Ingresso
Lo stato corrente della generazione, come una matrice di matrici di due valori distinti, in cui le matrici interne sono tutte della stessa lunghezza.
Ad esempio, per l'esempio sopra, potrebbe essere:
[
[True, True, False],
[True, True, False],
[True, True, False]
]
Produzione
Un numero intero che rappresenta il numero di generazioni precedenti univoche in cui la generazione successiva è l'input.
Puoi presumere che la risposta sarà sempre inferiore a 2 ^ 30 - 1. (o 1073741823).
La generazione precedente si chiamerebbe "pre-immagine" e questa sfida sarebbe quella di contare le preimmagini .
punteggio
Questa è una sfida con il codice più veloce , quindi ogni invio verrà testato sul mio computer e l'invio che richiede meno tempo sarà il vincitore.
Esempio di input e output
(Dov'è 1
un discendente che ha ereditato il denaro ed 0
è un discendente che non ha ereditato il denaro)
Ingresso:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
Produzione:
4
Ingresso:
[[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]]
Produzione:
254
Ingresso:
[[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]]
Produzione:
11567