fortranプログラムのインプットファイルを作るスクリプトを書いてて悩んだ。
数字の並びがこんな風にあった場合に
1,3,4,5,7,9,10,11,12,15
を
1 3 -5 7 9 -12 15
みたいに変換するという。要するに数値が3,4,5というふうに3つ以上並ぶ場合には3 -5と省略できるようなヒトにやさしいフォーマットなんだけど。これを数列から作り出すのに結構悩んだ。
my @sort = ();
my @b = ()
my @a = (1,3,4,5,7,9,10,11,12,15)
for(@a,null){if($b[-1]+1 == $_ || @b == 0){push
@b,$_}else{@b>2?push@sort,($b[0],-$b[-1]):push @sort,@b; @b=($_)}}
for (@a,null)ってなんか気持ち悪いけど、とりあえず。
でもこれって再帰でできないのかな。