D'après ce que j'ai vu tout au long de mon séjour ici sur PPCG, la plupart des entrées JavaScript impliquant des fonctions de flèche grasse ont tendance à être l'un des deux camps:
Les simples qui sont capables de fonctionner comme une seule déclaration et de retourner une réponse, tout de suite, comme
x=(a,b)=>a*a+b
Les plus complexes qui ont généralement des accolades en raison de l'utilisation de boucles, et nécessitent par conséquent l'utilisation d'une
return
instruction .. commep=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
En prenant l'exemple ci-dessus de la catégorie 2 avec le concept d'accolades comme preuve de concept ... Y aurait-il un moyen de rejouer ce code (ou similaire) comme celui-ci afin d'éliminer les accolades ainsi que le return
? Je pose seulement cette question car cela pourrait potentiellement (ne pas dire que cela se produira tout le temps) éliminer 8 octets du code d'un golfeur JS. Y a-t-il des techniques que l'on pourrait utiliser dans ce cas? J'ai essayé la récursivité, mais la m=b
déclaration s'est avérée être un peu un bugbear, car je n'arrive pas à la secouer.
Pour le code ci-dessus, comment golferait-on plus loin afin d'éliminer la return
déclaration, qu'il joue au golf plus court ou non?
la source
~-m
estm-1
, donc la boucle peut êtrefor(m=b,a=1;--m;a*=m*m)a%b;
et la version récursive peut être (non testée)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)
Abus eval.
C'est simple. Au lieu de:
Utilisation
Eval renvoie la dernière instruction évaluée. Dans ce cas, puisque la dernière instruction évaluée serait
c+=n
, nous nous retrouverions dec
toute façon, en économisant deux octets.En général:
est plus court que cela, d'un octet:
Notez que l'utilisation de graves pour appeler eval pour éventuellement économiser des octets ne fonctionne pas, car:
est équivalent à
Utile pour l'obscurcissement! Pas tant pour le golf de code.
la source
foo`string`
est toujours équivalent àfoo(["string"])
, c'est juste que de nombreuses fonctions puis convertissent le tableau dans la chaîne souhaitée.