Які поради для гольфу в 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
).
* Хоча компілятор редактора сценаріїв змінить його назад.
Для будь-якої операції, яка вимагає цитати, щоб зробити щось, тобто
журнал "Привіт, світ!"
Можна скоротити до
журнал "Привіт, світ!"
У повторних циклах цілком можна видалити слово "раз".
повторити х разів кінець
проти
повторити х кінець
Кожен раз , коли ці оператори називаються, ви можете замінити їх ≤
і ≥
, відповідно. Хоча це не може зменшити кількість байт (якщо умовні рахункові спеціальний байт не будуть реалізовані, які я запропонувати), це робить зменшити кількість символів.
Ви можете захопити STDIN за допомогою таких символів:
на ходу аргв кінець
Якщо вам потрібно швидко вийти з коду (з будь-якої причини, тобто запобігти зайвим 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 (x як рядок), тоді поверніться {true, true}
до
якщо "a" = символ 1 (x як рядок), тоді поверніться {true, true}
Це розділить дужки і для вас. У цьому прикладі я зберігаю 5 байт.
У питаннях, які потребують чутливості до справ, справді може бути важко розібратися зі справами.
розглядаючи випадок (щось стосується речей з урахуванням регістру) кінець розгляду
Я насправді не знав цього ключового слова, поки мені він справді не знадобився. Використовуючи інші поради на цій сторінці порад, ми можемо зменшити їх до:
розглядаючи випадок (щось стосується речей з урахуванням регістру) кінець
Наскільки я знаю, це вимагає повного твердження. (Я багато чого намагався.) Детальну інформацію див. На цій сторінці .
У кількох виняткових випадках «подвійні кутові дужки» або «подвійні шеврони» можуть бути коротшими, ніж англійська назва команди, параметра чи константи.
Форма, кодована шевроном, зменшить AppleScript, щоб видалити буфер обміну від 20 до 16 символів:
set the clipboard to -- 20
«event JonspClp» -- 16
Під час вилучення тексту з діалогового вікна (як це відбувається в метрономії та пі-дені ), випаде два символи :
(display dialog""default answer"")'s text returned -- 46
(display dialog""default answer"")'s«class ttxt» -- 44
(Ви можете скористатися діалогом та використовувати аргументи командного рядка osascript (1) , якщо у вас є принаймні Mac OS X 10.4.)
На клавіатурі в США «є параметр-» і «є варіант-зсув- \. Команда «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. Збережіть сценарій як звичайний текстовий файл у римському (або MacRoman) кодуванні Mac OS. Mac OS X вважає за краще, щоб ви назвали файл із суфіксом .applescript.
Якщо порахувати байти, MacRoman має 1 байт на символ, тому кожен «або» вважається 1 байт.