International Obfuscated Python Code Competition

1 « J'aime »

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 :wink:

3 « J'aime »

J’aime !

Merci à Hackinscience, je vais partir sur un programme qui affiche (ou calcule :thinking:) 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 !

1 « J'aime »

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)))
1 « J'aime »

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 :smiley:

Vous êtes de grands malades :wink:

Attends de voir ce que je vais pondre :wink:

1 « J'aime »

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 :wink: )

3 « J'aime »

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 ? :confused:

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 !

4 « J'aime »

Et voilà, les résultats sont tombés, merci à vous pour l’idée et l’aide :smiling_face_with_three_hearts:

Je suis désormais un des vainqueurs du premier IOPCC \o/

6 « J'aime »