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 구문은 오른쪽에서 시작하여 평가되는대로 진행중인 결과를 왼쪽으로 전달합니다. 대화식이므로 솔루션을보다 잘 이해하기 위해 솔루션을 개별적으로 볼 수 있습니다.
가운데 부분은 대문자와 소문자 알파벳을 유니 코드로 생성합니다.
u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
"u :"동사는 숫자의 오른쪽 인수를 유니 코드 문자로 변환합니다. 숫자 인수는 "A"및 "a"의 숫자를 각각 "i.26"에 의해 생성 된 0에서 25까지의 값에 추가하여 대문자 및 소문자의 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
위의 문자로 구성된 벡터 인 왼쪽 ([)에서 오른쪽 인수 (])의 위치를 찾은 다음 해당 숫자보다 하나 (> :)를 떨어 뜨립니다 (} :). ' "0'은이 구를 0 차원 (스칼라) 인수에 적용합니다.
('123H999' (>:@i.}.[)])"0 'H'
999
"25 {."구문은 오른쪽에있는 벡터의 처음 25 개 요소를 사용합니다.
왼쪽의 두 번째 구문 "1j1 #"은 왼쪽의 숫자에 따라 오른쪽 인수를 복제합니다. 간단한 숫자는 간단한 복제를 수행합니다.
2 # 'ABCD'
AABBCCDD
그러나 실수 부와 허수 부 사이에 "j"로 표시된 복소수는 허수 부에 따라 채우기 요소를 삽입합니다. 여기서 우리는 하나의 채우기 요소를 "j"의 오른쪽에 하나씩 나타냅니다.
2j1 # 'ABCD'
AA BB CC DD
대부분의 J 프리미티브와 마찬가지로 replicate 동사 (#)는 숫자 형 배열에서 문자형 배열에서 작동하는 방식에 대한 분석 방식으로 작동합니다. 여기에 표시된대로
1j1 # 1 2 3
1 0 2 0 3 0
기본 숫자 채우기 요소는 0 인 반면 문자의 경우 공백 문자입니다.
마지막으로 가장 왼쪽 토큰 "| :"은 앞의 동사 결과를 오른쪽으로 바꿉니다.
Devon McCormick이 제공 한 설명. 데본 감사합니다.