Rubyの正規表現で加算を判定するこの広告は、90日以上更新していないブログに表示しています。esolang正規表現における「再帰」をご存知でしょうか。一部の正規(自称)表現では再帰的なパターンを定義できるような拡張がなされており、Rubyが使っているOnigmoの正規表現でも再帰の機能が利用できます。この機能は「田中哲スペシャル」と呼ばれて多くの人に愛されているはずなのですが、なぜか2進数の処理に関する記述がググっても見つからなかったので、ここで2進数(と10進数)の足し算について書きたいと思います。or正規表現の再帰をご存知ない方は、TSGの昨年の部報のid:moratorium08さんの記事(p.5)や、今年の部報の私の記事(p.17)をご参照ください。Perlの正規表現をご存知なら、Perlの\k{name}や\g{name}がRubyでは\k<name>に、またPerlの(?&name)や(?P>name)が\g<name>になっていると思ってください。})$/と書くことで"0+0=0"や"10+11=101"にマッチする2進数加算判定の正規表現を作ることができます。Rubyの正規表現はそこまで強力ではありません。再帰を使えば、2進数の加算程度なら書くことができます。次の正規表現をご覧ください*1。なっているときだけマッチする正規表現です。最初に色々なパターンの定義が入っています。参照するテクニックを用いています。このテクは部報の「補数」の節にも書きましたがもう一度説明します。)という再帰的なパターンは、"XX...XXZZZYY...YY"という形式の文字列にマッチし、このときXとYの数は等しくなることがわかります。