Was sind Ihre Tipps zum Code-Golfen mit Clojure?
Ziel dieser Frage ist es, eine Liste von Techniken zusammenzustellen, die spezifisch für Clojure sind und bei allgemeinen Code-Golf-Problemen eingesetzt werden können.
Was sind Ihre Tipps zum Code-Golfen mit Clojure?
Ziel dieser Frage ist es, eine Liste von Techniken zusammenzustellen, die spezifisch für Clojure sind und bei allgemeinen Code-Golf-Problemen eingesetzt werden können.
Antworten:
Verwenden Sie die Reader-Syntax für Lambdas.
Also benutze
#(+ % %2 %3)
Anstatt von
(fn [x y z] (+ x y z))
Sie können auch gelegentlich Leerzeichen entfernen:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
gleichbedeutend mit +
.
Zwischen einer Zeichenfolge und irgendetwas anderem:
(println(+"Hello, World!"1))
Zwischen Klammern und allem anderen:
(for[x(range 5)](* x x))
Zwischen einer Zahl und allem anderen als Builtins oder Variablennamen:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Zwischen @
(Dereferenzierung für Atome) und Klammern.
@
let
und einige Leerzeichen entfernen können.
#(+ 1(first%))
=#(+ 1 (first %))
Zeichenfolgen können als Zeichenfolge behandelt werden
zB um die Zeichen in einer Zeichenkette alphabetisch zu sortieren:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
anstelle vonfirst
Wenn Sie das erste Element einer Sammlung abrufen möchten, speichern Sie ein Byte mit (nth ... 0)
over first
:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 Bytes)
([2 3 4]1)
das Element bei Index 1 zurückgegeben wird. Dies sollte von Vorteil sein, wenn beispielsweise das Eingabeformat flexibel ist.
Wenn Sie beispielsweise ein partition
oder frequencies
mehrere Male verwenden müssen, kann es hilfreich sein, sie an ein Einzelbytesymbol in einem let
Makro zu binden . Andererseits lohnt es sich möglicherweise nicht, wenn Sie das nicht benötigen let
, und der Funktionsname ist relativ kurz.