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.@#)文字列(i.@#)にすべてのインデックスのリストを作成し,.、(('('&([:+/=)-')'&([:+/=))\動詞の結果と結び付けます()。
(('('&([:+/=)-')'&([:+/=))\この動詞は、その入力に(文字列のすべてのプレフィックスに適用されhello、それはに適用されるh、he、hel、hell、とhello。それはあるフォークオープン括弧の数をカウントし、('('&([:+/=)[閉じる括弧の数を差し引く')'&([:+/=)。これは私のリストを与えます文字列とそのインデックスの文字が出力にあるべきレベルのインデックスの単純な入力では、これは私に次を与えます:
(('('&([:+/=)-')'&([:+/=))\,.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負の高さが禁止されている場合、入力は無効である必要があります。