JḟÐ € `ị⁸Ṃ €
ṙJṖ € Ṃ €
ṙJṖ «/ argumen: 1D array (z)
J [1,2,3, ..., len (z)]
ṙ putar z dengan masing-masing jumlah di atas (array saat ini adalah 2D)
Ṗ hapus array terakhir
«/ Kurangi dengan minimum [secara implisit vektor]
Cobalah online!
Verifikasi semuanya sekaligus! (sedikit dimodifikasi)
Saya cukup yakin Dennis bisa bermain golf di luar ini.
Bagaimana itu bekerja
Algoritma agak berbelit-belit. Mari kita amati apa yang dilakukannya [4,2,2,5]
.
Pertama, kita gunakan J
untuk memperoleh [1,2,3,4]
. Perhatikan bahwa Jelly menggunakan pengindeksan 1.
Lalu, kita lihat ṙ
. Dibutuhkan dua argumen: array dan integer. Ini memutar array ke kiri dengan jumlah yang ditentukan oleh integer. Di sini, ṙ
akan lihat [4,2,2,5]
di sebelah kiri dan [1,2,3,4]
di sebelah kanannya (lebih lanjut tentang cara kerjanya dapat ditemukan di tutorial ). Dalam Jelly, perintah secara tersamar vektor. Oleh karena itu, perintah ini akan dilakukan pada setiap elemen individu di sebelah kanan, itulah sebabnya kami akan membuat array 2D:
Oleh karena itu, [4,2,2,5]ṙ[1,2,3,4]
menjadi [[4,2,2,5]ṙ1,[4,2,2,5]ṙ2,[4,2,2,5]ṙ3,[4,2,2,5]ṙ4]
, yang menjadi:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2],
[4,2,2,5]]
Perhatikan bahwa elemen asli ada di baris terakhir, karena di baris itu kita diputar ke kiri dengan jumlah yang sama dengan panjang array, itulah sebabnya kita menggunakan Ṗ
berikutnya untuk menghapus baris itu, sehingga kolom adalah koleksi dari elemen array yang tidak pada indeks saat ini:
[[2,2,5,4],
[2,5,4,2],
[5,4,2,2]]
Operasi berikut «/
,, juga cukup berbelit - belit. Pertama, «
mengembalikan minimum dua angka yang dilihatnya di sebelah kiri dan di sebelah kanannya. Misalnya, 5«3
kembali 3
. Sekarang, jika dua argumen adalah array, maka itu akan menjadi vektor seperti yang saya katakan di atas. Artinya ini yang [1,5,2,3]«[4,1,5,2]
akan menjadi [1«4,5«1,2«5,3«2]
apa adanya [1,1,2,2]
. Sekarang, /
adalah reduce
, yang berarti bahwa kita melakukan operasi di setiap baris hingga akhir. Misalnya, [1,2,3,4]+/
akan menjadi ((1+2)+3)+4
, yang merupakan jumlah dari array [1,2,3,4]
.
Jadi, jika kita menerapkan «/
array 2D yang baru saja kita peroleh, kita akan mendapatkan:
([2,2,5,4]«[2,5,4,2])«[5,4,2,2]
yang, karena vektorisasi, akan setara dengan:
[2«2«5,2«5«4,5«4«2,4«2«2]
yang menghitung minimum setiap array tanpa elemen pada indeks.
[4 3 2 2 5]
dikeluarkan?