Le défi: définir x
de manière à ce que l'expression (x == x+2)
soit évaluée comme vraie.
J'ai marqué la question avec C, mais les réponses dans d'autres langues sont les bienvenues, à condition qu'elles soient créatives ou mettent en valeur un aspect intéressant de la langue.
J'ai l'intention d'accepter une solution C, mais d'autres langues peuvent obtenir mon vote.
- Correct - fonctionne sur les implémentations conformes aux normes. Exception - En supposant une implémentation des types de base, s'il s'agit d'une implémentation courante (en supposant par exemple
int
un complément de 32 bits), tout va bien. - Simple - devrait être petit, utilisez les fonctionnalités de base du langage.
- Intéressant - c'est subjectif, je l'avoue. J'ai quelques exemples de ce que je considère intéressant, mais je ne veux pas donner d'indices. Mise à jour : Éviter le préprocesseur est intéressant.
- Rapide - La première bonne réponse sera acceptée.
Après avoir obtenu 60 réponses (je ne m'attendais pas à une telle préparation), il peut être bon de les résumer.
Les 60 réponses se divisent en 7 groupes, dont 3 peuvent être implémentés en C, le reste en autres langues:
- Le préprocesseur C
#define x 2|0
a été suggéré, mais il y a beaucoup d'autres possibilités. - Point flottant. Les grands nombres, l'infini
ou NaNfonctionnent tous. Pointeur arithmétique. Un pointeur sur une énorme structure provoque l'ajout de 2 à boucler.
Le reste ne fonctionne pas avec C:
- Surcharge d'opérateur - A
+
qui n'ajoute pas ou==
qui retourne toujours vrai. - Faire
x
un appel de fonction (certaines langues le permettent sans lax()
syntaxe). Ensuite, il peut retourner quelque chose à chaque fois. - Un type de données à un bit. Puis
x == x+2 (mod 2)
. - Changer
2
- certaines langues vous permettent de l’affecter0
.
add to Set
par la bibliothèque standard, sans +
vous redéfinir , ne rentre pas dans ces 7 catégories, à mon humble avis.
4. Quick
? Vous voulez dire "Celui qui en connaît un et qui a la chance de lire cette question en premier"?