Clojure kullanarak kod golfü için ipuçlarınız nelerdir?
Bu sorunun amacı Clojure'a özgü olan ve genel kod golf problemlerinde kullanılabilecek tekniklerin bir listesini toplamaktır.
Clojure kullanarak kod golfü için ipuçlarınız nelerdir?
Bu sorunun amacı Clojure'a özgü olan ve genel kod golf problemlerinde kullanılabilecek tekniklerin bir listesini toplamaktır.
Yanıtlar:
Lambdas için okuyucu sözdizimini kullanın.
Öyleyse kullan
#(+ % %2 %3)
onun yerine
(fn [x y z] (+ x y z))
Ayrıca boşlukları da zaman zaman kaldırabilirsiniz:
#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)
#(+ % %2 %3)
eşdeğerdir +
.
Bir dize ve başka bir şey arasında:
(println(+"Hello, World!"1))
Parantezler ve başka herhangi bir şey arasında:
(for[x(range 5)](* x x))
Bir sayı ile yerleşik veya değişken adları dışındaki her şey arasında:
Allowed:
(+ 1"Example")
(map{1"-1"2"-2"}[1 2 3])
Not allowed:
(+1 2)
Arasında @
(atomlar için dereference) ve parantez.
@
let
ve bazı alanlardan kurtulabilirsiniz.
#(+ 1(first%))
=#(+ 1 (first %))
Dizeler bir dizi karakter olarak ele alınabilir
örneğin bir dizgideki karakterleri alfabetik olarak sıralamak için:
(sort "hello")
=> (\e \h \l \l \o)
nth ... 0
kullanınfirst
Bir koleksiyonun ilk öğesini almak için (nth ... 0)
over kullanarak first
bir bayt kaydeder:
(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)
second
(2 bayt) için
([2 3 4]1)
elemanı indeks 1'e döndürür. Örneğin, giriş formatı esnekse bu yararlı olacaktır.
Örneğin partition
veya frequencies
birden çok kez kullanmanız gerekiyorsa , bunları bir makrodaki tek baytlık bir sembole bağlamak faydalı olabilir let
. Daha sonra, let
aksi takdirde ihtiyacınız yoksa ve işlev adı nispeten kısasa buna değmeyebilir.