Supponiamo di definire una matrice infinita M
, su N^2 -> {0, 1}
(da dove N
inizia 1
invece che 0
) in questo modo:
M(1, 1)
=0
.Per ogni
x > 1
,M(x, 1)
=1
ifx
è primo, e0
altrimenti.Per ogni
y > 1
,M(1, y)
= ily
esimo termine inThue-Morse sequence
.Per ogni
x, y > 1
,M(x, y)
=M(x, y-1) + M(x-1, y) mod 2
.
La 16x16
sezione in alto a sinistra di questa matrice assomiglia (con x
essere righe ed y
essere colonne):
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1
1 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0
0 1 1 0 1 0 1 1 1 1 1 0 0 0 1 1
1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 1
0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1
1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1
0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1
0 1 0 1 0 1 1 1 1 1 0 0 0 0 0 1
0 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0
1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1
0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1
1 1 0 0 1 0 1 1 0 1 1 1 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1
0 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1
0 1 1 0 1 0 0 0 0 1 0 0 1 0 0 1
Il tuo compito è costruire un programma che valuti il valore di una voce arbitraria in questa matrice nel modo più accurato possibile.
Il tuo programma prenderà due numeri interi x
e y
come input, in qualsiasi forma tu scelga, e restituirà M(x, y)
, che sarà 0
o 1
.
Il codice può essere scritto in qualsiasi lingua, ma non deve superare 64 kilobyte (65.536 byte) di dimensioni del codice sorgente o 2 MB (2.097.152 byte) di utilizzo della memoria totale. Il programma deve iniziare con memoria vuota (ovvero non può caricare dati da qualche altra parte) ed essere eseguito in modo indipendente per ciascun input (ovvero, potrebbe non memorizzare dati comuni per più esecuzioni). Il programma deve inoltre essere in grado di valutare tutte le voci nel 8192x8192
riquadro in alto a sinistra in un periodo di tempo ragionevole.
Il programma che valuterà correttamente la maggior parte delle voci nel 8192 x 8192
riquadro in alto a sinistra sarà il vincitore, con un codice più breve che fungerà da pareggio.