HaskellでGCJ (反省会 - Google Code Jam 2012 - Round 1-A Problem B) [Google Code Jam]
問題BもHaskellでやってみる。
条件によって処理を選択して次の状態を生成していく、という方針でしょうか。
こういうのは書きづらいですね。良いパターンを知りたいです。
case ofで連結版
今回は条件が3つだからいいですけれど、もっと増えるとしんどそう。
条件をリストにして、パターンマッチ機構で条件が成立するまで実行する版
これも、条件が増えるとリストが長ったらしくなっていまいち感が。
実行速度はcase ofの連結版と大体同じでした。
連結関数で連結版
smallサイズでは良いのですが、largeサイズにすると計算が終わりません。。。
solve関数を外に出したり中に入れたりいろいろ試したのですがうまく行きませんでした。
comb関数で一つ目の引数が正を返したら2つ目以降は評価しないと思うので、
計算量は変わらないと思うのですが。
リスト版と連結関数版の全ソースを載せておきます。
リスト版
連結関数版 - largeを解答不能
判定関数の真偽が反転しているのは、途中までspanでやっていたのですがbreakも
試してみたかったからです。
条件によって処理を選択して次の状態を生成していく、という方針でしょうか。
こういうのは書きづらいですね。良いパターンを知りたいです。
case ofで連結版
今回は条件が3つだからいいですけれど、もっと増えるとしんどそう。
条件をリストにして、パターンマッチ機構で条件が成立するまで実行する版
これも、条件が増えるとリストが長ったらしくなっていまいち感が。
実行速度はcase ofの連結版と大体同じでした。
連結関数で連結版
smallサイズでは良いのですが、largeサイズにすると計算が終わりません。。。
solve関数を外に出したり中に入れたりいろいろ試したのですがうまく行きませんでした。
comb関数で一つ目の引数が正を返したら2つ目以降は評価しないと思うので、
計算量は変わらないと思うのですが。
リスト版と連結関数版の全ソースを載せておきます。
リスト版
連結関数版 - largeを解答不能
判定関数の真偽が反転しているのは、途中までspanでやっていたのですがbreakも
試してみたかったからです。
コメント 0