J 43
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0
例:
|: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 '['
このソリューションは、Jプログラミングフォーラムで進化しました:http : //jsoftware.com/pipermail/programming/2012-August/029072.html
著者:AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
説明
Jフレーズは右側から実行され、進行中の結果が評価されると左側に渡されます。インタラクティブであるため、ソリューションの各部分を個別に見て、理解を深めることができます。
中間部分は、Unicodeで大文字と小文字のアルファベットを生成します。
u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
「u:」動詞は、数値の右引数をUnicode文字に変換します。数値引数は、「i.26」によって生成される0〜25の値に「A」と「a」の数値をそれぞれ加算することにより、大文字と小文字のASCII値から生成されます。
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
右側の部分、
((>:@i.}.[)])"0
左([)-上にある文字のベクトルである-の右引数(])の位置を検索(i。)し、その数よりもう1つ(>:)をドロップ(}。)します。'"0'は、このフレーズを0次元(スカラー)引数に適用します。
('123H999' (>:@i.}.[)])"0 'H'
999
「25 {。」フレーズは、右側のベクトルの最初の25要素を取ります。
左側の最後から2番めのフレーズ「1j1#」は、左側の数字に従って右側の引数を複製します。単純な数は単純な複製を行います:
2 # 'ABCD'
AABBCCDD
ただし、実数部と虚数部の間の「j」で示される複素数は、虚数部に応じて塗りつぶし要素を挿入します。ここでは、「j」の右側にある要素によって、1つのフィル要素を示します。
2j1 # 'ABCD'
AA BB CC DD
ほとんどのJプリミティブと同様に、レプリケート動詞(#)は、数値配列で機能し、文字配列で機能する方法と類似しています。ここに示すように、
1j1 # 1 2 3
1 0 2 0 3 0
デフォルトの数値塗りつぶし要素はゼロであるのに対して、文字の場合はスペース文字です。
最後に、左端のトークン "|:"は、先行する動詞の結果を右に置き換えます。
デボンマコーミックが提供する説明。デボンありがとうございます。