Por lo que he visto durante mi tiempo aquí en PPCG, la mayoría de las entradas de JavaScript que involucran funciones de flecha gruesa tienden a ser uno de dos campos:
Los simples que son capaces de ejecutarse como una sola declaración y devolver una respuesta, de inmediato, como
x=(a,b)=>a*a+b
Los más complejos que generalmente tienen llaves debido al uso de bucles, y como resultado requieren el uso de una
return
declaración ... comop=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
Tomando el ejemplo anterior de la categoría 2 con el concepto de llaves como prueba de concepto ... ¿Habría una forma de re-golf este código (o similar) como este para eliminar las llaves y el return
? Solo pregunto esto, ya que esto podría potencialmente (sin decir que esto sucederá todo el tiempo) eliminar 8 bytes del código de un golfista JS. ¿Hay alguna técnica que se pueda usar en este caso? He intentado la recursividad, pero la m=b
declaración ha demostrado ser un poco aburrida, ya que parece que no puedo sacudirla.
Para el código anterior, ¿cómo se puede jugar más golf para eliminar la return
afirmación, independientemente de si el golf es más corto o no?
fuente
~-m
es decirm-1
, el bucle puede serfor(m=b,a=1;--m;a*=m*m)a%b;
y la versión recursiva puede ser (no probada)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)
Abuso eval.
Es simple. En lugar de:
Utilizar
Eval devuelve la última declaración evaluada. En este caso, dado que la última declaración evaluada sería
c+=n
, nos quedaría dec
todos modos, ahorrando dos bytes.En general:
es más corto que esto, por un byte:
Como nota, el uso de tumbas para llamar a eval para posiblemente guardar bytes no funciona, ya que:
es equivalente a
Útil para la ofuscación! No tanto por el código de golf.
fuente
foo`string`
siempre es equivalente afoo(["string"])
, es solo que muchas funciones luego vuelven la matriz a la cadena deseada.