Applescript에서의 골프 팁


13

Applescript에서 골프를 즐기기위한 팁이 있습니까? 나는 일반적으로 Applescript에 다소 특정한 코드 골프 문제에 적용될 수있는 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).


이 질문은 너무 광범위합니다. 하나의 완전하고 잘 작성된 답변으로 대답 할 수는 없습니다 (질문은 명시 적으로 금지합니다).
Rainbolt

1
아직도, 그것은 단지 재미있는 질문입니다 :)
MadTux

5
CW로 전환하도록 표시되었습니다 ( 'x에서의 골프 팁'질문에 대한 컨벤션에 따라).
Geobits

@MadTux Yep, Applescript는 일반적으로 골프 언어에서 첫 번째 선택이 아닙니다. ;-). 그러나 특히 제한된 소스 카테고리에서는 유용하지 않은 경우가 있습니다.
Digital Trauma

4
@Rainbolt 이것은 x 질문 에서 골프를하기위한 다른 과 본질적으로 어떻게 다른가 ?
Digital Trauma

답변:


6

of연산자는 객체의 속성을 가져 오는 데 사용됩니다 :

log words of "Hello World"

그러나 대부분의 경우 's1 개의 문자를 저장하는 바로 가기로 사용할 수 있습니다 .

log "Hello World"'s words

6
Applescript가 아포스트로피를 소유격으로 구문 분석하는 것은 다소 말도 안되지만 다소 훌륭해 보입니다. 언어 디자이너 중 한 명이 그 아이디어를 그룹에 제안한다고 상상할 수 있습니다.
Geobits

9
@Geobits 이들은 일반적으로 Applescript를 설명하는 훌륭한 형용사입니다. AppleScript를 경우 내가 결정하지 않은 단지 안되게 끝내 거나 놀랍 말도 ;-)
디지털 외상에게

4

Applescript Editor는 구문을 강조하고 코드를 아름답게하는 편리한 작은 IDE입니다. 그러나 골프를 목적으로하는 경우 들여 쓰기와 불필요한 키워드 (예 : after endstatement)를 추가하므로 비생산적 입니다. 예를 들면 다음과 같습니다.

repeat with w in "Hello World"'s words
log w
end

Applescript 편집기에 붙여넣고 컴파일 / 실행하면 다음과 같이됩니다.

repeat with w in "Hello World"'s words
    log w
end repeat

분명히 첫 번째 스 니펫은 골프 목적으로 더 좋습니다.


IMO는 AS에 국한되지 않은 일반적인 팁으로 볼 수 있습니다. 현대의 많은 IDE가이를 허용하면이 작업을 수행합니다.
Geobits

2
@Geobits 합의. 이후에 특정 키워드를 추가하는 end것은 상당히 Applescript에 해당 한다고 생각합니다 .
Digital Trauma

예, 그것은 저에게 당황 스럽습니다. 들여 쓰기 / 간격은 불필요한 괄호와 함께 매우 일반적입니다.
Geobits

@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 예. 원하는 경우 다른 답변으로 추가하십시오.
Digital Trauma

4

일부 단어는 짧은 동의어를 갖습니다. 예를 들어, application같이 쓸 수있다 app*와 string같이 쓸 수있다 text.

또한 (또는 ) every <noun>와 같이 간단히 복수형으로 쓸 수 있습니다 .characters of "hello world""foo"'s characters

* 스크립트 편집기의 컴파일러가이를 다시 변경하더라도


3

견적이 필요한 작업

무언가를하기 위해 인용이 필요한 모든 작업, 즉

"Hello World!"로그

당신은 단축 할 수 있습니다

log "Hello World!"

반복

반복 루프에서 단어 "times"를 완전히 제거 할 수 있습니다.

x 번 반복
종료

x를 반복
종료

<= 및> =

이 연산자가 호출 될 때마다 각각 및로 대체 할 수 있습니다 . (특수 바이트 계산 규칙은 내가 제안하는 구현하지 않는 한)이 바이트 수를 줄이고 않을 수도 있지만, 그것은 하지 글자 수를 줄일 수 있습니다.

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 words1) 표현식과 인용 된 항목 사이에 공백이 필요하지 않고 2) 's대신을 사용할 수 있기 때문에 변형이 더 짧을 수도 있습니다 of.
애디슨 크럼

@VTCAKAVSMoACE 예, 's이 답변 codegolf.stackexchange.com/a/37643/11259 에서 해결되었습니다 . log"그래도 알아서 좋습니다 .
Digital Trauma

2

브래킷 단축

인용문에 대한 게시물과 마찬가지로 나중에 다음과 같이 단축 할 수 있음을 깨달았습니다.

"a"= 문자 중 1 (x는 문자열)이면 {true, true}

"a"= 문자 1의 1 (x는 문자열)이면 {true, true}

또한 괄호를 넣을 수 있습니다. 이 예에서는 5 바이트를 저장합니다.


2

고려하면...

대 / 소문자를 구분해야하는 질문에서는 실제로 사례를 다루기가 어려울 수 있습니다.

지금까지:

사건을 고려
    (대소 문자를 구분하는 것과 관련이 있음)
고려 끝

실제로 필요할 때까지이 키워드를 몰랐습니다. 이 팁 페이지의 다른 팁을 사용하면 다음과 같이 줄일 수 있습니다.

사건을 고려
(대소 문자를 구분하는 것과 관련이 있음)
종료

내가 아는 한 완전한 진술이 필요합니다. (많은 시도를했습니다.) 자세한 내용은 이 페이지 를 참조하십시오.


1

예외적 인 경우,«이중 꺾쇠 괄호»또는«이중 쉐브론»은 명령, 매개 변수 또는 상수의 영어 이름보다 짧을 수 있습니다.

쉐브론으로 인코딩 된 형식은 AppleScript를 축소 하여 클립 보드 를 20에서 16 자로 삭제합니다 .

set the clipboard to  -- 20
«event JonspClp»      -- 16

대화 상자에서 텍스트를 가져올 때 메트로놈Pi Day 에서 와 같이 2 문자가 삭제됩니다 .

(display dialog""default answer"")'s text returned  -- 46
(display dialog""default answer"")'s«class ttxt»    -- 44

( Mac OS X 10.4 이상인 경우 대화 상자를 피하고 osascript (1) 의 명령 줄 인수를 사용하는 것이 좋습니다.)

US 키보드에서«은 option- \이고»는 option-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 글자 코드를 알아야합니다. 스크립트 편집기에서 스크립트 파일을 저장 한 다음 16 진 편집기에서 열어서 일부 코드를 찾았습니다. 나는 emacs터미널에서 달렸고 사용했다 M-x hexl-find-file. JonspClpinto JanspClpttxtinto 같은 코드를 찾아서 편집 했습니다 atxt. 그런 다음 파일을 저장하고 스크립트 편집기에서 다시 열었습니다. «event JanspClp»«class atxt»스크립트에 출연했다.

AppleScript 용어 및 Apple 이벤트 코드 참조 문서에 일부 코드가 나열되어 있습니다. https://applescriptlibrary.wordpress.com/ 에서 사본을 찾았습니다.

스크립트 편집기는 스크립트를 저장하기 전에 이중 꺾쇠 괄호를 영어로 번역합니다. 쉐브론 지연의 경우, 텍스트 편집기와 같은 다른 텍스트 편집기에서 스크립트를 작성해야합니다. 스크립트를 Mac OS Roman (또는 MacRoman) 인코딩에서 일반 텍스트 파일로 저장하십시오. Mac OS X에서는 파일 이름을 .applescript 접미어로 지정하는 것이 좋습니다.

바이트 수를 계산하면 MacRoman은 문자 당 1 바이트를 가지므로 각«또는»는 1 바이트로 계산됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.