Applescript'te golf için ipuçları


13

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.


Bu soru Çok Geniş. Muhtemelen tam, iyi yazılmış bir cevapla cevaplanamaz (ve soru bunu açıkça yasaklar).
Rainbolt

1
Yine de, bu sadece komik bir soru :)
MadTux

5
CW'ye dönüşüm için işaretlendi (conx'te golf için ipuçları ’sorularına ilişkin kuralımıza göre).
Geobits

@MadTux Evet, Applescript genellikle golf dillerinde 1. seçenek değildir ;-). Ancak , özellikle kısıtlı kaynak kategorisinde, marjinal olarak yararlı hale geldiği durumlar vardır.
Dijital Travma

4
@Rainbolt Doğada x soruda golf oynamak için diğer ipuçlarından farkı nedir?
Dijital Travma

Yanıtlar:


6

ofOperatör bir nesnenin özelliği almak için kullanılır:

log words of "Hello World"

Ancak birçok durumda 's1 karakteri kaydetmek için kısayol olarak kullanabilirsiniz :

log "Hello World"'s words

6
Applescript'in kesme işaretlerini iyelik olarak ayrıştırması biraz saçma, ama aynı zamanda harika. Bu fikri gruba tanıtan dil tasarımcılarından birini hayal edebiliyorum.
Geobits

9
@Geobits Bunlar genel olarak Applescript'i tanımlamak için harika sıfatlar. AppleScript ise Karar vermedim sadece gülünç müthiş ya Dehşet saçma ;-)
Dijital travma

4

Applescript Editor, sözdizimini vurgulayan ve kodunuzu güzelleştiren kullanışlı küçük bir IDE'dir. Bununla birlikte, golf amacıyla, örneğin endifadelerden 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.


IMO bu AS'ye özgü olmayan genel bir ipucu olarak görülebilir. İzin verirseniz birçok modern IDE bunu yapar.
Geobits

2
@Geobits Kabul Edildi. Gerçi belirli anahtar kelimelerin eklenmesinin endoldukça Applescript'e özgü olduğunu düşünüyorum .
Dijital Travma

Evet, bu sadece benim için şaşırtıcı. Girinti / boşluk şeyleri, gereksiz parantezler vb.
İle

@Geobits Applescript tamamen okunabilirlikle ilgilidir. Sanırım fikir, endbirden fazla iç içe
Digital Trauma

4

tell Applescript'te bloklar yaygındır:

tell application "TextEdit"
    activate
end tell

Ancak yerden tasarruf etmek için, tellbloğun içi sadece bir satır olduğunda aşağıdakiler eşdeğerdir :

tell application "TextEdit" to activate

3
Hangi kendisi tell app "TextEdit" to activate.
wchargin

@WChargin Evet. İsterseniz başka bir cevap olarak ekleyin.
Dijital Travma

4

Bazı kelimeler daha kısa eşanlamlıdır. Örneğin, applicationolarak yazılabilir app* ve stringolarak 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.


3

Teklif Gerekli Çalışma

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

tekrarlanan

Tekrar döngülerinde, "times" sözcüğü tamamen kaldırılabilir.

x kez tekrarla
son

karşı

x'i tekrarla
son

<= ve> =

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.

Kapma Gönderen STDIN

STDIN'den aşağıdaki karakterlerle yakalayabilirsiniz:

koşarken argv
son

Hızlı çıkılıyor

Bir koddan hızlı bir şekilde çıkmanız gerekiyorsa (herhangi bir nedenle, yani aşırı ifs'yi önlemek ) ...

çıkmak

Haha wow, bunu bulmak için bazı troller yapmış olmalısınız;)
Beta Çürümesi

Bunun kullanmak çok .
Addison Crump

Soru ya da ipuçları?
Beta

İpuçları. Ve genel olarak AppleScript.
Addison Crump

Oh şu soru hakkında konuşuyordum :)
Beta Çürüğü

2

Applescript, okunabilirliğe yardımcı olmak için bazı ekstra anahtar kelimelerin eklenmesine izin verir:

log the words of "Hello World"

Ancak theburada tamamen gereksizdir ve 4 karakterden tasarruf etmek için atlanabilir:

log words of "Hello World"

2
Daha kısa varyantlarınız bile olabilir: 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) 'syerine kullanılabilir of.
Addison Crump

@VTCAKAVSMoACE evet, 'sbu cevap kodunda ele alınmıştırgolf.stackexchange.com/a/ 37643/11259 . log"Gerçi bilmek güzel .
Dijital Travma

2

Braket Kısaltma

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.


2

Düşünen...

Büyük / küçük harfe duyarlılık gerektiren sorularda, gerçekte davalarla başa çıkmak zor olabilir.

ŞİMDİYE KADAR:

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.


1

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. emacsBir terminalde koştum ve kullandım M-x hexl-find-file. JonspClpİçine JanspClpve ttxtiç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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.