So lösen Sie die Gesamtaufgabe "Return True to Win" in 21 Zeichen

13

Es gibt eine Site namens "Return True to Win" mit interessanten Aufgaben für Javascript-Programmierer. Das Ziel ist es, Argumente für eine bestimmte Funktion zu finden, die die Rückgabe von true erzwingen.

Folgendes ist eine der Aufgaben:

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

Die Benutzer müssen Schnipsel für den Wert finden x, die bewirken, dass die Funktion true zurückgibt. Um Snippets zu testen, rufen Sie die Funktion mit Ihrem Snippet als Parameter auf (dh total(<snippet>)).

Ich habe eine Lösung mit 22 Zeichen gefunden:

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

Einige Leute fanden die Lösung in 21 Zeichen. Ich kann diese Lösung nicht herausfinden. Was ist die Lösung in 21 Zeichen?

Oleg
quelle
3
Sie sollten den Wettbewerb / die Seite, von der / der die Aufgabe stammt, verlinken.
Emigna
2
{valueOf:Math.random}arbeitet von Zeit zu Zeit ... aber ich vermute, dass dies gegen eine Regel verstoßen würde ... (oder vielleicht auch nicht?)
Arnauld
1
Die sind ausgesprochen knifflig; Von den ersten 24 kann ich nur 14 beantworten ...
Neil
4
Salzige Dev-Note ... eine Funktion zurückgeben zu lassen, die als "total" bezeichnet wird, ist wie Nägel auf einer Tafel!
Scunliffe

Antworten:

7

21 Zeichen

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

Mein ursprünglicher Witz, der abgelehnt und zum Löschen vorgeschlagen wurde:

11 Zeichen :)

total=_=>!0

Prüfung:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))
ngn
quelle
3
Gute Arbeit, über den Tellerrand hinaus zu denken, aber die Herausforderung besteht darin, das Ziel zu erreichen function total(x) { ... } total(<insert here>)und das Ergebnis des total()Anrufs zu true
erzielen.
@ETHproductions <insert here>-> 0),(true:)
ngn
Versuchte das und auch 0)||(true. Keine der beiden Arbeiten funktioniert, und jetzt bin ich total verwirrt, weil es eine andere Ebene gibt, auf der Sie 0);(!0etwas Ähnliches tun oder tun müssen ...
ETHproductions
Ihre neuere Lösung ist erstaunlich, +1 von mir!
ETHproductions
4

Betrügerische Antwort

Ich habe es bereits in den Kommentaren erwähnt, aber es wurde nicht getestet. Ist das jetzt. Sie müssen es so lange einreichen, bis es funktioniert.

{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
quelle
Könnten Sie mehr darüber erklären, wie das funktioniert? Ich kann einfach nicht verstehen, wie das x == xwahr wurde, wenn x jedes Mal zufällig ausgewählt wird.
Dienstag,
1
@tsh Der Trick ist, dass valueOfnicht aufgerufen wird, wenn der Gleichheitstest verarbeitet wird. Auf der anderen Seite erwarten Vergleichsoperatoren primitive Werte, die valueOfaufgerufen werden müssen. Hier ist ein Test , der das zeigt.
Arnauld
Ich habe eine hohe Punktzahl von <s> 15 </ s> 16 Iterationen !!!
Magic Octopus Urn
@MagicOctopusUrn Komm schon, du kannst es besser machen! Münze einwerfen und nochmal spielen!
Arnauld