「もっとプログラマ脳を鍛える数学パズル」という本に載っている
「Q39 隣り合うと消えちゃうんです」の解答コードが理解できません。
どなたかコードのアルゴリズムを解説していただけないでしょうか?
Ruby
1N = 11 2 3# unused:未使用の色の数 4# onetime : 一度だけ使った色 5# neighbor : 隣で使用した色 6@memo = {[0, 0, 0] => 1} 7def pair(unused, onetime, neighbor) 8 if @memo[[unused, onetime, neighbor]] 9 # すでに探索済みの場合、探索結果を再利用 10 return @memo[[unused, onetime, neighbor]] 11 end 12 cnt = 0 13 if unused > 0 # 未使用の色が残っている場合 14 cnt += pair(unused - 1, onetime + neighbor, 1) 15 end 16 if onetime > 0 # 一度だけ使った色が残っている場合 17 cnt += onetime * pair(unused, onetime - 1 + neighbor, 0) 18 end 19 @memo[[unused, onetime, neighbor]] = cnt 20end 21 22puts pair(N, 0, 0)
0と1のみをとる引数 neighbor は 隣で使用した色 と書いてありますがどういうことでしょうか?
また onetime + neighbor では何が行われているのでしょうか?
宜しくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/28 04:12 編集
2020/02/28 04:33
2020/02/28 04:59
2020/02/28 05:13 編集
2020/02/28 06:01
2020/02/28 10:52
2020/02/28 11:45
2020/02/28 13:37
2020/02/28 13:57