Советы по игре в гольф в Applescript


13

Какие у вас есть советы по игре в гольф в Applescript? Я ищу идеи, которые могут быть применены к кодовым проблемам гольфа в целом, которые, по крайней мере, несколько специфичны для Applescript (например, «удалить комментарии» - это не ответ).


Этот вопрос слишком широкий. На него невозможно ответить одним полным, хорошо написанным ответом (и вопрос даже прямо запрещает это).
Рейнболт

1
Тем не менее, это просто забавный вопрос :)
MadTux

5
Помечено для конвертации в CW (в соответствии с нашей конвенцией для «советов по игре в гольф в х»).
Geobits

@MadTux Да, Applescript, как правило, не лучший выбор для языков игры в гольф ;-). Но бывают случаи , особенно в категории ограниченных источников, когда она становится незначительно полезной.
Цифровая травма

4
@Rainbolt Как это отличается от других советов по игре в гольф в x вопросах?
Цифровая травма

Ответы:


6

ofОператор используется , чтобы получить свойство от объекта:

log words of "Hello World"

Но во многих случаях вы можете использовать 'sкак ярлык для сохранения 1 символа:

log "Hello World"'s words

6
Кажется несколько смешным, но также несколько удивительным, что Applescript анализирует апострофы как притяжательные. Я могу только представить, что один из языковых дизайнеров предложил эту идею группе.
Geobits

9
@Geobits Это отличные прилагательные для описания Applescript в целом. Я просто еще не решил, является ли Applescript смехотворным или просто смешным ;-)
Digital Trauma

4

Редактор 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

Очевидно, что первый фрагмент лучше подходит для игры в гольф.


ИМО это можно рассматривать как общий совет, не специфичный для АС. Многие современные IDE делают это, если вы позволите им.
Geobits

2
@Geobits Согласен. Хотя я думаю, что добавление определенных ключевых слов после endдовольно специфично для Applescript.
Цифровая травма

Да, это просто сбивает с толку меня. Впрочем, отступы /
пробелы

@Geobits Applescript - это все о читаемости. Я предполагаю, что идея состоит в том, чтобы уточнить, кто endпринадлежит к какому выражению начала блока, когда у вас есть несколько вложенных блоков
Digital Trauma

4

tell блоки распространены в Applescript:

tell application "TextEdit"
    activate
end tell

Однако для экономии места следующее эквивалентно, когда внутри tellблока находится всего одна строка:

tell application "TextEdit" to activate

3
Который сам по себе tell app "TextEdit" to activate.
wchargin

@WChargin Да. Добавьте это как другой ответ, если хотите.
Цифровая травма

4

Некоторые слова имеют более короткие синонимы. Например, applicationможно записать как app*, иstring можно записать как text.

Кроме того, every <noun>может быть записано как просто множественное число, как в characters of "hello world"(или"foo"'s characters ).

* Хотя компилятор Script Editor вернет его обратно.


3

Цитата Требуется операция

Для любой операции, которая требует кавычки, чтобы сделать что-то, т.е.

журнал "Hello World!"

Вы можете сократить до

журнал "Hello World!"

повторяющий

В повторяющихся циклах можно полностью удалить слово «времена».

повторить х раз
конец

против

повторить х
конец

<= и> =

Каждый раз, когда вызываются эти операторы, вы можете заменить их на и , соответственно. Хотя это не может уменьшить количество байтов (если не будут реализованы специальные соглашения по подсчету байтов, которые я предлагаю), это действительно уменьшает количество символов.

Захват от STDIN

Вы можете получить из STDIN следующие символы:

на бегу argv
конец

Быстро выход

Если вам нужно быстро выйти из кода (по какой-либо причине, т.е. предотвратить чрезмерное количество ifs) ...

уволиться

Ха-ха, ты, должно быть, сделал несколько тралов, чтобы найти это;)
Beta Decay

Я использую это много .
Эддисон Крамп

Вопрос или советы?
бета-распад

Советы И AppleScript в целом.
Эддисон Крамп

О, я говорил о вопросе :)
Beta Decay

2

Applescript позволяет вставлять некоторые дополнительные ключевые слова для удобства чтения:

log the words of "Hello World"

Но theздесь это совершенно излишне и может быть опущено для сохранения 4 символов:

log words of "Hello World"

2
У вас могут быть даже более короткие варианты: log"Hello World"'s wordsпотому что вам 1) не нужно пространство между каким-либо выражением и элементом в кавычках, и 2) потому что 'sего можно использовать вместо of.
Аддисон Крамп

@VTCAKAVSMoACE да, 'sрассматривается в этом ответе codegolf.stackexchange.com/a/37643/11259 . Полезно знать, log"хотя.
Цифровая травма

2

Укорочение кронштейна

Как и в посте о цитатах, позже я понял, что вы также можете сократить такие вещи:

если "a" = символ 1 of (x как строка), тогда вернуть {true, true}

в

если "a" = символ 1 of (x как строка), тогда вернуть {true, true}

Для вас тоже будут скобки. В этом примере я экономлю 5 байтов.


2

Принимая во внимание ...

В вопросах, которые требуют чувствительности к регистру, на самом деле может быть трудно иметь дело с кейсами.

ДО НЫНЕШНЕГО МОМЕНТА:

рассматривает дело
    (что-то делать с учетом регистра)
конец рассмотрения

Я не знал этого ключевого слова до тех пор, пока оно мне действительно не понадобилось. Используя другие советы на этой странице советов, мы можем уменьшить это до:

рассматривает дело
(что-то делать с учетом регистра)
конец

Насколько я знаю, это требует полного заявления. (Я много чего перепробовал.) Смотрите эту страницу для более подробной информации.


1

В некоторых исключительных случаях «двойные угловые скобки» или «двойные шевроны» могут быть короче английского названия команды, параметра или константы.

Форма в шевронном коде сократила бы 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 байт.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.