Из того, что я видел в PPCG на протяжении всего моего времени, большинство записей JavaScript, включающих функции жирных стрелок, как правило, являются одним из двух лагерей:
Простые, которые способны работать как одно утверждение и возвращать ответ, сразу же, как
x=(a,b)=>a*a+b
Более сложные, которые обычно имеют фигурные скобки из-за использования циклов, и в результате требуют использования
return
оператора .. какp=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
Взяв приведенный выше пример из категории 2 с концепцией фигурных скобок в качестве доказательства концепции ... Будет ли способ изменить этот код (или аналогичный) таким образом, чтобы устранить фигурные скобки, а также return
? Я только спрашиваю об этом, поскольку это потенциально (не говоря уже о том, что это будет происходить постоянно) исключит 8 байтов из кода JS golfer. Есть ли какие-либо методы, которые можно использовать в этом случае? Я пробовал рекурсию, но m=b
утверждение оказалось чем-то вроде багбира, так как я не могу его поколебать.
Для приведенного выше кода, как один гольф, который дальше, чтобы исключить return
утверждение, независимо от того, является ли он гольф короче или нет?
источник
~-m
естьm-1
, так что цикл может быть,for(m=b,a=1;--m;a*=m*m)a%b;
а рекурсивная версия может быть (не проверено)b=>(f=a=>--m?f(a*=m*m):a%b)(1,m=b)
b=>b>1&(f=a=>--a<2||b%a&&f(a))(b)
Злоупотребление Eval.
Это просто. Вместо того:
использование
Eval возвращает последний оцененный оператор. В этом случае, так как последний оцененный оператор был бы
c+=n
, мы остались бы вc
любом случае, сохраняя два байта.В общем:
короче, байтом:
Как примечание, использование могил для вызова eval для возможного сохранения байтов не работает, так как:
эквивалентно
Полезно для запутывания! Не так много для кода гольф.
источник
foo`string`
всегда эквивалентноfoo(["string"])
, просто многие функции затем приводят массив обратно к желаемой строке.