Cómo resolver la tarea total en "return true to win" en 21 caracteres

13

Hay un sitio llamado "Return True to Win" con tareas interesantes para los programadores de Javascript. El objetivo es encontrar argumentos para una función dada que la obligue a devolver verdadero.

La siguiente es una de las tareas:

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

Los usuarios deben encontrar fragmentos para el valor de xeso hacen que la función devuelva verdadero. Para probar fragmentos, llame a la función con su fragmento como parámetro (es decir total(<snippet>)).

Encontré una solución de 22 caracteres:

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

Algunas personas encontraron la solución en 21 caracteres. No puedo encontrar esta solución. ¿Cuál es la solución en 21 caracteres?

Oleg
fuente
3
Debe vincular el concurso / página de la que se extrae la tarea.
Emigna
2
{valueOf:Math.random}funciona de vez en cuando ... pero sospecho que eso infringiría alguna regla ... (¿o tal vez no?)
Arnauld
1
Esos son decididamente difíciles; de los primeros 24, solo puedo responder 14 ...
Neil
44
Nota de desarrollo salada ... tener una función return Boolean llamada "total" es como clavos en una pizarra.
scunliffe

Respuestas:

7

21 caracteres

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

Mi broma original, que fue rechazada y propuesta para su eliminación:

11 caracteres :)

total=_=>!0

Prueba:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))
ngn
fuente
3
Buen trabajo pensando fuera de la caja, pero el desafío es terminar function total(x) { ... } total(<insert here>)y tener el resultado de la total()llamada true, así que no creo que esto funcione ...
ETHproductions
@ETHproductions <insert here>-> 0),(true:)
ngn
Intenté eso, y también 0)||(true. Sin embargo, ninguno de los dos funciona, y ahora estoy totalmente confundido porque hay otro nivel en el que tienes que hacer 0);(!0o algo similar ...
ETHproductions
¡Su nueva solución es increíble, +1 de mi parte!
ETHproductions
4

Respuesta engañosa

Ya lo he mencionado en los comentarios, pero no fue probado. Esto es ahora. Tendrás que seguir enviándolo hasta que funcione.

{valueOf:Math.random}

Manifestación

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
fuente
¿Podría explicar más sobre cómo funciona esto? Simplemente no puedo entender cómo se x == xhizo realidad si x se elige al azar cada vez.
tsh
1
@tsh El truco es que valueOfno se invoca cuando se procesa la prueba de igualdad. Por otro lado, los operadores de comparación esperan valores primitivos, que obligan valueOfa ser llamados. Aquí hay una prueba que muestra eso.
Arnauld
Obtuve un puntaje alto de <s> 15 </s> 16 iteraciones !!!
Urna de pulpo mágico
@MagicOctopusUrn ¡Vamos, puedes hacerlo mejor que eso! ¡Inserta la moneda y juega de nuevo!
Arnauld