J 43
|:1j1#(25{.(u:,2#65 97+/i.26)(>:@i.}.[)])"0
Ví dụ:
|: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 '['
Giải pháp này đã phát triển trên diễn đàn lập trình J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Tác giả: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Giải trình
Các cụm từ J được thực hiện bắt đầu ở bên phải, chuyển kết quả đang diễn ra sang bên trái khi nó được đánh giá. Vì nó tương tác, chúng ta có thể tách biệt các phần của giải pháp để hiểu rõ hơn về chúng.
Phần giữa tạo ra bảng chữ cái in hoa và in thường trong Unicode:
u:,2#65 97+/i.26
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
Động từ "u:" chuyển đổi đối số đúng số của nó thành các ký tự Unicode. Đối số số được tạo từ các giá trị ASCII cho các ký tự chữ hoa và chữ thường bằng cách thêm các số cho "A" và "a" cho các giá trị từ 0 đến 25 được tạo bởi "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
Phần bên tay phải,
((>:@i.}.[)])"0
tìm kiếm (i.) vị trí của đối số bên phải (]) ở bên trái ([) - là vectơ của các chữ cái ở trên - và giảm (}.) thêm một (> :) so với số đó. '"0' áp dụng cụm từ này cho các đối số 0 chiều (vô hướng).
('123H999' (>:@i.}.[)])"0 'H'
999
Cụm từ "25 {." Lấy 25 phần tử đầu tiên của vectơ bên phải.
Cụm từ áp chót "1j1 #" ở bên trái sao chép đối số bên phải của nó theo số bên trái. Một số đơn giản thực hiện một bản sao đơn giản:
2 # 'ABCD'
AABBCCDD
Tuy nhiên, một số phức - được biểu thị bằng "j" giữa các phần thực và phần ảo - chèn một phần tử điền theo phần ảo. Ở đây chúng tôi chỉ ra một yếu tố điền bởi một bên phải của "j".
2j1 # 'ABCD'
AA BB CC DD
Như với hầu hết các nguyên hàm J, động từ sao chép (#) hoạt động trên các mảng số theo kiểu hậu môn cho đến cách nó hoạt động trên các mảng ký tự. Như được hiển thị ở đây,
1j1 # 1 2 3
1 0 2 0 3 0
chúng ta thấy rằng phần tử điền số mặc định là 0 trong khi đối với các ký tự thì đó là ký tự khoảng trắng.
Cuối cùng, mã thông báo ngoài cùng bên trái "|:" chuyển kết quả của các động từ đi trước sang phải.
Giải thích được cung cấp bởi Devon McCormick. Cảm ơn bạn.