Anda juga dapat menggunakan vektor sebagai fungsi, sehingga ([2 3 4]1)mengembalikan elemen pada indeks 1. Ini harus bermanfaat jika misalnya format input fleksibel.
NikoNyrh
1
Gunakan terapkan alih-alih mengurangi
Misalnya #(apply + %)satu byte lebih pendek dari #(reduce + %).
Gunakan peta sebagai ganti ifsaat menguji kesetaraan
;; 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
Bind nama-nama fungsi panjang di biarkan ke simbol byte tunggal
Sebagai contoh jika Anda perlu menggunakan partitionatau frequenciesbeberapa kali, itu bisa bermanfaat untuk mengikatnya ke simbol byte tunggal di letmakro. Kemudian lagi mungkin tidak layak jika Anda tidak membutuhkan yang letsebaliknya, dan nama fungsinya relatif singkat.
Jawaban:
Gunakan sintaks pembaca untuk lambdas.
Jadi gunakan
dari pada
Anda juga dapat menghilangkan spasi putih beberapa waktu:
sumber
#(+ % %2 %3)
setara dengan+
.Di mana Anda dapat menghapus spasi putih:
Antara string dan apa pun:
Antara kurung dan yang lainnya:
Antara angka dan segala sesuatu selain bawaan atau nama variabel:
Antara
@
(referensi untuk atom) dan tanda kurung.sumber
@
let
dan menyingkirkan beberapa ruang.#(+ 1(first%))
=#(+ 1 (first %))
String dapat diperlakukan sebagai urutan karakter
mis. untuk mengurutkan karakter dalam string berdasarkan abjad:
sumber
Gunakan
nth ... 0
sebagai gantifirst
Untuk mendapatkan elemen pertama koleksi, menggunakan
(nth ... 0)
lebih darifirst
satu byte:sumber
second
(2 byte)([2 3 4]1)
mengembalikan elemen pada indeks 1. Ini harus bermanfaat jika misalnya format input fleksibel.Gunakan terapkan alih-alih mengurangi
Misalnya
#(apply + %)
satu byte lebih pendek dari#(reduce + %)
.sumber
Hindari biarkan jika Anda sudah punya untuk
Misalnya:
#(for[a[(sort %)]...)
bukannya#(let[a(sort %)](for ...))
.Untuk memang memiliki
:let
konstruksi tetapi terlalu bertele-tele untuk kode golf.sumber
Gunakan
+
dan-
bukannyainc
dandec
Ini menghemat 1 byte jika Anda menggunakan
inc
/dec
pada ekspresi dengan parens:sumber
Gunakan peta sebagai ganti
if
saat menguji kesetaraansumber
Bind nama-nama fungsi panjang di biarkan ke simbol byte tunggal
Sebagai contoh jika Anda perlu menggunakan
partition
ataufrequencies
beberapa kali, itu bisa bermanfaat untuk mengikatnya ke simbol byte tunggal dilet
makro. Kemudian lagi mungkin tidak layak jika Anda tidak membutuhkan yanglet
sebaliknya, dan nama fungsinya relatif singkat.sumber
Gunakan sebagai ganti peta
Misalnya
#(for[i %](Math/abs i))
jauh lebih pendek dari yang biasamap
.sumber