Como resolver a tarefa total em "return true to win" em 21 caracteres

13

Existe um site chamado "Return True to Win", com tarefas interessantes para programadores Javascript. O objetivo é encontrar argumentos para uma determinada função que a força a retornar verdadeira.

A seguir, uma das tarefas:

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

Os usuários devem encontrar trechos para o valor xque fazem com que a função retorne true. Para testar trechos, você chama a função com seu trecho como parâmetro (ou seja total(<snippet>)).

Encontrei uma solução de 22 caracteres:

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

Algumas pessoas encontraram a solução em 21 caracteres. Não consigo encontrar esta solução. Qual é a solução em 21 caracteres?

Oleg
fonte
3
Você deve vincular o concurso / página da qual a tarefa foi retirada.
Emigna
2
{valueOf:Math.random}funciona de vez em quando ... mas eu suspeito que possa infringir alguma regra ... (ou talvez não?)
Arnauld
1
Essas são decididamente complicadas; fora do primeiro 24, só posso responder a 14 ...
Neil
4
Nota do desenvolvedor salgado ... ter uma função de retorno Booleano chamado "total" é como unhas em um quadro-negro!
scunliffe

Respostas:

7

21 caracteres

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

Minha piada original, que foi rebaixada e proposta para exclusão:

11 caracteres :)

total=_=>!0

Teste:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))
ngn
fonte
3
Bom trabalho de pensar fora da caixa, mas o desafio é terminar function total(x) { ... } total(<insert here>)e ter o resultado da total()chamada ser true, então eu não acho que isso vai funcionar ...
ETHproductions
@ETHproductions <insert here>-> 0),(true:)
ngn
Tentei isso, e também 0)||(true. No entanto, nem trabalho, e agora estou totalmente confuso, porque há outro nível em que você tem que fazer 0);(!0ou
parecer algo
Sua solução mais recente é incrível, +1 de mim!
ETHproductions
4

Resposta Cheaty

Eu já mencionei isso nos comentários, mas não foi testado. É agora. Você precisará enviá-lo até que funcione.

{valueOf:Math.random}

Demo

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
fonte
Você poderia explicar mais sobre como isso funciona? Eu simplesmente não consigo entender como isso x == xse tornou verdadeiro se x é escolhido aleatoriamente todas as vezes.
tsh
1
@tsh O truque é que valueOfnão é invocado quando o teste de igualdade é processado. Por outro lado, os operadores de comparação esperam valores primitivos, o que força valueOfa ser chamado. Aqui está um teste mostrando isso.
Arnauld
Eu tenho uma pontuação alta de <s> 15 </s> 16 iterações !!!
Magic Octopus Urn
@MagicOctopusUrn Vamos lá, você pode fazer melhor que isso! Insira moedas e jogue novamente!
Arnauld