J 43
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0
Örnekler:
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0 's'
tuvwxyzabcdefghijklmn opqr
|: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 '['
Bu çözüm J programlama forumunda gelişti: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Yazar: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
açıklama
J cümleleri sağdan başlayarak yürütülür ve devam eden sonucu değerlendirilirken sola aktarılır. Etkileşimli olduğundan, daha iyi anlamak için çözüm parçalarına ayrı ayrı bakabiliriz.
Orta kısım Unicode'da büyük ve küçük harf alfabe oluşturur:
u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
"U:" fiili, sayısal sağ bağımsız değişkenini Unicode karakterlere dönüştürür. Sayısal argüman, büyük ve küçük harf karakterler için ASCII değerlerinden, her biri "i.26" tarafından oluşturulan 0 ile 25 arasındaki değerlere "A" ve "a" sayıları eklenerek oluşturulur:
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
Sağ kısım,
((>:@i.}.[)])"0
sağdaki argümanın (]) solundaki ([) - yukarıdaki harflerin vektörü olan konumunu arar (i.) ve bu sayıdan bir (>:) daha fazla düşer (>.). '0' bu cümleyi 0 boyutlu (skaler) argümanlara uygular.
('123H999' (>:@i.}.[)])"0 'H'
999
"25 {." İfadesi, sağdaki vektörün ilk 25 öğesini alır.
Soldaki sondan bir önceki "1j1 #" ifadesi, sağdaki bağımsız değişkeni soldaki sayıya göre çoğaltır. Basit bir sayı basit bir çoğaltma yapar:
2 # 'ABCD'
AABBCCDD
Bununla birlikte, gerçek ve hayali kısımlar arasında "j" ile gösterilen karmaşık bir sayı, hayali kısma göre bir dolgu elemanı ekler. Burada bir dolgu elemanını "j" nin sağındaki ile belirtiyoruz.
2j1 # 'ABCD'
AA BB CC DD
Çoğu J ilkelinde olduğu gibi, çoğaltma fiili (#), karakter dizileri üzerinde nasıl çalıştığına benzer bir şekilde sayısal diziler üzerinde çalışır. Burada gösterildiği gibi,
1j1 # 1 2 3
1 0 2 0 3 0
varsayılan sayısal dolgu öğesinin sıfır olduğunu, karakterler için ise boşluk karakteri olduğunu görüyoruz.
Son olarak, en soldaki belirteç "|:" önceki fiillerin sonucunu sağa aktarır.
Devon McCormick tarafından sağlanan açıklama. Teşekkürler Devon.