Jakie są Twoje wskazówki dotyczące gry w golfa za pomocą Clojure?
Celem tego pytania jest zebranie listy technik specyficznych dla Clojure i które można zastosować w ogólnych problemach z golfem.
Jakie są Twoje wskazówki dotyczące gry w golfa za pomocą Clojure?
Celem tego pytania jest zebranie listy technik specyficznych dla Clojure i które można zastosować w ogólnych problemach z golfem.
Odpowiedzi:
Użyj składni czytnika dla lambdas.
Więc użyj
#(+ % %2 %3)
zamiast
(fn [x y z] (+ x y z))
Czasami możesz także wyeliminować białe znaki:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
jest równoważne +
.
Między ciągiem a czymkolwiek innym:
(println(+"Hello, World!"1))
Między nawiasami i czymkolwiek innym:
(for[x(range 5)](* x x))
Między liczbą a wszystkim innym niż wbudowane lub nazwy zmiennych:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Pomiędzy @
(dereferencje dla atomów) i nawiasami.
@
let
i pozbyć się niektórych przestrzeni.
#(+ 1(first%))
=#(+ 1 (first %))
Ciągi znaków można traktować jako ciąg znaków
np. aby posortować znaki alfabetycznie:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
zamiastfirst
Aby uzyskać pierwszy element kolekcji, użycie (nth ... 0)
over first
zapisuje bajt:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 bajtów)
([2 3 4]1)
zwraca element o indeksie 1. To powinno być korzystne, jeśli na przykład format wejściowy jest elastyczny.
Na przykład, jeśli chcesz użyć partition
lub frequencies
wiele razy, warto powiązać je z jednobajtowym symbolem w let
makrze. Z drugiej strony może nie być tego warte, jeśli nie potrzebujesz let
inaczej, a nazwa funkcji jest stosunkowo krótka.