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 s
dizideki ilk değerdir, f
önceki dönem verilen sonraki dönem hesaplamak olacak bir fiil olduğunu ve n
sen 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 n
ve dizideki bir terimin değeri olan bir kancadır s
. Kanca uygulayacak f
üzerinde s
bir monad olarak, sonra da görmezden n
sonucunu 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. echo
Standart kütüphanede içeriklerini yorumlayıcıda stdout
kullanı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 often
2019'da okumayla ilgili komik bir şey var.