J, 87 79 72 70 67 57 56 karakter
'( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1
Mengambil input dari keyboard. Contoh:
'( ) '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
Penjelasan:
Penjelasan ini didasarkan pada versi pertama dari program saya:
|.|:('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
x=.1!:1[1
ambil input dari keyboard dan masukkan x
untuk nanti
(('('&([:+/=)-')'&([:+/=))\,.i.@#)
membuat daftar semua indeces ke dalam string ( i.@#
) dan jahitan (,.
) bersamaan dengan hasil dari (('('&([:+/=)-')'&([:+/=))\
kata kerja.
(('('&([:+/=)-')'&([:+/=))\
kata kerja ini diterapkan untuk semua prefiks dari string (seterusnya masukan hello
itu akan berlaku untuk h
, he
, hel
, hell
, dan hello
. Ini adalah garpu , yang menghitung jumlah tanda kurung terbuka ('('&([:+/=)
dan kemudian mengurangi jumlah kurung dekat ')'&([:+/=)
. Ini memberi saya daftar dari indeces ke dalam string dan level karakter pada indeks itu harus di dalam output.Pada input sederhana ini memberi saya hal berikut:
(('('&([:+/=)-')'&([:+/=))\,.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
ini adalah kata kerja yang mengambil daftar yang baru saja saya buat dan juga keluaran dari ('( ) 'charsub x)
(yang hanya melakukan penggantian string untuk mengganti semua tanda kurung dengan spasi di x
). Dibutuhkan ekor dari setiap item daftar {:@]
dan menggunakannya sebagai indeks ke dalam string untuk mendapatkan karakter [{~{:@]
. Lalu itu awalan itu,
dengan jumlah spasi seperti yang ditunjukkan oleh kepala setiap item dalam daftar (' '$~{.@])
. Pada contoh sebelumnya ini memberi saya:
('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))
o
n
e
t
w
o
t
h
r
e
e
Saya kemudian memindahkan array |:
dan membalikkannya |.
untuk mendapatkan output yang diinginkan.
((1 2))))))))))3
harus tidak valid jika ketinggian negatif dilarang.