Также вы можете использовать векторы как функции, поэтому ([2 3 4]1)возвращает элемент с индексом 1. Это должно быть полезно, если, например, формат ввода гибкий.
NikoNyrh
1
Используйте применить вместо уменьшения
Например, #(apply + %)на один байт короче #(reduce + %).
Используйте карты вместо ifs при тестировании на равенство
;; 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
Привязать длинные имена функций в let к однобайтовому символу
Например, если вам нужно использовать partitionили frequenciesнесколько раз, было бы полезно связать их с однобайтовым символом в letмакросе. Опять же, это может не стоить того, если вам не нужно letиное, а имя функции относительно короткое.
Ответы:
Используйте синтаксис читателя для лямбд.
Так что используйте
вместо того
Вы также можете устранить пробелы в некоторых случаях:
источник
#(+ % %2 %3)
эквивалентно+
.Где вы можете удалить пробелы:
Между строкой и чем-либо еще:
Между скобками и прочим:
Между числом и всем, кроме встроенных или имен переменных:
Между
@
(разыменование для атомов) и скобками.источник
@
let
и избавиться от некоторых пробелов.#(+ 1(first%))
=#(+ 1 (first %))
Строки могут рассматриваться как последовательность символов
например, отсортировать символы в строке по алфавиту:
источник
Используйте
nth ... 0
вместоfirst
Чтобы получить первый элемент коллекции, используйте
(nth ... 0)
over дляfirst
сохранения байта:источник
second
(2 байта)([2 3 4]1)
возвращает элемент с индексом 1. Это должно быть полезно, если, например, формат ввода гибкий.Используйте применить вместо уменьшения
Например,
#(apply + %)
на один байт короче#(reduce + %)
.источник
Избегайте, если у вас уже есть для
Например:
#(for[a[(sort %)]...)
вместо#(let[a(sort %)](for ...))
.У также есть
:let
конструкция, но она слишком многословна для кода гольф.источник
Используйте
+
и-
вместоinc
иdec
Это экономит 1 байт, если вы используете
inc
/dec
в выражении с паренами:источник
Используйте карты вместо
if
s при тестировании на равенствоисточник
Привязать длинные имена функций в let к однобайтовому символу
Например, если вам нужно использовать
partition
илиfrequencies
несколько раз, было бы полезно связать их с однобайтовым символом вlet
макросе. Опять же, это может не стоить того, если вам не нужноlet
иное, а имя функции относительно короткое.источник
Используйте для вместо карты
Например,
#(for[i %](Math/abs i))
намного короче, чемmap
эквивалент.источник