Supposons que nous définissions une matrice infinie M
, sur N^2 -> {0, 1}
(où N
commence à la 1
place de 0
) de cette manière:
M(1, 1)
=0
.Pour tout
x > 1
,M(x, 1)
=1
ifx
est premier, et0
sinon.Pour chaque
y > 1
,M(1, y)
= ley
e terme duThue-Morse sequence
.Pour chaque
x, y > 1
,M(x, y)
=M(x, y-1) + M(x-1, y) mod 2
.
La section en haut à gauche 16x16
de cette matrice ressemble (avec des x
lignes et des y
colonnes):
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
Votre tâche consiste à créer un programme qui évaluera la valeur d'une entrée arbitraire dans cette matrice aussi précisément que possible.
Votre programme prendra deux entiers x
et y
en entrée, sous la forme que vous choisirez, et retournera M(x, y)
, qui sera soit 0
ou 1
.
Votre code peut être écrit dans n'importe quelle langue, mais ne doit pas dépasser 64 kilo-octets (65 536 octets) de taille de code source ou 2 Mo (2 097 152 octets) d'utilisation totale de la mémoire. Votre programme doit démarrer avec une mémoire vide (c'est-à-dire qu'il ne peut pas charger de données ailleurs) et s'exécuter indépendamment pour chaque entrée (c'est-à-dire qu'il ne peut pas stocker de données communes pour plusieurs exécutions). Votre programme doit également être en mesure d'évaluer toutes les entrées du 8192x8192
carré supérieur gauche dans un délai raisonnable.
Le programme qui évalue correctement le plus d'entrées dans le 8192 x 8192
carré supérieur gauche sera le gagnant, avec un code plus court faisant office de bris d'égalité.