Как решить общую задачу «вернуть истину к победе» за 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
Вы должны связать конкурс / страницу, с которой взято задание.
Эминья


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


Не могли бы вы объяснить подробнее, как это работает? Я просто не могу понять, как это x == xстало правдой, если х выбирается случайным образом каждый раз.
TSH

1
@tsh Хитрость в том, что valueOfне вызывается при обработке теста на равенство. С другой стороны, операторы сравнения ожидают примитивные значения, что вызывает valueOfвызов. Вот тест, показывающий это.
Арно

Я получил высокий балл <s> 15 </ s> 16 итераций !!!
Волшебная Урна Осьминога

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