Bạn có lời khuyên nào cho việc chơi golf trong Applescript? Tôi đang tìm kiếm những ý tưởng có thể được áp dụng cho các vấn đề về golf nói chung ít nhất là cụ thể đối với Applescript (ví dụ: "xóa bình luận" không phải là một câu trả lời).
Bạn có lời khuyên nào cho việc chơi golf trong Applescript? Tôi đang tìm kiếm những ý tưởng có thể được áp dụng cho các vấn đề về golf nói chung ít nhất là cụ thể đối với Applescript (ví dụ: "xóa bình luận" không phải là một câu trả lời).
Câu trả lời:
Các of
nhà điều hành được sử dụng để có được một tài sản từ một đối tượng:
log words of "Hello World"
Nhưng trong nhiều trường hợp, bạn có thể sử dụng 's
làm lối tắt để lưu 1 ký tự:
log "Hello World"'s words
Trình soạn thảo Applescript là một IDE nhỏ tiện dụng giúp làm nổi bật cú pháp và làm đẹp mã của bạn. Tuy nhiên, đối với các mục đích của việc chơi golf, nó sẽ phản tác dụng khi nó thêm các từ khóa thụt lề và thừa, ví dụ như sau các end
câu lệnh. Ví dụ:
repeat with w in "Hello World"'s words
log w
end
trở thành như sau khi được dán vào Trình soạn thảo Applescript và được biên dịch / chạy:
repeat with w in "Hello World"'s words
log w
end repeat
Rõ ràng đoạn đầu tiên là tốt hơn cho các mục đích của golf.
end
là khá cụ thể Applescript.
end
thuộc về câu lệnh bắt đầu khối nào khi bạn có nhiều khối lồng nhau
tell
các khối phổ biến trong Applescript:
tell application "TextEdit"
activate
end tell
Tuy nhiên, để tiết kiệm không gian sau đây là tương đương, khi bên trong tell
khối chỉ là một dòng:
tell application "TextEdit" to activate
tell app "TextEdit" to activate
.
Một số từ có từ đồng nghĩa ngắn hơn. Ví dụ, application
có thể được viết là app
*, và string
có thể được viết là text
.
Ngoài ra, every <noun>
có thể được viết đơn giản là số nhiều, như trong characters of "hello world"
(hoặc "foo"'s characters
).
* Mặc dù trình biên dịch của Script Editor sẽ thay đổi lại.
Đối với bất kỳ hoạt động nào yêu cầu báo giá để làm một cái gì đó, tức là
đăng nhập "Xin chào thế giới!"
Bạn có thể rút ngắn để
đăng nhập "Xin chào thế giới!"
Trong các vòng lặp lặp lại, người ta hoàn toàn có thể loại bỏ từ "lần".
lặp lại x lần kết thúc
đấu với
lặp lại x kết thúc
Bất cứ khi nào các toán tử này được gọi, bạn có thể thay thế chúng bằng ≤
và ≥
, tương ứng. Mặc dù điều này có thể không làm giảm số lượng byte (trừ khi các quy ước đếm byte đặc biệt được triển khai, mà tôi đề xuất), nó làm giảm số lượng ký tự.
Bạn có thể lấy từ STDIN bằng các ký tự sau:
chạy argv kết thúc
Nếu bạn cần nhanh chóng thoát mã (vì bất kỳ lý do gì, tức là ngăn chặn quá mức if
) ...
bỏ
Applescript cho phép một số từ khóa bổ sung được chèn vào để giúp dễ đọc:
log the words of "Hello World"
Nhưng the
ở đây là hoàn toàn thừa và có thể được bỏ qua để tiết kiệm 4 ký tự:
log words of "Hello World"
log"Hello World"'s words
, bởi vì bạn 1) không cần khoảng cách giữa bất kỳ biểu thức và mục được trích dẫn nào và 2) vì 's
có thể được sử dụng để thay thế of
.
's
được giải quyết trong câu trả lời này codegolf.stackexchange.com/a/37643/11259 . Tốt để biết về log"
mặc dù.
Tương tự như bài đăng về trích dẫn, sau đó tôi nhận ra rằng bạn cũng có thể rút ngắn những thứ như thế này:
nếu "a" = ký tự 1 của (x dưới dạng chuỗi) thì trả về {true, true}
đến
nếu "a" = ký tự 1 của (x dưới dạng chuỗi) thì trả về {true, true}
Nó cũng sẽ bỏ dấu ngoặc cho bạn. Trong ví dụ này, tôi lưu 5 byte.
Trong các câu hỏi đòi hỏi độ nhạy của trường hợp, có thể khó thực sự xử lý các trường hợp.
xem xét trường hợp (một cái gì đó để làm với trường hợp nhạy cảm) kết thúc xem xét
Tôi thực sự không biết từ khóa này cho đến khi tôi thực sự cần nó. Sử dụng các mẹo khác trong trang mẹo này, chúng tôi có thể giảm xuống:
xem xét trường hợp (một cái gì đó để làm với trường hợp nhạy cảm) kết thúc
Nó đòi hỏi một tuyên bố đầy đủ, theo như tôi biết. (Tôi đã thử rất nhiều thứ.) Xem trang này để biết thêm chi tiết.
Trong một vài trường hợp đặc biệt, «ngoặc kép» hoặc «chevron kép» có thể ngắn hơn tên tiếng Anh của lệnh, tham số hoặc hằng.
Biểu mẫu được mã hóa bằng chevron sẽ thu nhỏ AppleScript để xóa bảng tạm từ 20 đến 16 ký tự:
set the clipboard to -- 20
«event JonspClp» -- 16
Nó sẽ giảm 2 ký tự khi tìm nạp văn bản từ một hộp thoại (như xảy ra trong metronome và Pi Day ):
(display dialog""default answer"")'s text returned -- 46
(display dialog""default answer"")'s«class ttxt» -- 44
(Bạn có thể muốn tránh hộp thoại và sử dụng các đối số dòng lệnh của osascript (1) , nếu bạn có ít nhất Mac OS X 10.4.)
Với bàn phím Hoa Kỳ, «là tùy chọn- \ và» là tùy chọn-shift- \. Một lệnh «event abcdefgh»
có 16 ký tự. Một tham số hoặc hằng «class abcd»
có 12 ký tự.
Các hình thức mã hóa chevron hầu như luôn luôn quá dài cho golf. Dưới đây là một ví dụ không có dấu ngoặc kép:
set x to open for access"output"write permission 1
write"One line of text
"to x
close access x
Và tương tự với họ:
set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x
Thay đổi _open for access
(16) thành «event rdwropen»
(16) là trung tính. Thay đổi write permission_
(17) thành given«class perm»:
(18) tốn 1 ký tự. Các dấu ngoặc kép khác có giá cao hơn.
Để sử dụng dấu ngoặc kép, bạn cần biết mã 4 chữ cái hoặc 8 chữ cái. Tôi đã tìm thấy một số mã bằng cách lưu tệp tập lệnh từ Script Editor, sau đó mở nó trong trình soạn thảo hex. Tôi chạy emacs
trong một thiết bị đầu cuối và sử dụng M-x hexl-find-file
. Tôi tìm thấy và chỉnh sửa một số mã, như JonspClp
vào JanspClp
và ttxt
vào atxt
. Sau đó tôi đã lưu tệp và mở lại nó trong Script Editor. «event JanspClp»
và «class atxt»
xuất hiện trong kịch bản.
Một tài liệu có tiêu đề Thuật ngữ AppleScript và Tham chiếu mã sự kiện của Apple liệt kê một số mã. Tôi đã tìm thấy một bản sao của nó tại https: //applescriptl Library.wordpress.com/
Script Editor sẽ dịch các dấu ngoặc kép sang tiếng Anh trước khi lưu tập lệnh của bạn. Để bảo vệ chevron, bạn phải viết tập lệnh của mình trong một trình soạn thảo văn bản khác, như TextEdit. Lưu tập lệnh dưới dạng tệp văn bản thuần trong mã hóa Mac OS Roman (hoặc MacRoman). Mac OS X thích bạn đặt tên tệp bằng hậu tố .applescript.
Nếu bạn đếm byte, MacRoman có 1 byte cho mỗi ký tự, vì vậy mỗi «hoặc» được tính là 1 byte.