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.
@
letve 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 ... 0kullanınfirstBir koleksiyonun ilk öğesini almak için (nth ... 0)over kullanarak firstbir 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 partitionveya frequenciesbirden çok kez kullanmanız gerekiyorsa , bunları bir makrodaki tek baytlık bir sembole bağlamak faydalı olabilir let. Daha sonra, letaksi takdirde ihtiyacınız yoksa ve işlev adı nispeten kısasa buna değmeyebilir.