Lời khuyên cho việc chơi golf trong Applescript


13

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 hỏi này quá rộng. Nó không thể được trả lời bằng một câu trả lời hoàn chỉnh, được viết tốt (và câu hỏi thậm chí còn cấm rõ ràng điều đó).
Rainbolt

1
Tuy nhiên, đây chỉ là một câu hỏi vui :)
MadTux

5
Được gắn cờ để chuyển đổi sang CW (theo quy ước của chúng tôi về 'mẹo chơi gôn trong câu hỏi x').
Geobits

@MadTux Yep, Applescript thường không phải là lựa chọn số 1 trong các ngôn ngữ chơi gôn ;-). Nhưng có những dịp , đặc biệt là trong danh mục nguồn bị hạn chế , nơi nó trở nên hữu ích.
Chấn thương kỹ thuật số

4
@Rainbolt Điều này có bản chất khác với các mẹo chơi golf khác trong x câu hỏi như thế nào?
Chấn thương kỹ thuật số

Câu trả lời:


6

Các ofnhà đ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 'slàm lối tắt để lưu 1 ký tự:

log "Hello World"'s words

6
Có vẻ hơi vô lý, nhưng cũng có phần tuyệt vời, Applescript phân tích các dấu nháy đơn là sở hữu. Tôi chỉ có thể tưởng tượng một trong những nhà thiết kế ngôn ngữ đưa ra ý tưởng đó cho nhóm.
Geobits

9
@Geobits Đó là những tính từ tuyệt vời để mô tả Applescript nói chung. Tôi chỉ chưa quyết định liệu Applescript có tuyệt vời đến mức nực cười hay nực cười hay không ;-)
Chấn thương kỹ thuật số

4

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 endcâ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.


IMO đây có thể được xem là một mẹo chung, không cụ thể đối với AS. Nhiều IDE hiện đại làm điều này nếu bạn cho phép chúng.
Geobits

2
@Geobits Đồng ý. Mặc dù tôi nghĩ rằng việc bổ sung các từ khóa cụ thể sau endlà khá cụ thể Applescript.
Chấn thương kỹ thuật số

Phải, điều đó chỉ gây trở ngại cho tôi. Tuy nhiên, điều thụt lề / khoảng cách là rất phổ biến, cùng với dấu ngoặc không cần thiết, v.v.
Geobits

@Geobits Applescript là tất cả về khả năng đọc. Tôi đoán ý tưởng là làm cho nó rõ ràng endthuộc về câu lệnh bắt đầu khối nào khi bạn có nhiều khối lồng nhau
Chấn thương kỹ thuật số

4

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 tellkhối chỉ là một dòng:

tell application "TextEdit" to activate

3
Mà chính nó là tell app "TextEdit" to activate.
wchargein

@WChargin Có. Thêm nó như một câu trả lời khác nếu bạn thích.
Chấn thương kỹ thuật số

4

Một số từ có từ đồng nghĩa ngắn hơn. Ví dụ, applicationcó thể được viết là app*, và stringcó 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.


3

Báo giá hoạt động cần thiết

Đố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!"

Lặp đi lặp lạ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

<= và> =

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 , 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ự.

Lấy từ STDIN

Bạn có thể lấy từ STDIN bằng các ký tự sau:

chạy argv
kết thúc

Thoát nhanh

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ỏ

Haha wow, bạn chắc chắn đã thực hiện một số bước đi để tìm thấy điều này;)
Beta Decay

Tôi sử dụng nó rất nhiều .
Addison Crump

Câu hỏi hay lời khuyên?
Beta Decay

Những bí kíp. Và AppleScript nói chung.
Addison Crump

Ồ tôi đã nói về câu hỏi :)
Beta Decay

2

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"

2
Bạn có thể có các biến thể thậm chí ngắn hơn : 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ì 'scó thể được sử dụng để thay thế of.
Addison Crump

@VTCAKAVSMoACE có, '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ù.
Chấn thương kỹ thuật số

2

Rút ngắn khung

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.


2

Xem xét ...

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.

UNTIL NGAY:

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.


1

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 metronomePi 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 emacstrong 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ư JonspClpvào JanspClpttxtvào atxt. Sau đó tôi đã lưu tệp và mở lại nó trong Script Editor. «event JanspClp»«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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.