Voilà, j'ai un soucis assez tordu, que je pose là comme une énigme ou un défi:
J'aimerais créer un livre avec que des fausses décimales de Pi dedans, quel intérêt ? Pour vous, aucun, mais pour moi il y en a un , en effet un tel livre pourrais me permettre de, disons le : faire du " mentalisme " .
Bon, voici comment je vois les choses:
- Le livre devra faire 120 pages (nombre pas fixe mais j'aime bien 120)
- Chaque pages sera composées de 10 lignes
- Chaque ligne comptera 8 (ou 10) "décimale de Pi"
Le plus marrant maintenant, il faudrait quand connaissant le n° de page et le n° de ligne je puisse réciter les 8 (ou 10, mais disons 8) décimales qui s'y trouve.
Voici les quelques règles mise en place pour l'instant:
la seed (ou graine): C'est la somme du nombre de la page (21 => 2+1 = 3)
a,b,c,d,e,f,g,h (les 8 chiffres qui compose une ligne)
[Page 21 ; ligne 4]
pour a&b: ligne + seed (si < 10 on rajoute le 0 devant le chiffre: (21 => 2+1 = 3 +4 =7 => 07 )
pour c&d: seed*2 + chiffre précédant ((3*2)+7 = 13 =>1+3 => 4)
pour e&f: ligne*2 + chiffre précédent ((4*2)+1 = 9)
pour g&h: j'en sais rien
Ex:
les chiffres de cette ligne serais : 0;7;4;1;0;9;?;?
voici un algo en python qui récapitule tout ça (pour les plus pythoneux d'entre vous):
- Code: Tout sélectionner
def create_line(s_seed):
ligne = 1
while (ligne <= 10):
ligne_final = []
position_nb = 1
while (position_nb <= 8 ):
if (position_nb < 3):
"""print(f"position_nb {position_nb}")"""
tmp_nb = s_seed + ligne
"""else: print ("none")"""
if (position_nb == 1 and tmp_nb < 10):
tmp_nb = 0
if (position_nb >= 3 and position_nb < 5):
"""print(f"position_nb {position_nb}")"""
tmp_nb = (s_seed * 2) + tmp_nb
if (position_nb == 3 and tmp_nb < 10):
tmp_nb = 0
if (position_nb >= 5 and position_nb < 7):
"""print(f"position_nb {position_nb}")"""
tmp_nb = (ligne * 2) + tmp_nb
if (position_nb == 5 and tmp_nb < 10):
tmp_nb = 0
position_nb = position_nb + 1
if (len(str(tmp_nb)) != 1):
reduce_nb = lambda x: x and (x%9 or 9)
tmp_nb = reduce_nb(tmp_nb)
"""print(f"tmp_nb: {tmp_nb}>9")"""
"""print (f"tmp_nb: {tmp_nb}")"""
ligne_final.append(tmp_nb)
print(ligne_final)
print(f"ligne: {ligne}")
ligne = ligne + 1
print (" ")
def add_number():
for n in range(120):
print (f"N° de page: {n}")
seed = [int(a) for a in str(n)]
"""print(seed)"""
if (sum(seed) > 9):
seed = [int(a) for a in str(sum(seed))]
print(f"la seed est : {sum(seed)}")
s_seed = sum(seed)
create_line(s_seed)
def add_number_solo(n):
print (f"N° de page: {n}")
seed = [int(a) for a in str(n)]
"""print(seed)"""
if (sum(seed) > 9):
seed = [int(a) for a in str(sum(seed))]
print(f"la seed est : {sum(seed)}")
print (type(seed))
print(" ")
s_seed = sum(seed)
create_line(s_seed)
def start():
n = input ("page ?:")
if not n:
print ("all")
add_number()
else:
print ("solo")
add_number_solo(n)
start()
Bien que cette suite de chiffres parait aléatoire, on peut quand même voir des pattern évidant même pour un œil non-averti.
voici quelques exemple de lignes générées:
N° de page: 118
la seed est : 1
[0, 2, 0, 2, 0, 2, 2, 2]
ligne: 1
[0, 3, 0, 2, 0, 4, 4, 4]
ligne: 2
[0, 4, 0, 2, 0, 6, 6, 6]
ligne: 3
[0, 5, 0, 2, 1, 9, 9, 9]
ligne: 4
[0, 6, 0, 2, 3, 4, 4, 4]
ligne: 5
[0, 7, 0, 2, 5, 8, 8, 8]
ligne: 6
[0, 8, 1, 3, 8, 4, 4, 4]
ligne: 7
[0, 9, 2, 4, 2, 9, 9, 9]
ligne: 8
[1, 1, 0, 2, 2, 2, 2, 2]
ligne: 9
[2, 2, 0, 2, 4, 6, 6, 6]
ligne: 10
et donc après cette longue introduction, voici le challenge:
- Comment générer une suite de x chiffres à partir d'un nombre et d'un chiffre et surtout sans pattern évidant d'une ligne à l'autre.
- Les calculs doivent pouvoir être fait de tête (pas de (44 modulo 14 - le nombre d'or), je vous vois venir )
Pour ce défis vous pouvez complètement oublier tout le protocole précédent.
Voilà j'espère que c'est assez clair
Dans tous les cas merci d'avoir lu ce pavé.
Bonne journée à toutes et tous.