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. Числовий аргумент генерується із значень ASCII для великих і малих символів, додаючи числа для "A" і "a" кожен до значень від 0 до 25, породжених "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
Права частина,
((>:@i.}.[)])"0
шукає вгору (i.) положення правого аргументу (]) зліва ([) - який є вектором букв вгорі - і опускає (}.) ще один (>:), ніж це число. "0" застосовує цю фразу до 0-мірних (скалярних) аргументів.
('123H999' (>:@i.}.[)])"0 'H'
999
Фраза "25 {." Займає перші 25 елементів вектора праворуч.
Передостаннє словосполучення "1j1 #" зліва повторює його правий аргумент відповідно до лівого числа. Просте число робить просту реплікацію:
2 # 'ABCD'
AABBCCDD
Однак складне число - позначене "j" між реальною та уявною частинами - вставляє елемент заповнення відповідно до уявної частини. Тут ми вказуємо один елемент заповнення тим, що праворуч від "j".
2j1 # 'ABCD'
AA BB CC DD
Як і у більшості примітивів J, дієслово-реплікація (#) працює на числових масивах аналогічно тому, як це працює на масивах символів. Як показано тут,
1j1 # 1 2 3
1 0 2 0 3 0
ми бачимо, що за замовчуванням числовий елемент заповнення дорівнює нулю, тоді як для символів це символ пробілу.
Нарешті, крайній лівий маркер "|:" переносить результат попередніх дієслів праворуч.
Пояснення надав Девон Маккормік. Дякую, Девон