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?


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))

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)')


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.