Comment résoudre la tâche totale sur «retourner vrai pour gagner» en 21 caractères

13

Il existe un site appelé "Return True to Win" avec des tâches intéressantes pour les programmeurs Javascript. Le but est de trouver des arguments à une fonction donnée qui la forcent à retourner true.

Voici l'une des tâches:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}

Les utilisateurs doivent trouver des extraits de code pour xque la fonction renvoie true. Pour tester des extraits, vous appelez la fonction avec votre extrait comme paramètre (c. total(<snippet>)-à-d.).

J'ai trouvé une solution à 22 caractères:

{valueOf:_=>n++%3},n=0

Certaines personnes ont trouvé la solution en 21 caractères. Je ne peux pas trouver cette solution. Quelle est la solution en 21 caractères?

Oleg
la source
3
Vous devez lier le concours / la page d'où provient la tâche.
Emigna
2
{valueOf:Math.random}fonctionne de temps en temps ... mais je soupçonne que cela enfreindrait une règle ... (ou peut-être pas?)
Arnauld
1
Celles-ci sont décidément délicates; sur les 24 premiers, je ne peux répondre que 14 ...
Neil
4
Salty dev note ... avoir une fonction de retour booléenne appelée «total», c'est comme des clous sur un tableau!
scunliffe

Réponses:

7

21 caractères

{valueOf:n=_=>n=2<<n}

Ma blague originale, qui a été rejetée et proposée à la suppression:

11 caractères :)

total=_=>!0

Tester:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))
ngn
la source
3
Bon travail en dehors des sentiers battus, mais le défi est de terminer function total(x) { ... } total(<insert here>)et de faire en sorte que le résultat de l' total()appel soit true, donc je ne pense pas que cela fonctionnera ...
ETHproductions
@ETHproductions <insert here>-> 0),(true:)
ngn
J'ai essayé ça, et aussi 0)||(true. Aucun des deux ne fonctionne cependant, et maintenant je suis totalement confus car il y a un autre niveau où vous devez faire 0);(!0ou faire des choses similaires ...
ETHproductions
Votre nouvelle solution est incroyable, +1 de moi!
ETHproductions
4

Réponse tricheuse

Je l'ai déjà mentionné dans les commentaires, mais il n'a pas été testé. C'est maintenant. Vous devrez continuer à le soumettre jusqu'à ce que cela fonctionne.

{valueOf:Math.random}

Démo

function total(x) {
  return (x < x) && (x == x) && (x > x);
}

for(i = 1; !total({valueOf:Math.random}); i++);

console.log('Returned true after ' + i + ' iteration(s)')

Arnauld
la source
Pourriez-vous expliquer davantage comment cela fonctionne? Je ne peux tout simplement pas comprendre comment le x == xdevient vrai si x est choisi au hasard à chaque fois.
tsh
1
@tsh L'astuce est qu'elle valueOfn'est pas invoquée lors du traitement du test d'égalité. D'un autre côté, les opérateurs de comparaison attendent des valeurs primitives, ce qui oblige valueOfà être appelé. Voici un test qui le montre.
Arnauld
J'ai obtenu un score élevé de <s> 15 </s> 16 itérations !!!
Urne de poulpe magique
@MagicOctopusUrn Allez, vous pouvez faire mieux que ça! Insérez la pièce et jouez à nouveau!
Arnauld