Quali sono i tuoi consigli per giocare a golf con il codice usando Clojure?
Lo scopo di questa domanda è quello di raccogliere un elenco di tecniche specifiche per Clojure e che possono essere utilizzate in problemi generali di golf con codice.
Quali sono i tuoi consigli per giocare a golf con il codice usando Clojure?
Lo scopo di questa domanda è quello di raccogliere un elenco di tecniche specifiche per Clojure e che possono essere utilizzate in problemi generali di golf con codice.
Risposte:
Usa la sintassi del lettore per lambdas.
Quindi usa
#(+ % %2 %3)
invece di
(fn [x y z] (+ x y z))
Puoi anche eliminare gli spazi bianchi alcune volte:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)è equivalente a +.
Tra una stringa e qualsiasi altra cosa:
(println(+"Hello, World!"1))
Tra parentesi e quant'altro:
(for[x(range 5)](* x x))
Tra un numero e tutto tranne i builtin o i nomi delle variabili:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Tra @(dereference for atoms) e parentesi.
@
lete liberarti di alcuni spazi.
#(+ 1(first%))=#(+ 1 (first %))
Le stringhe possono essere trattate come una sequenza di caratteri
ad es. per ordinare i caratteri in una stringa in ordine alfabetico:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0invece difirstPer ottenere il primo elemento di una raccolta, usare (nth ... 0)over firstsalva un byte:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second(2 byte)
([2 3 4]1)restituisce l'elemento all'indice 1. Ciò dovrebbe essere utile se, ad esempio, il formato di input è flessibile.
Ad esempio, se è necessario utilizzarlo partitiono frequenciespiù volte, potrebbe essere utile associarli a un simbolo a byte singolo in una letmacro. Inoltre, potrebbe non valerne la pena se non è necessario il letcontrario e il nome della funzione è relativamente breve.