Come risolvere il compito totale su "torna vero per vincere" in 21 caratteri


13

Esiste un sito chiamato "Return True to Win" con attività interessanti per i programmatori Javascript. L'obiettivo è trovare argomenti per una determinata funzione che lo costringono a restituire true.

Di seguito è una delle attività:

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

Gli utenti devono trovare snippet per il valore di xtale causa affinché la funzione restituisca true. Per testare i frammenti, si chiama la funzione con il frammento come parametro (cioè total(<snippet>)).

Ho trovato una soluzione di 22 caratteri:

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

Alcune persone hanno trovato la soluzione in 21 caratteri. Non riesco a scoprire questa soluzione. Qual è la soluzione in 21 caratteri?


3
Dovresti collegare il concorso / la pagina da cui è stata presa l'attività.
Emigna,


2
{valueOf:Math.random}funziona di tanto in tanto ... ma sospetto che violerebbe qualche regola ... (o forse no?)
Arnauld

1
Quelli sono decisamente difficili; dei primi 24, posso solo rispondere 14 ...
Neil

4
Nota per gli sviluppatori salati ... con una funzione return booleana chiamata "total" è come unghia su una lavagna!
scunliffe,

Risposte:


7

21 caratteri

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

La mia battuta originale, che è stata declassata e proposta per la cancellazione:

11 caratteri :)

total=_=>!0

Test:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))

3
Buon lavoro pensando fuori dagli schemi, ma la sfida è finire function total(x) { ... } total(<insert here>)e avere il risultato della total()chiamata true, quindi non credo che funzionerà ...
ETHproductions

@ETHproductions <insert here>-> 0),(true:)
ngn

Ho provato anche quello 0)||(true. Né funziona però, e ora sono totalmente confuso perché c'è un altro livello in cui devi fare 0);(!0o smth in modo simile ...
ETHproductions

La tua nuova soluzione è sorprendente, +1 da me!
ETHproductions

4

Risposta economica

L'ho già menzionato nei commenti, ma non è stato testato. È adesso. Dovrai continuare a inviarlo fino a quando non funziona.

{valueOf:Math.random}

dimostrazione

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


Potresti spiegare di più su come funziona? Non riesco proprio a capire come sia x == xdiventato vero se x viene scelto casualmente ogni volta.
TSH

1
@tsh Il trucco è che valueOfnon viene invocato quando viene elaborato il test di uguaglianza. D'altro canto, gli operatori di confronto si aspettano valori primitivi, che costringono valueOfa essere chiamati. Ecco un test che lo dimostra.
Arnauld,

Ho ottenuto un punteggio elevato di <s> 15 </s> 16 iterazioni !!!
Magic Octopus Urn

@MagicOctopusUrn Dai, puoi fare di meglio! Inserisci la moneta e gioca di nuovo!
Arnauld,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.