Jak rozwiązać całkowite zadanie „zwrotu true to win” w 21 znakach


13

Istnieje strona o nazwie „Return True to Win” z interesującymi zadaniami dla programistów Javascript. Celem jest znalezienie argumentów dla danej funkcji, które zmuszają ją do zwrócenia wartości true.

Oto jedno z zadań:

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

Użytkownicy muszą znaleźć fragmenty, których wartość xpowoduje, że funkcja zwraca true. Aby przetestować urywki, wywołujesz funkcję z urywkiem jako parametrem (tj total(<snippet>).).

Znalazłem rozwiązanie 22-znakowe:

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

Niektóre osoby znalazły rozwiązanie w 21 znakach. Nie mogę znaleźć tego rozwiązania. Jakie jest rozwiązanie w 21 znakach?


3
Powinieneś połączyć konkurs / stronę, z której pochodzi zadanie.
Emigna


2
{valueOf:Math.random}działa od czasu do czasu ... ale podejrzewam, że naruszałoby to jakąś zasadę ... (a może nie?)
Arnauld

1
Te są zdecydowanie trudne; z pierwszych 24 mogę odpowiedzieć tylko 14 ...
Neil

4
Słona uwaga dewelopera ... funkcja zwracająca wartość logiczną o nazwie „total” jest jak paznokcie na tablicy!
scunliffe

Odpowiedzi:


7

21 znaków

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

Mój oryginalny żart, który został odrzucony i zaproponował usunięcie:

11 znaków :)

total=_=>!0

Test:

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

3
Dobra robota, myślenie nieszablonowe, ale wyzwaniem jest dokończenie function total(x) { ... } total(<insert here>)i uzyskanie wyniku total()rozmowy true, więc nie sądzę, aby to zadziałało ...
ETHproductions

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

Próbowałem tego, a także 0)||(true. Żadna z nich jednak nie działa, a teraz jestem całkowicie zdezorientowany, ponieważ istnieje inny poziom, w którym musisz zrobić 0);(!0lub coś podobnego ...
ETHprodukcje

Twoje nowsze rozwiązanie jest niesamowite, +1 ode mnie!
ETHprodukcje

4

Oszukana odpowiedź

Wspomniałem już o tym w komentarzach, ale nie został przetestowany. To jest teraz. Musisz go przesyłać, dopóki nie zadziała.

{valueOf:Math.random}

Próbny

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


Czy możesz wyjaśnić więcej o tym, jak to działa? Po prostu nie rozumiem, jak to się x == xstało, jeśli x jest wybierane losowo za każdym razem.
tsh

1
@tsh Sztuczka polega na tym, że valueOfnie jest wywoływana podczas przetwarzania testu równości. Z drugiej strony operatory porównania oczekują prymitywnych wartości, które zmuszają valueOfdo wywołania. Oto test, który to pokazuje.
Arnauld,

Mam wysoki wynik <s> 15 </s> 16 iteracji !!!
Magic Octopus Urn

@MagicOctopusUrn Chodź, możesz zrobić więcej niż to! Włóż monetę i graj ponownie!
Arnauld
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.