J, 87 79 72 70 67 57 56 ตัวอักษร
'( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1
ใช้อินพุตจากคีย์บอร์ด ตัวอย่าง:
'( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1
((1 2)(3 (4 5) moo)) (i (lik(cherries)e (woohoo)))
4 5 cherries woohoo
1 2 3 moo lik e
i
คำอธิบาย:
คำอธิบายนี้เป็นไปตามโปรแกรมเวอร์ชันแรกของฉัน:
|.|:('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
x=.1!:1[1
นำข้อมูลจากคีย์บอร์ดและนำไปใช้ในx
ภายหลัง
(('('&([:+/=)-')'&([:+/=))\,.i.@#)
สร้างรายการของ indeces ทั้งหมดลงใน string ( i.@#
) และ stitches ( ,.
) พร้อมกับผลลัพธ์ของ(('('&([:+/=)-')'&([:+/=))\
คำกริยา
(('('&([:+/=)-')'&([:+/=))\
คำกริยานี้ถูกนำไปใช้คำนำหน้าของสตริงทั้งหมด (เพื่อให้การป้อนข้อมูลhello
ก็จะนำไปใช้กับh
, he
, hel
, hell
และhello
. มันเป็นทางแยกซึ่งนับจำนวนของวงเล็บเปิด('('&([:+/=)
แล้วหักจำนวนวงเล็บปิด')'&([:+/=)
. นี้ทำให้ผมรายการ ของ indeces ลงในสายอักขระและระดับอักขระที่ดัชนีนั้นควรอยู่ที่ผลลัพธ์ในการป้อนข้อมูลแบบง่ายนี้ทำให้ฉันมีดังต่อไปนี้:
(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))
1 0
1 1
1 2
1 3
2 4
2 5
2 6
2 7
3 8
3 9
3 10
3 11
3 12
3 13
2 14
1 15
0 16
((' '$~{.@]),[{~{:@])"1
นี่เป็นคำกริยาที่นำรายการที่ฉันเพิ่งสร้างและเอาท์พุทของ('( ) 'charsub x)
(ซึ่งจะทำการแทนที่สตริงเพื่อแทนที่วงเล็บทั้งหมดด้วยช่องว่างในx
) มันต้องใช้หางของรายการของรายการแต่ละและใช้มันเป็นดัชนีเป็นสตริงที่จะได้รับตัวละคร{:@]
[{~{:@]
จากนั้นก็จะนำหน้ามันกับจำนวนของช่องว่างตามที่ระบุโดยหัวของแต่ละรายการในรายการ,
(' '$~{.@])
จากตัวอย่างก่อนหน้านี้ทำให้ฉัน:
('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))
o
n
e
t
w
o
t
h
r
e
e
จากนั้นฉันจะย้ายอาเรย์|:
และย้อนกลับ|.
เพื่อรับเอาต์พุตที่ต้องการ
((1 2))))))))))3
ควรไม่ถูกต้องหากความสูงเชิงลบถูกห้าม