正規表現でTree Summing
[id:lethevert:20051216:p1]
長いこと放置していましたが、これも方を付けないと。
とりあえず、今までの内容をまとめたものを以下に。
#!/usr/bin/perl $_=join '', <stdin>; while( s/\s*\(\) |\s*\(\s* (\d+) (\|((\d+\|)*\d+))? \s*\) /if($1){ if(!length($2)){ "|$1" }else{ '|'.join('|', (map {$1+$_} (split(\/\s*\|\/, $3)))) } }/gex ){} for(split /\s+/){ @ARGV=split /\|/; $l=shift; print ((grep {$l==$_} @ARGV)?"yes\n":"no\n"); }
スペースを詰めてみた。
$_=join"",<stdin>;while(s/\s*\(\)|\s*\(\s*(\d+)(\|((\d+\|)*\d+))?\s*\)/if($1){if(!length($2)){"|$1"}else{"|".join("|",(map{$1+$_}(split(\/\s*\|\/, $3))))}}/ge){}for(split/\s+/){@ARGV=split/\|/;$l=shift;print((grep {$l==$_}@ARGV)?"yes\n":"no\n");}
さすがに長いな。One Linerとはいかないな。