Как решить общую задачу «вернуть истину к победе» за 21 символ

13

Есть сайт под названием «Верните True to Win» с интересными заданиями для программистов на Javascript. Цель состоит в том, чтобы найти аргументы для данной функции, которые вынуждают ее возвращать true.

Следующее является одной из задач:

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

Пользователи должны найти фрагменты для значения, xкоторое заставляет функцию возвращать true. Чтобы проверить фрагменты, вы вызываете функцию с вашим фрагментом в качестве параметра (то есть total(<snippet>)).

Я нашел 22-символьное решение:

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

Некоторые люди нашли решение в 21 символе. Я не могу найти это решение. Какое решение в 21 символ?

Олег
источник
3
Вы должны связать конкурс / страницу, с которой взято задание.
Эминья
1
alf.nu/ReturnTrue
Олег
2
{valueOf:Math.random}время от времени работает ... но я подозреваю, что это нарушит какое-то правило ... (а может и нет?)
Арно
1
Это решительно сложно; из первых 24 я могу ответить только 14 ...
Нил
4
Заметка соленого разработчика ... с функцией возврата «Boolean» под названием «total» - это как гвозди на доске!
scunliffe

Ответы:

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

Arnauld
источник
Не могли бы вы объяснить подробнее, как это работает? Я просто не могу понять, как это x == xстало правдой, если х выбирается случайным образом каждый раз.
TSH
1
@tsh Хитрость в том, что valueOfне вызывается при обработке теста на равенство. С другой стороны, операторы сравнения ожидают примитивные значения, что вызывает valueOfвызов. Вот тест, показывающий это.
Арно
Я получил высокий балл <s> 15 </ s> 16 итераций !!!
Волшебная Урна Осьминога
@MagicOctopusUrn Давай, ты можешь сделать лучше, чем это! Вставьте монету и играйте снова!
Арнаулд