Nach dem, was ich während meiner Zeit bei PPCG gesehen habe, handelt es sich bei den meisten JavaScript-Einträgen mit Fettpfeil-Funktionen in der Regel um eines von zwei Camps:
Die einfachen, die in der Lage sind, als eine einzige Aussage zu laufen und eine Antwort direkt von der Fledermaus zurückzusenden, mögen
x=(a,b)=>a*a+b
Die komplexeren, die normalerweise geschweifte Klammern haben, weil Schleifen verwendet werden und daher die Verwendung einer
return
Anweisung erfordern .. wiep=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b}
Nehmen wir das obige Beispiel aus Kategorie 2 mit dem Konzept der geschweiften Klammern als Proof-of-Concept ... Gibt es eine Möglichkeit, diesen Code (oder einen ähnlichen) so erneut zu spielen, dass sowohl die geschweiften Klammern als auch die geschweiften Klammern entfernt werden return
? Ich frage dies nur, da dies potenziell (ohne zu sagen, dass dies die ganze Zeit passieren wird) 8 Bytes aus dem Code eines JS-Golfers eliminieren könnte. Gibt es Techniken, die man in diesem Fall verwenden könnte? Ich habe es mit Rekursion versucht, aber die m=b
Aussage hat sich als Bugbear erwiesen, da ich sie scheinbar nicht erschüttern kann.
Wie würde man mit dem obigen Code weiter Golf spielen, um die return
Aussage zu eliminieren , unabhängig davon, ob es kürzer ist oder nicht?
quelle
~-m
istm-1
, so kann die Schleife seinfor(m=b,a=1;--m;a*=m*m)a%b;
und die rekursive Version kann sein (ungetestet)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)
Missbrauch bewerten.
Es ist einfach. Anstatt von:
Verwenden
Eval gibt die zuletzt ausgewertete Anweisung zurück. In diesem Fall würden
c+=n
wir , da die letzte ausgewertete Anweisung wäre ,c
ohnehin zwei Bytes einsparen.Allgemein:
ist um ein Byte kürzer als dieses:
Hinweis: Das Aufrufen von eval mit graves, um möglicherweise Bytes zu speichern, funktioniert nicht, da:
ist äquivalent zu
Hilfreich zur Verschleierung! Nicht so sehr für Code Golf.
quelle
foo`string`
ist immer gleichbedeutend mitfoo(["string"])
, es ist nur so, dass viele Funktionen das Array dann in den gewünschten String zurücksetzen.