Dizileri hesaplamak için yinelemeyi kullanma
Tipik olarak, bir OEIS dizisi zorluğunu çözmek, sayfasında verilen formüllerden birini kullanmayı gerektirir. Bunlardan bazıları J için iyi adapte olur, bazıları ise çok değil. Özyinelemeli formüller yalındır, ancak yineleme basit olmayabilir. Kullanmaya başladığım bir kalıp
(s(]f)^:[~]) n
] Gets n
s The first value in the sequence
~ Commute the argument order, n is LHS and s is RHS
[ Gets n
^: Nest n times with an initial argument s
(]f) Compute f s
Returns (f^n) s
nerede sdizideki ilk değerdir, fönceki dönem verilen sonraki dönem hesaplamak olacak bir fiil olduğunu ve nsen hesaplamak istediğiniz terimin sıfır tabanlı endeksidir. Bu yöntem, bir dyad'in gücünü hesaplarken, LHS'nin yeni bir monad oluşturmak için dyad'a bağlı olduğu ve bu monadın başlangıç değerine yuvalandığı gerçeğine dayanır. Güç zarfına verilen dyad , LHS'de (]f)indeks verilen nve dizideki bir terimin değeri olan bir kancadır s. Kanca uygulayacak füzerinde sbir monad olarak, sonra da görmezden nsonucunu döndürmek için f s.
Standart kütüphane
Bazen, J'nin standart kütüphanesinde bir fiili destekleyeceğini bulabilirsiniz . Örneğin, bitsel tamsayı işlemlerinin çoğu, ilkel aramayı kullanmaktan daha kısa olan adlara bağlıdır.
AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'
Tarih ve saat yerleşikleri de mevcuttur.
aralıklar
Eğer bir dizi değeriniz varsa [a, b, c]ve onların ürünlerine göre bir aralık oluşturmak istiyorsanız [0, 1, 2, ..., a*b*c-1], tipik yaklaşım onların ürünlerini bulmak ve sonra [:i.*/6 byte mal olacak bir aralık oluşturmak olacaktır . Daha kısa bir yol ,@i.4 byte içindir, çünkü i.hala saymaya devam ederken çok boyutlu diziler oluşturabilir ve düzleştirilmesi eşdeğer bir aralık üretecektir.
Sürekli baskı
Bir değeri yazdırmanın ve açık bir döngü olmadan kullanmaya devam etmenin en basit yolu ([echo)monadik bir durum için. echoStandart kütüphanede içeriklerini yorumlayıcıda stdoutkullanılan formatta basan bir fiildir . Kanca daha sonra sol [fiili kullanarak aynı giriş değerini iletir.
Bir tamsayının 10 basamağı
Bir tamsayı tabanının 10 basamağını elde etmenin standart yolu, 10#.inv]8 byte, çok pahalı! Bir alternatif, onu bir dizgeye dönüştürmek ve onu "."0@":bir bayttan tasarruf eden 0 rütbesinde ayrıştırmaktır , ancak daha da iyi bir yol, ,.&.":8 yerine son maliyeti 6 bayt yapan başka bir bayttan tasarruf etmektir.
GolfScript gets its own way far too often2019'da okumayla ilgili komik bir şey var.