Menggunakan iterasi untuk menghitung urutan
Biasanya, menyelesaikan tantangan urutan OEIS akan membutuhkan penggunaan salah satu formula yang diberikan pada halamannya. Beberapa di antaranya beradaptasi dengan baik untuk J, dan yang lain tidak begitu banyak. Rumus rekursif bersifat langsung, namun iterasi mungkin tidak sederhana. Pola yang mulai saya gunakan adalah
(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
di mana s
adalah nilai pertama dalam urutan, f
adalah kata kerja yang akan menghitung istilah berikutnya yang diberikan istilah sebelumnya, dan n
merupakan indeks berbasis nol dari istilah yang ingin Anda hitung. Metode ini bergantung pada fakta bahwa ketika menghitung kekuatan angka dua, LHS terikat pada angka dua untuk membentuk monad baru, dan bahwa monad bersarang pada nilai awal. Angka dua yang diberikan pada keterangan daya adalah sebuah kait di mana (]f)
diberikan indeks n
pada LHS dan nilai suatu istilah dalam urutan s
. Hook akan berlaku f
pada s
sebagai monad, dan kemudian mengabaikan n
untuk mengembalikan hasil f s
.
Perpustakaan standar
Terkadang, Anda mungkin menemukan bahwa J akan memiliki dukungan untuk kata kerja di perpustakaan standarnya . Sebagai contoh, sebagian besar operasi integer bitwise terikat pada nama yang lebih pendek daripada menggunakan panggilan primitif.
AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'
Tanggal dan waktu bawaan juga tersedia.
Kisaran
Jika Anda memiliki seperangkat nilai [a, b, c]
dan Anda ingin membentuk rentang berdasarkan pada produk mereka seperti [0, 1, 2, ..., a*b*c-1]
, pendekatan khas akan menemukan produk mereka dan kemudian membentuk rentang yang mungkin [:i.*/
biaya 6 byte. Cara yang lebih pendek adalah ,@i.
untuk 4 byte sejak itui.
dapat membentuk array multidimensi sambil tetap menghitung, dan meratakannya akan menghasilkan kisaran yang setara.
Mencetak terus menerus
Cara diam-diam untuk mencetak nilai dan terus menggunakannya tanpa loop eksplisit adalah ([echo)
untuk kasus monadik. echo
adalah kata kerja di perpustakaan standar yang mencetak isinya ke stdout
dalam format yang sama yang digunakan dalam penerjemah. Pengait kemudian mengeluarkan nilai input yang sama menggunakan [
kata kerja kiri .
Basis 10 digit bilangan bulat
Cara standar untuk memperoleh basis 10 digit integer adalah 10#.inv]
yang menghabiskan biaya 8 byte, terlalu banyak! Alternatifnya adalah mengonversinya menjadi string dan menguraikannya pada peringkat 0 "."0@":
yang menyimpan byte, tetapi cara yang lebih baik adalah ,.&.":
yang menyimpan byte lain yang membuat biaya akhir 6 byte bukannya 8.
GolfScript gets its own way far too often
pada tahun 2019.