Możesz także używać wektorów jako funkcji, więc ([2 3 4]1)zwraca element o indeksie 1. To powinno być korzystne, jeśli na przykład format wejściowy jest elastyczny.
NikoNyrh,
1
Użyj zastosowania zamiast zmniejszania
Na przykład #(apply + %)jest o jeden bajt krótszy niż #(reduce + %).
ifPodczas testowania równości używaj map zamiast s
;; if n=3 then A else B
(if (= 3 n) A B) ; (if(=3n)AB)
({3 A} n B) ; ({3A}nB) -> -3 chars
;; if n=2 or n=3 then A else B
(if (#{2 3} n) A B) ; (if(#{23}n)AB)
({2 A 3 A} n B) ; ({2A3A}nB) -> -4 chars
Powiąż długie nazwy funkcji w let z jednobajtowym symbolem
Na przykład, jeśli chcesz użyć partitionlub frequencieswiele razy, warto powiązać je z jednobajtowym symbolem w letmakrze. Z drugiej strony może nie być tego warte, jeśli nie potrzebujesz letinaczej, a nazwa funkcji jest stosunkowo krótka.
Odpowiedzi:
Użyj składni czytnika dla lambdas.
Więc użyj
zamiast
Czasami możesz także wyeliminować białe znaki:
źródło
#(+ % %2 %3)
jest równoważne+
.Gdzie możesz usunąć białe znaki:
Między ciągiem a czymkolwiek innym:
Między nawiasami i czymkolwiek innym:
Między liczbą a wszystkim innym niż wbudowane lub nazwy zmiennych:
Pomiędzy
@
(dereferencje dla atomów) i nawiasami.źródło
@
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:
źródło
Użyj
nth ... 0
zamiastfirst
Aby uzyskać pierwszy element kolekcji, użycie
(nth ... 0)
overfirst
zapisuje bajt:źródło
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.Użyj zastosowania zamiast zmniejszania
Na przykład
#(apply + %)
jest o jeden bajt krótszy niż#(reduce + %)
.źródło
Unikaj let, jeśli już masz
Na przykład:
#(for[a[(sort %)]...)
zamiast#(let[a(sort %)](for ...))
.For ma również
:let
konstrukcję, ale jest zbyt gadatliwy dla golfa kodu.źródło
Użyj
+
i-
zamiastinc
idec
To oszczędza 1 bajt, jeśli używasz
inc
/dec
na wyrażenie z parens:źródło
if
Podczas testowania równości używaj map zamiast sźródło
Powiąż długie nazwy funkcji w let z jednobajtowym symbolem
Na przykład, jeśli chcesz użyć
partition
lubfrequencies
wiele razy, warto powiązać je z jednobajtowym symbolem wlet
makrze. Z drugiej strony może nie być tego warte, jeśli nie potrzebujeszlet
inaczej, a nazwa funkcji jest stosunkowo krótka.źródło
Użyj zamiast zamiast mapy
Na przykład
#(for[i %](Math/abs i))
jest znacznie krótszy niżmap
ekwiwalent.źródło