Tree Summing問題
[id:lethevert:20051213:p2]
PCREはそれとして、この問題は、PerlのOne-Linerかつ1正規表現でやってみようかと思います。
とりあえず、今のところできている部分。(見やすいように展開)
#!/usr/bin/perl $_=join '', <stdin>; while( s/\(\) |\(\s* (\d+) (\s*\|((\d+\s*\|)*\d+))? \s*\) /if($1){ if(!length($2)){ "|$1" }else{ '|'.join('|', (map {$1+$_} (split(\/\s*\|\/, $3)))) } }/gex ){print}
実行結果は、こんな感じになります。
22 |27|22|26|18 20 |27|22|26|18 10 |9|13|10|8 5
あとは、下のような判定コードを組み合わせるだけなんですが。
@a=split(/\s*\|/,$_); $a=shift @a; if(grep {$a==$_} @a){ print "yes" }else{ print "no" }