Pelo que eu vi ao longo do meu tempo aqui no PPCG, a maioria das entradas JavaScript envolvendo funções de seta gorda tendem a ser um dos dois campos:
Os simples que são capazes de executar como uma única declaração e retornar uma resposta, logo de cara, como
x=(a,b)=>a*a+b
Os mais complexos, que geralmente têm chavetas por causa do uso de loops e, como resultado, exigem o uso de uma
return
declaração.p=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
Tomando o exemplo acima da categoria 2 com o conceito de chaves como prova de conceito ... haveria uma maneira de re-golf este código (ou similar) como este, a fim de eliminar as chaves assim como o return
? Só estou perguntando isso, pois isso poderia potencialmente (sem dizer que isso acontecerá o tempo todo) eliminar 8 bytes do código de um jogador de golfe JS. Existem técnicas que alguém poderia usar nesse caso? Eu tentei recursão, mas a m=b
declaração provou ser um pouco assustadora, pois não consigo mexer.
Para o código acima, como alguém jogaria mais para eliminar a return
declaração, independentemente de jogar mais ou menos?
fonte
~-m
ém-1
, para que o loop pode serfor(m=b,a=1;--m;a*=m*m)a%b;
ea versão recursiva pode ser (não testado)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)
Avaliação de abuso.
É simples. Ao invés de:
Usar
Eval retorna a última instrução avaliada. Nesse caso, como seria a última instrução avaliada
c+=n
, ficaria assimc
, economizando dois bytes.Em geral:
é mais curto que isso, por um byte:
Como uma observação, o uso de sepulturas para chamar eval e possivelmente salvar bytes não funciona, pois:
é equivalente a
Útil para ofuscação! Não tanto para o código de golfe.
fonte
foo`string`
é sempre equivalente afoo(["string"])
, é apenas que muitas funções convertem o array de volta na string desejada.