Bagaimana menyelesaikan tugas total pada "mengembalikan yang benar untuk menang" dalam 21 karakter

13

Ada situs yang disebut "Return True to Win" dengan tugas menarik untuk programmer Javascript. Tujuannya adalah untuk menemukan argumen ke fungsi yang diberikan yang memaksanya untuk mengembalikan nilai true.

Berikut ini adalah salah satu tugas:

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

Pengguna harus menemukan cuplikan untuk nilai xyang menyebabkan fungsi mengembalikan true. Untuk menguji snippet, Anda memanggil fungsi dengan snippet Anda sebagai parameter (yaitu total(<snippet>)).

Saya menemukan solusi 22 karakter:

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

Beberapa orang menemukan solusinya dalam 21 karakter. Saya tidak dapat menemukan solusi ini. Apa solusinya dalam 21 karakter?

Oleg
sumber
3
Anda harus menautkan kontes / halaman tempat tugas diambil.
Emigna
2
{valueOf:Math.random}bekerja dari waktu ke waktu ... tapi saya menduga itu akan melanggar beberapa aturan ... (atau mungkin tidak?)
Arnauld
1
Itu jelas-jelas rumit; dari 24 pertama, saya hanya bisa menjawab 14 ...
Neil
4
Catatan dev asin ... memiliki fungsi mengembalikan Boolean disebut "total" seperti paku di papan tulis!
scunliffe

Jawaban:

7

21 karakter

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

Lelucon asli saya, yang diturunkan dan diusulkan untuk dihapus:

11 karakter :)

total=_=>!0

Uji:

function total(x) {
  return (x < x) && (x == x) && (x > x);
}
var arg = total=_=>!0
console.log(total(arg))
ngn
sumber
3
Kerja bagus di luar kotak, tetapi tantangannya adalah menyelesaikan function total(x) { ... } total(<insert here>)dan menerima hasil dari total()panggilan itu true, jadi saya tidak berpikir ini akan berhasil ...
ETHproduksi
@ETHproductions <insert here>-> 0),(true:)
ngn
Mencoba itu, dan juga 0)||(true. Tidak ada yang bekerja, dan sekarang saya benar-benar bingung karena ada tingkat lain di mana Anda harus melakukan 0);(!0atau
bertempur
Solusi Anda yang lebih baru luar biasa, +1 dari saya!
ETHproduksi
4

Jawaban Cheaty

Saya sudah menyebutkannya di komentar, tetapi tidak diuji. Sekarang. Anda harus terus mengirimkannya sampai berfungsi.

{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
sumber
Bisakah Anda menjelaskan lebih lanjut tentang cara kerjanya? Saya tidak bisa mengerti bagaimana x == xmenjadi benar jika x dipilih secara acak setiap waktu.
tsh
1
@tsh Kuncinya adalah bahwa valueOftidak dipanggil ketika tes kesetaraan diproses. Di sisi lain, operator perbandingan mengharapkan nilai-nilai primitif, yang memaksa valueOfuntuk dipanggil. Ini adalah tes yang menunjukkan hal itu.
Arnauld
Saya mendapat skor tinggi <s> 15 </s> 16 iterasi !!!
Magic Gurita Guci
@MagicOctopusUrn Ayo, Anda bisa melakukan lebih baik dari itu! Masukkan koin dan mainkan lagi!
Arnauld