Tree Summing
例の、最近流行った奴です。コードを短くする方向で盛り上がってましたけど、それとは違う方向性で。
匠の技的な正規表現で書けないかと考えています。
上のエントリで書いたように、PerlやRubyの正規表現では、再帰的な構造は扱えないので、PCREを使わないとダメです。PCREを使っているものというと、PHPやPythonがあるのですが、私のcygwin環境には、Pythonが入っているので、こちらを使って考えてみようと思います。
-
-
- -
-
ところで、本格的に取り掛かる手ならしとして、Perlでなんとなく書き下したコードが以下です。Cのソースとは、全然違うアプローチになっちゃいました。
#!/usr/bin/perl $_ = join('',<stdin>); s/\r|\n|\s//g; s/\)(\d+)\(/)\n$1(/g; s/\(\)//g; while(s/\(([^()]+)\)/pTree($1)/eg){}; s/(.+)/judge($1)/eg; print $_."\n"; sub pTree { @lst = split(/\s+/,(shift)); if($#lst == 0){ return ' '.$lst[0]; }else{ $s = shift @lst; return ' '.join(' ',map {$_+$s} @lst); } } sub judge { @lst = split(/\s+/,(shift)); $s = shift @lst; @res = grep {$s==$_} @lst; return ($#res >= 0)?"yes":"no"; }