— Dis tu vas m’appeler à chaque fois tu as un problème à résoudre à l’aide d’une IA ?
— Non, mais celui-là, j’ai pensé qu’il t’intéresserait. Je te donne juste quelques cas de tests. À gauche de la flèche, l’entrée, à droite la sortie attendue :

1 → △
2 → 2△
4 → 2△4△
35 → 2△4△6△8△11△14△17△20△23△26△29△32△35△
100 → △3△5△7△9△12△15△18△21△24△27△30△33△36△39△42△45△48△51△54△57△60△63△66△69△72△75△78△81△84△87△90△93△96△100△

— Ah ah ! C’est rigolo. Attends…
— J’attends.
— C’est pas une liste auto-référentielle ou un truc du genre ?
— Correct. Si tu devais décrire la spécification de ce programme, tu dirais quoi ?
— Hmmm.

Pour chaque ligne de son entrée, le programme lit un nombre entier N, et produit en sortie une séquence i△j△…k△, ou bien une séquence △i△j△…k△ telles que

  • la longueur totale de la chaîne en sortie égale N
  • le nombre i,j, etc. qui précède un △ indique la position exacte de ce △ dans la chaîne de caractères
  • le dernier △ se trouve exactement à la position N dans la chaîne de caractères (en comptant à partir de 1)

Par exemple pour N = 11, tu fais 11△, précédé de 8△, précédé de 6△, précédé de 4△ précédé de 2△.
Pour N = 5, tu fais 5△, précédé de 3△, précédé de △. Et ton IA n’arrive pas à coder ça ?

— Je ne lui ai pas encore demandé. Pour l’instant je lui demande des nouveaux jeux d’essai et une spécification, à partir des 5 exemples de départ.
— Et alors ?
— Ce qu’elle produit n’est pas loin d’être correct. Mais c’est incorrect.
— Tu ne crois pas que tu lui en demande un peu trop ?
— Elle va bientôt me remplacer. Elle devrait savoir faire, non ?
— La mauvaise foi ! Pas cette version là, mais attends encore une ou deux versions, et tu vas voir.
— Ouais. En attendant, toi, est-ce tu saurais produire un jeu d’essai comportant des cas supplémentaires ?
— Bah je crois bien que oui, hein. Tu veux dire, écrire des cas ou bien écrire un programme qui les écrit ?
— Comme tu veux.
— Dans le langage que je veux ?
— Dans le langage que tu veux.
— Alors en Haskell.
— Ok.
— …

A few moments later

— Voilà :

ghci> foo n = show n ++ " → " ++ bar "" n where bar s 0 = s ; bar s 1 = bar ('△':s) 0 ; bar s n = bar (t++s) m where t = (show n) ++ "△"; m = n - length t

ghci> putStrLn $ unlines $ map foo [1,2,3,5,10,42,105]

1 → △
2 → 2△
3 → △3△
5 → △3△5△
10 → △3△5△7△10△
42 → △3△5△7△9△12△15△18△21△24△27△30△33△36△39△42△
105 → △3△5△7△10△13△16△19△22△25△28△31△34△37△40△43△46△49△52△55△58△61△64△67△70△73△76△79△82△85△88△91△94△97△101△105△

— En même pas 30 minutes, tu vas plus vite que mon IA, qui ne sait pas encore produire un jeu d’essai correct alors que je l’aide depuis 2 heures.
— Suffit de demander. Mais en fait, oui tu as raison de m’appeler quand c’est comme ça, et que tu es perdu. 😁

dev-2-ai-0

Publié sur LinkedIn le 18/05/2025