正規表現による不定方程式の解法
聞けば納得だけど,感動したのでメモメモ
たとえば
の解のうちx最大となるものを求めよ
なんてとき
if(my ($X, $Y, $Z) = ( ('o' x 281) =~ /^(o*)\1{11}(o*)\2{14}(o*)\3{15}$/)){ print "answer is ".length($X).",".length($Y).",".length($Z)."\n"; }else{ print "no answer\n"; }
とすれば解けるのですよ.
読める人は読めますが,最初に281を281個の'o'で表現するのがミソです.次に,「(o*)\1{11}」で後方参照で「12x」を表現しているってのがうまいやりかただなぁと思うわけです.むむむ,奥深き正規表現よ.チューリングマシンがどうこういってるばやいではないね.