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
ฉัน
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-scalar (scalar)
('123H999' (>:@i.}.[)])"0 'H'
999
วลี "25 {." ใช้ 25 องค์ประกอบแรกของเวกเตอร์ทางด้านขวา
วลีที่ต่อท้าย "1j1 #" ทางซ้ายทำซ้ำอาร์กิวเมนต์ที่ถูกต้องตามหมายเลขด้านซ้าย หมายเลขธรรมดาทำการจำลองแบบง่าย ๆ :
2 # 'ABCD'
AABBCCDD
อย่างไรก็ตามจำนวนเชิงซ้อน - ระบุโดย "j" ระหว่างส่วนจริงและจินตภาพ - แทรกองค์ประกอบเติมตามส่วนจินตภาพ ที่นี่เราระบุองค์ประกอบเติมหนึ่งโดยหนึ่งไปทางขวาของ "j"
2j1 # 'ABCD'
AA BB CC DD
เช่นเดียวกับ primitives J ส่วนใหญ่การทำซ้ำกริยา (#) จะทำงานกับอาร์เรย์ตัวเลขในแบบอะนาล็อกที่คล้ายคลึงกับวิธีการทำงานของอาร์เรย์อักขระ ดังที่แสดงไว้ที่นี่
1j1 # 1 2 3
1 0 2 0 3 0
เราจะเห็นว่าองค์ประกอบเติมตัวเลขเริ่มต้นเป็นศูนย์ในขณะที่สำหรับตัวละครมันเป็นตัวละครที่ว่าง
ในที่สุดโทเค็นซ้ายสุด "|:" จะสลับผลลัพธ์ของคำกริยาก่อนหน้าไปทางขวา
คำอธิบายจัดทำโดย Devon McCormick ขอบคุณ Devon