零狐春なる謎制作団体を運営している友人から、裏サンデーとのコラボイベント、迷宮バアルのデバッグのお誘いを頂いたので参加してきました。未完成な部分も結構あったのですが面白かったです。ちょっと見ていてハラハラするけれども、成功するといいなと思います。
夕方からバイト。久しぶりに大量の問題を捌きました。マラソンっぽい感じはそんなに嫌いではない。そういえばこの前やってきた問題「1から15までの数字を何個か選ぶとき、それぞれの数字が2以上離れているような選び方は何通りあるか」に対して誤答ではないかとの返答をもらっていたのでコンピュータで解いたのですが普通に合ってるっぽいし謎です。方法にも特に問題はないし。
それなりに気に入っているアルゴリズム(うまい方法はもっとたくさんあるのだろうけど)。
def solve_sub(a, z) if a.length() == z then if check(a) @x += 1 end else b = copy(a) c = copy(a) solve_sub(b.push(0),z) solve_sub(c.push(1),z) end end def check(a) m = 0 num = a.length() for i in 0..(num-2) if a[i] == 1 && a[i+1] == 1 m += 1 end end if m == 0 then return true else return false end end def copy(a) b = [] for i in 0..(a.length()-1) b[i] = a[i] end return b end def solve(n) @x = 0 solve_sub([],n) puts @x-1 end
solve(15) #=>1596
はてなブログの方も使ってみるようになって、なかなかいいなと思うようなってきました。もしかしたら移行するかもしれません。でもダイアリーも気に入ってるし、慣れちゃっているのよね。ううむ、悩みどころ。