Какие у вас есть советы по игре в гольф в Applescript? Я ищу идеи, которые могут быть применены к кодовым проблемам гольфа в целом, которые, по крайней мере, несколько специфичны для Applescript (например, «удалить комментарии» - это не ответ).
Какие у вас есть советы по игре в гольф в Applescript? Я ищу идеи, которые могут быть применены к кодовым проблемам гольфа в целом, которые, по крайней мере, несколько специфичны для Applescript (например, «удалить комментарии» - это не ответ).
Ответы:
of
Оператор используется , чтобы получить свойство от объекта:
log words of "Hello World"
Но во многих случаях вы можете использовать 's
как ярлык для сохранения 1 символа:
log "Hello World"'s words
Редактор Applescript - это удобная маленькая IDE, которая выделяет синтаксис и украшает ваш код. Тем не менее, для целей игры в гольф это контрпродуктивно, так как добавляет отступы и лишние ключевые слова, например, после end
заявлений. Например:
repeat with w in "Hello World"'s words
log w
end
становится следующим после вставки в редактор Applescript и компиляции / запуска:
repeat with w in "Hello World"'s words
log w
end repeat
Очевидно, что первый фрагмент лучше подходит для игры в гольф.
end
довольно специфично для Applescript.
end
принадлежит к какому выражению начала блока, когда у вас есть несколько вложенных блоков
tell
блоки распространены в Applescript:
tell application "TextEdit"
activate
end tell
Однако для экономии места следующее эквивалентно, когда внутри tell
блока находится всего одна строка:
tell application "TextEdit" to activate
tell app "TextEdit" to activate
.
Некоторые слова имеют более короткие синонимы. Например, application
можно записать как app
*, иstring
можно записать как text
.
Кроме того, every <noun>
может быть записано как просто множественное число, как в characters of "hello world"
(или"foo"'s characters
).
* Хотя компилятор Script Editor вернет его обратно.
Для любой операции, которая требует кавычки, чтобы сделать что-то, т.е.
журнал "Hello World!"
Вы можете сократить до
журнал "Hello World!"
В повторяющихся циклах можно полностью удалить слово «времена».
повторить х раз конец
против
повторить х конец
Каждый раз, когда вызываются эти операторы, вы можете заменить их на ≤
и ≥
, соответственно. Хотя это не может уменьшить количество байтов (если не будут реализованы специальные соглашения по подсчету байтов, которые я предлагаю), это действительно уменьшает количество символов.
Вы можете получить из STDIN следующие символы:
на бегу argv конец
Если вам нужно быстро выйти из кода (по какой-либо причине, т.е. предотвратить чрезмерное количество if
s) ...
уволиться
Applescript позволяет вставлять некоторые дополнительные ключевые слова для удобства чтения:
log the words of "Hello World"
Но the
здесь это совершенно излишне и может быть опущено для сохранения 4 символов:
log words of "Hello World"
log"Hello World"'s words
потому что вам 1) не нужно пространство между каким-либо выражением и элементом в кавычках, и 2) потому что 's
его можно использовать вместо of
.
's
рассматривается в этом ответе codegolf.stackexchange.com/a/37643/11259 . Полезно знать, log"
хотя.
Как и в посте о цитатах, позже я понял, что вы также можете сократить такие вещи:
если "a" = символ 1 of (x как строка), тогда вернуть {true, true}
в
если "a" = символ 1 of (x как строка), тогда вернуть {true, true}
Для вас тоже будут скобки. В этом примере я экономлю 5 байтов.
В вопросах, которые требуют чувствительности к регистру, на самом деле может быть трудно иметь дело с кейсами.
рассматривает дело (что-то делать с учетом регистра) конец рассмотрения
Я не знал этого ключевого слова до тех пор, пока оно мне действительно не понадобилось. Используя другие советы на этой странице советов, мы можем уменьшить это до:
рассматривает дело (что-то делать с учетом регистра) конец
Насколько я знаю, это требует полного заявления. (Я много чего перепробовал.) Смотрите эту страницу для более подробной информации.
В некоторых исключительных случаях «двойные угловые скобки» или «двойные шевроны» могут быть короче английского названия команды, параметра или константы.
Форма в шевронном коде сократила бы AppleScript для удаления буфера обмена из 20-16 символов:
set the clipboard to -- 20
«event JonspClp» -- 16
При извлечении текста из диалогового окна будет сброшено 2 символа (как это происходит в метрономе и Pi Day ):
(display dialog""default answer"")'s text returned -- 46
(display dialog""default answer"")'s«class ttxt» -- 44
(Вы можете предпочесть избегать диалога и использовать аргументы командной строки osascript (1) , если у вас есть хотя бы Mac OS X 10.4.)
На клавиатуре США «это опция- \, а» опция-shift- \. Команда «event abcdefgh»
имеет 16 символов. Параметр или константа «class abcd»
имеет 12 символов.
Форма в кодировке шеврона почти всегда слишком длинна для гольфа. Вот пример без двойных угловых скобок:
set x to open for access"output"write permission 1
write"One line of text
"to x
close access x
И то же самое с ними
set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x
Изменение _open for access
(16) на «event rdwropen»
(16) было нейтральным. Изменение write permission_
(17) на given«class perm»:
(18) стоит 1 символ. Другие двойные угловые кронштейны стоят дороже.
Чтобы использовать двойные угловые скобки, вам нужно знать магический 4-буквенный или 8-буквенный код. Я нашел некоторые коды, сохранив файл скрипта из редактора скриптов, а затем открыв его в шестнадцатеричном редакторе. Я побежал emacs
в терминал и использовал M-x hexl-find-file
. Я нашел и отредактировал некоторые коды, как JonspClp
в JanspClp
, так и ttxt
в atxt
. Затем я сохранил файл и снова открыл его в редакторе скриптов. «event JanspClp»
и «class atxt»
появился в сценарии.
В документе под названием « Терминология AppleScript и справочник кодов событий Apple» перечислены некоторые коды. Я нашел его копию на https://applescriptlibrary.wordpress.com/
Редактор скриптов переведет двойные угловые скобки на английский язык перед сохранением скрипта. Для шеврона, вы должны написать свой скрипт в другом текстовом редакторе, таком как TextEdit. Сохраните сценарий в виде простого текстового файла в кодировке Mac OS Roman (или MacRoman). Mac OS X предпочитает, чтобы вы называли файл суффиксом .applescript.
Если вы подсчитываете байты, у MacRoman есть 1 байт на символ, поэтому каждое «или» считается за 1 байт.