AAfroCodeurs
Hacker culturelTerminée200 points

Le développeur qui ne disait jamais la vérité

Imaginée par @Obed · 0 résolution(s)

Un développeur a laissé un programme étrange avant de disparaître. Le programme affiche un message différent selon la valeur qu’on lui donne. function secret($x) { if ($x == "0") { return "FAUX"; } if ($x == 0) { return "VRAI"; } return "INCONNU"; } Sur son bureau, une seule note : « Je cherche une valeur qui soit à la fois vraie et fausse. »

Quelle valeur faut-il fournir à la fonction secret() pour obtenir le mot VRAI tout en faisant en sorte que la première condition soit également considérée comme vraie ?

Explication de la solution

L'énigme repose sur une particularité de la comparaison faible en PHP avec ==.

La valeur 0 peut être comparée à la chaîne "0" avec == et être considérée comme égale.

Ainsi :

0 == "0" // true

Mais il y a un piège : avec le code présenté, la première condition serait donc exécutée avant la seconde et retournerait FAUX.

La véritable solution consiste donc à comprendre que l'ordre des conditions rend l'énigme impossible telle quelle.

L'énigme teste ainsi une compétence importante chez un développeur : ne pas seulement chercher une valeur, mais vérifier le comportement réel du programme.

La bonne réponse est donc :

Aucune valeur.

La contradiction vient du fait que toute valeur satisfaisant la première condition avec == sera interceptée avant d'atteindre la seconde.

Le développeur ne cherchait pas une valeur magique : il cherchait à voir si le joueur remarquerait le bug logique.