J 43
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0
Contoh:
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 's'
opqr tuvwxyzabcdefghijklmn
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 's.'
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 '['
Solusi ini berkembang pada forum pemrograman J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Penulis: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Penjelasan
Frase J dieksekusi mulai di sebelah kanan, meneruskan hasil yang sedang berjalan ke kiri saat dievaluasi. Karena bersifat interaktif, kita dapat melihat potongan-potongan solusi secara terpisah untuk lebih memahami mereka.
Bagian tengah menghasilkan alfabet huruf besar dan kecil di Unicode:
u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
Kata kerja "u:" mengubah argumen hak numerik menjadi karakter Unicode. Argumen numerik dihasilkan dari nilai ASCII untuk karakter huruf besar dan kecil dengan menambahkan angka untuk "A" dan "a" masing-masing ke nilai dari 0 hingga 25 yang dihasilkan oleh "i.26":
65 97+/i.26
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
Bagian kanan,
((>:@i.}.[)])"0
mencari ke atas (i.) posisi argumen kanan (]) di sebelah kiri ([) - yang merupakan vektor huruf di atas - dan menjatuhkan (}.) satu lagi (>:) daripada angka itu. '' 0 'menerapkan frasa ini untuk argumen 0-dimensional (skalar).
('123H999' (>:@i.}.[)])"0 'H'
999
Frasa "25 {." Mengambil 25 elemen pertama dari vektor di sebelah kanan.
Frasa kedua dari belakang "1j1 #" di sebelah kiri mereplikasi argumen kanannya sesuai dengan angka di sebelah kiri. Sejumlah sederhana melakukan replikasi sederhana:
2 # 'ABCD'
AABBCCDD
Namun, bilangan kompleks - ditunjukkan oleh "j" antara bagian nyata dan imajiner - memasukkan elemen isi sesuai dengan bagian imajiner. Di sini kami menunjukkan satu elemen isian dengan elemen di sebelah kanan "j".
2j1 # 'ABCD'
AA BB CC DD
Seperti kebanyakan primitif J, kata kerja replikasinya (#) bekerja pada array numerik dengan cara analagous tentang cara kerjanya pada array karakter. Seperti yang ditunjukkan di sini,
1j1 # 1 2 3
1 0 2 0 3 0
kita melihat bahwa elemen isi numerik default adalah nol sedangkan untuk karakter itu adalah karakter spasi.
Akhirnya, token paling kiri "|:" memindahkan hasil dari kata kerja sebelumnya ke kanan.
Penjelasan diberikan oleh Devon McCormick. Devon terima kasih.