Trop cool ! J’ai déjà une idée, mais aurai-je la compétence ? C’est moins sûr…
Bon, en fait mon idée était beaucoup trop simple en python :
with open(__file__) as f: #
content = f.read() #
print(content[::-1], end="") #
# )""=dne ,]1-::[tnetnoc(tnirp
# )(daer.f = tnetnoc
# :f sa )__elif__(nepo htiw
Donc, ce programme écrit son propre code source à l’envers qui est capable de refaire la même chose. C’est un code source palindrome…
Je suis déception. Me reste à trouver une idée plus rigolote encore…
EDIT : Bon, en vrai c’est un poil plus complexe que ça à cause des fins de ligne…
EDIT 2 : Voilà, c’est un peu mieux, mais c’est ps simple à voir
J’aime !
Merci à Hackinscience, je vais partir sur un programme qui affiche (ou calcule ) la suite de fibonacci !
Mon implémentation préférée :
def fib(n):
return 1 if n in (0, 1) else fib(n // 2 - 1) * fib(n - n // 2 - 1) + fib(n // 2) * fib(n - n // 2)
Sinon, si ça peut t’inspirer, on peut calculer fib PENDANT qu’on calcule fib, démo minimaliste :
$ cat /tmp/fib.py
def fib(n):
print(n) # très important !
return 1 if n in (0, 1) else fib(n-1)+fib(n-2)
fib(20) # Pas de print sur cette ligne, pas besoin !
$ python /tmp/fib.py | sort | uniq -c | sort -gr
6765 1
4181 2
4181 0
2584 3
1597 4
987 5
610 6
377 7
233 8
144 9
89 10
55 11
34 12
21 13
13 14
8 15
5 16
3 17
2 18
1 20
1 19
il faut lire la colonne de gauche en partant du bas, oui c’est le nombre de fois ou fib(n)
a été appelé, n
étant la colonne de droite.
PS: Marre de taper | sort | uniq -c | sort -gr | head
? Alors : apt install logtop
!
Merci, j’aime bien la solution d’ @entwanne avec son :
a, b = b, a + b
Je vais réfléchir à tout ça.
Parce que l’important n’est pas tant le code de base que le code obscurci !
@mdk Sympa mais 4181 apparaît deux fois
@Mindiell Sinon pour du Fibonacci obfusqué il peut être intéressant de partir de la formule du terme général de la suite.
def fib(n):
return int((1 / 5**.5) * (((1 + 5**.5)/2)**(n+1) - ((1 - 5**.5)/2)**(n+1)))
La faute au cas particulier pour (0, 1)
probablement.
Ca va sans doute me simplifier la vie, mais j’aurai bien aimé un peu de récursivité pour bien faire vomir les juges
Vous êtes de grands malades
Attends de voir ce que je vais pondre
Code source palindrome déposé : iopcc/yp.py at main - iopcc - Le Gitea de l'AFPy
(oui, le nom du programme est aussi un palindrome )
merci @entwanne , j’ai finalement utilisé ta fonction qui ne fait pas de récursion :
- c’est lent la récursion
- je ne peux pas “cacher” le mot clé lambda et je l’utilisais 3 fois. Ca aide pas pour “embellir” le code source final
Me reste à travailler sur la présentation du code maintenant…
Code présenté ! Et ça tourne en python3.11 !
Je suis le seul à participer ?
On va voir si le code est correctement rendu ici !
x,y=[6 ,11]\
,[ 48,67 ];s\
=[ x for x \
in vars ( )]\
;b= vars( )[s[ x[
0]]] ;k= list( (b.
__dict__ .keys (
) )) ;g= getattr(b
,k[x[1]*2]);m=g(
b,k[y[1]+1]);l=g\
(b ,k
[x [1
]* 3] ); i=\
g( b, k[ x[
1] *6]);p =g\
(b ,k[y[0 ]-
x[0]]) ;a=g(g(b,k
[x[0]] )("".join(
m( g(b,k[ x[
0] //2+x[ 1]
]) ,(m( g(
b, k[y[ 0]
-1 ]) ,g(b,k[x [1]+
y[ 1] +1])([*[ g(b,
k[ y[0]-1]) (y)] *3
], [0,x[0], 0])) ))
)) ,"". join(m(g(b
,k [x[0 ]//2+x[1]]
), (m (g
(b ,k [y
[0 ]- 1]
), g( b,
k[x[1] +y[1 ]+1]
)([*[g (b,k [y[0
]- 1])( y) ]*4],[x[0]*- 3,-1
,x [0]* -2 ,x[0]//2]))) )));
p(i((1/5**.5)*(((1+5**.5)/2)**(i(a[1])+1)-((1
-5**.5)/2)**(i(a[1])+1)))) if l(a)>1 else p(1)
# Rabbits are great to compute fibonnacci numbers
# ASCII art freely inspired from Row - https://www.asciiart.eu/animals/rabbits
# (c) 2023 Mindiell
Ca a l’air !
Et voilà, les résultats sont tombés, merci à vous pour l’idée et l’aide
Je suis désormais un des vainqueurs du premier IOPCC \o/
Nouvelle saison : IOPCC 2024 !