Applescript'te golf oynamak için hangi ipuçlarınız var? Ben genel olarak en azından biraz Applescript (örneğin "yorumları kaldırmak" bir cevap değildir) olan kod golf sorunlarına uygulanabilecek fikirler arıyorum.
Applescript'te golf oynamak için hangi ipuçlarınız var? Ben genel olarak en azından biraz Applescript (örneğin "yorumları kaldırmak" bir cevap değildir) olan kod golf sorunlarına uygulanabilecek fikirler arıyorum.
Yanıtlar:
of
Operatör bir nesnenin özelliği almak için kullanılır:
log words of "Hello World"
Ancak birçok durumda 's
1 karakteri kaydetmek için kısayol olarak kullanabilirsiniz :
log "Hello World"'s words
Applescript Editor, sözdizimini vurgulayan ve kodunuzu güzelleştiren kullanışlı küçük bir IDE'dir. Bununla birlikte, golf amacıyla, örneğin end
ifadelerden sonra girinti ve gereksiz anahtar kelimeler eklediği için verimsizdir . Örneğin:
repeat with w in "Hello World"'s words
log w
end
Applescript Düzenleyicisi'ne yapıştırıldığında ve derlendiğinde / çalıştırıldığında aşağıdakine dönüşür:
repeat with w in "Hello World"'s words
log w
end repeat
Açıkçası ilk pasaj golf amaçlı daha iyidir.
end
oldukça Applescript'e özgü olduğunu düşünüyorum .
end
birden fazla iç içe
tell
Applescript'te bloklar yaygındır:
tell application "TextEdit"
activate
end tell
Ancak yerden tasarruf etmek için, tell
bloğun içi sadece bir satır olduğunda aşağıdakiler eşdeğerdir :
tell application "TextEdit" to activate
tell app "TextEdit" to activate
.
Bazı kelimeler daha kısa eşanlamlıdır. Örneğin, application
olarak yazılabilir app
* ve string
olarak yazılabilir text
.
Ayrıca, (veya ) every <noun>
gibi basitçe çoğul olarak da yazılabilir .characters of "hello world"
"foo"'s characters
* Her ne kadar Script Editor'ın derleyicisi onu değiştirirse de.
Bir şey yapmak için fiyat teklifi gerektiren herhangi bir işlem için, yani
giriş "Merhaba Dünya!"
Kısaltabilirsiniz
giriş "Merhaba Dünya!"
Tekrar döngülerinde, "times" sözcüğü tamamen kaldırılabilir.
x kez tekrarla son
karşı
x'i tekrarla son
Bu operatörler her çağrıldığında, bunları sırasıyla ≤
ve ile değiştirebilirsiniz ≥
. (Özel bayt sayma kuralları Önerim, hangi uygulanmadıkça) bu bayt sayısını azaltmaz olsa da, does karakter sayımı azaltmak.
STDIN'den aşağıdaki karakterlerle yakalayabilirsiniz:
koşarken argv son
Bir koddan hızlı bir şekilde çıkmanız gerekiyorsa (herhangi bir nedenle, yani aşırı if
s'yi önlemek ) ...
çıkmak
Applescript, okunabilirliğe yardımcı olmak için bazı ekstra anahtar kelimelerin eklenmesine izin verir:
log the words of "Hello World"
Ancak the
burada tamamen gereksizdir ve 4 karakterden tasarruf etmek için atlanabilir:
log words of "Hello World"
log"Hello World"'s words
çünkü 1) herhangi bir ifade ile alıntı yapılan öğe arasındaki boşluğa ihtiyacınız yoktur ve 2) 's
yerine kullanılabilir of
.
's
bu cevap kodunda ele alınmıştırgolf.stackexchange.com/a/ 37643/11259 . log"
Gerçi bilmek güzel .
Alıntılarla ilgili yazıya benzer şekilde, daha sonra bunun gibi şeyleri kısaltabileceğinizi fark ettim:
"a" = (dize olarak x) karakterinin 1'i {true, true}
için
"a" = (dize olarak x) karakterinin 1'i {true, true}
Sizin için köşeli ayraçları da boşaltacaktır. Bu örnekte 5 bayt tasarruf ediyorum.
Büyük / küçük harfe duyarlılık gerektiren sorularda, gerçekte davalarla başa çıkmak zor olabilir.
dava dikkate alınarak (büyük / küçük harfe duyarlı öğelerle ilgili bir şey) düşünmeye son
Gerçekten ihtiyacım olana kadar bu anahtar kelimeyi bilmiyordum. Bu ipuçları sayfasındaki diğer ipuçlarını kullanarak bunu aşağıdakilere indirgeyebiliriz:
dava dikkate alınarak (büyük / küçük harfe duyarlı öğelerle ilgili bir şey) son
Bildiğim kadarıyla tam bir açıklama gerektiriyor. (Bir çok şey denedim.) Daha fazla ayrıntı için bu sayfaya bakın.
Birkaç istisnai durumda, «çift köşeli ayraçlar» veya «çift köşeli çift ayraçlar», bir komutun, parametrenin veya sabitin İngilizce adından daha kısa olabilir.
Köşeli çift ayraçla kodlanmış form , panoya 20 ila 16 karakterden silmek için AppleScript'i küçültür :
set the clipboard to -- 20
«event JonspClp» -- 16
Bir iletişim kutusundan metin getirilirken 2 karakter düşer ( metronom ve Pi Günü'nde olduğu gibi ):
(display dialog""default answer"")'s text returned -- 46
(display dialog""default answer"")'s«class ttxt» -- 44
( En azından Mac OS X 10.4'ünüz varsa , iletişim kutusundan kaçınmayı ve osascript (1) komut satırı bağımsız değişkenlerini kullanmayı tercih edebilirsiniz .)
ABD klavyesinde «seçenek- \ ve» seçenek-kaydırma- \ 'dır. Bir komutun «event abcdefgh»
16 karakteri vardır. Bir parametre veya sabit «class abcd»
12 karakterden oluşur.
Chevron kodlu form golf için neredeyse her zaman çok uzundur. Çift köşeli ayraç içermeyen bir örnek:
set x to open for access"output"write permission 1
write"One line of text
"to x
close access x
Ve onlarla aynı:
set x to«event rdwropen»"output"given«class perm»:1
«event rdwrwrit»"One line of text
"given«class refn»:x
«event rdwrclos»x
Değiştirme _open for access
(16) «event rdwropen»
(16) nötr olmuştur. write permission_
(17) 'nin given«class perm»:
(18 )' e değiştirilmesi 1 karakterdir. Diğer çift açılı parantez daha pahalı.
Çift açılı parantez kullanmak için sihirli 4 harfli veya 8 harfli kodu bilmeniz gerekir. Bir kod dosyasını Script Editor'dan kaydedip onaltılı bir editörde açarak bazı kodlar buldum. emacs
Bir terminalde koştum ve kullandım M-x hexl-find-file
. JonspClp
İçine JanspClp
ve ttxt
içine bazı kodlar buldum ve düzenledim atxt
. Daha sonra dosyayı kaydettim ve Komut Dosyası Düzenleyicisi'nde yeniden açtım. «event JanspClp»
ve «class atxt»
senaryoda göründü.
AppleScript Terminolojisi ve Apple Olay Kodları Başvurusu adlı bir belge bazı kodları listeler. Bir kopyasını https://applescriptlibrary.wordpress.com/ adresinde buldum
Komut Dosyası Düzenleyicisi, komut dosyanızı kaydetmeden önce çift açılı parantezleri İngilizce'ye çevirir. Chevron ayrımı için, komut dosyanızı TextEdit gibi başka bir metin düzenleyicisine yazmalısınız. Komut dosyasını Mac OS Roman (veya MacRoman) kodlamasına düz metin dosyası olarak kaydedin. Mac OS X, dosyayı .applescript sonekiyle adlandırmanızı tercih eder.
Bayt sayarsanız, MacRoman'ın karakter başına 1 bayt vardır, bu nedenle her «veya» 1 bayt olarak sayılır.