2015-07-09

Regex Golf をやってみた 12 〜Triples〜

Regex Golf 12回目(11回目はこちら

早くも毎日更新が辛くなりサボりがちになってきました。
今日はキリの良い所まで行きませんがご容赦を。

さて、気を取り直して正規表現によるパズルゲーム? Regex Golf 10問目 "Triples" に挑戦です。



お題は "Triples" です。3の倍数を検索です。

以下、ネタバレ

3の倍数をなんて検索なんて無理じゃない?と思いましたが、3の倍数は各桁の和も3の倍数になるという性質を使って検索すればよいみたいです。

各桁の和が3で割り切れるということは、各桁を3で割った余りの合計が3で割り切れるということなので、単純に考えるために数字を3つのグループに分けて考えます。

1桁の数字を3で割った余りで 3 つグループに分けます
  • A:余り0のグループ(0, 3, 6, 9)
  • B:余り1のグループ(1, 4, 7)
  • C:余り2のグループ(2, 5, 8)
3 の倍数は全桁の中に
  • A は何回現れてもよい
  • B と C が現れる回数により 3 の倍数か否かが決まる
では、どのような回数であればよいかというと
  • B が現れる回数を 3 で割った余りを b 回
  • C が現れる回数を 3 で割った余りを c 回
とすると
  • b と c が同じ
であれば 3 の倍数になる。

後はこれを正規表現でかけばOK!
正規表現を考えるのは次回に持ち越します。

ということで次回、13 回目は 10 問目 "Triples" の続きです。

0 件のコメント: