J, 87 79 72 70 67 57 56 karakter
'( ) 'charsub|.|:(+/\@('('&=-')'&=)(],~' '$~[)"0])1!:1[1
Klavyeden girdi alır. Örnek:
'( ) '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
Açıklama:
Bu açıklama programımın ilk versiyonuna dayanıyor:
|.|:('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
x=.1!:1[1
klavyeden giriş almak ve x
daha sonra kullanmak
(('('&([:+/=)-')'&([:+/=))\,.i.@#)
tüm iç dizilerin bir listesini oluşturur ( i.@#
) ve fiilin ,.
sonucu ile birlikte dize diker ( ) (('('&([:+/=)-')'&([:+/=))\
.
(('('&([:+/=)-')'&([:+/=))\
Bu fiil (böylece girişinde dize önekleri tüm uygulanır hello
bunun geçerli olacak etmek h
, he
, hel
, hell
, ve hello
. Bu bir olan çatal açık parantez sayar, ('('&([:+/=)
sonra da kapat parantez sayısını çıkarır ')'&([:+/=)
. Bu bana listesini verir dize içine indeces ve o indeksteki karakterin çıktıda olması gereken seviye Basit girişlerde bu bana aşağıdakileri verir:
(('('&([:+/=)-')'&([:+/=))\,.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
Bu sadece yeni oluşturduğum listeyi ve çıktılarını ('( ) 'charsub x)
(ki tüm parantezleri boşluklarla değiştirmek için bir dize değiştirme yapan) alan bir fiildir x
. Listedeki her öğenin kuyruğunu alır {:@]
ve karakteri almak için dizgede bir dizin olarak kullanır [{~{:@]
. Ardından ,
listedeki her bir öğenin başı tarafından belirtildiği gibi boşluk sayısıyla onu ön ekler (' '$~{.@])
. Önceki örnekte bu bana verir:
('( ) 'charsub x)((' '$~{.@]),[{~{:@])"1(('('&([:+/=)-')'&([:+/=))\,.i.@#)x=.1!:1[1
(one(two(three)))
o
n
e
t
w
o
t
h
r
e
e
Sonra diziyi |:
çevirip |.
istenen çıktıyı elde etmek için tersine çeviriyorum .
((1 2))))))))))3
negatif yükseklikler yasaksa giriş geçersiz olmalıdır.