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.
@
let
e 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 ... 0
invece difirst
Per ottenere il primo elemento di una raccolta, usare (nth ... 0)
over first
salva 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 partition
o frequencies
più volte, potrebbe essere utile associarli a un simbolo a byte singolo in una let
macro. Inoltre, potrebbe non valerne la pena se non è necessario il let
contrario e il nome della funzione è relativamente breve.