Як вирішити загальну задачу на тему «повернути правду до перемоги» у 21 діаграмі


13

Існує сайт під назвою «Повертайся правдою до перемоги» з цікавими завданнями для програмістів Javascript. Мета - знайти аргументи на задану функцію, які змушують її повернути істину.

Наступне - одне із завдань:

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

Користувачі повинні знайти фрагменти для значення, xяке призведе до повернення функції true. Щоб перевірити фрагменти, ви викликаєте функцію разом із фрагментом як параметр (тобто total(<snippet>)).

Я знайшов рішення з 22 символами:

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

Деякі люди знайшли рішення у 21 символіці. Я не можу знайти це рішення. Яке рішення в 21 символі?


3
Ви повинні пов’язати конкурс / сторінку, з якої взято завдання.
Емінья


2
{valueOf:Math.random}працює час від часу ... але я підозрюю, що це порушило б якесь правило ... (а може і ні?)
Арнольд

1
Це рішуче хитрість; з перших 24 я можу відповісти лише 14 ...
Ніл

4
Примітка солоної розробки ... мати функцію повернення булева, яка називається "тотальною" - це як цвяхи на дошці!
сканліфф

Відповіді:


7

21 символ

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

Мій оригінальний анекдот, який оскаржив і запропонував до видалення:

11 годин :)

total=_=>!0

Тест:

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

3
Хороша робота мислення поза коробки, але завдання полягає в тому, щоб закінчити function total(x) { ... } total(<insert here>)і є результат total()виклику бути true, тому я не думаю , що це буде працювати ...
ETHproductions

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

Спробував це, і теж 0)||(true. Ні робота, і тепер я абсолютно збентежена, тому що є ще один рівень, коли ти повинен робити 0);(!0чи щось подібне ...
ETHproductions

Ваше нове рішення - дивовижне, +1 від мене!
ETHproductions

4

Хитра відповідь

Я вже згадував це в коментарях, але він не перевірявся. Це зараз. Вам доведеться продовжувати надсилати, поки це не працює.

{valueOf:Math.random}

Демо

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


Не могли б ви пояснити більше, як це працює? Я просто не можу зрозуміти, як це x == xстало істиною, якщо кожен раз обирається випадковим чином.
tsh

1
@tsh Хитрість полягає в тому, що valueOfне використовується при обробці тесту на рівність. З іншого боку, оператори порівняння очікують примітивних значень, які змушують valueOfназиватися. Ось тест, який показує це.
Арнольд

Я отримав високий бал <s> 15 </s> 16 ітерацій !!!
Чарівний восьминога Урна

@MagicOctopusUrn Давай, ти можеш зробити краще! Вставте монету і грайте знову!
Арнольд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.