Python温泉まとめ

  • 最中限にデッキシステムが導入された
  • 終盤の読み切り部分をHaskellでどの程度の時間かかるか調べてみた結果、なんとC++より2倍くらい速くなった
    • 厳密に同じ処理でベンチマークしたわけではないので注意
    • TODO: C++版からよけいな機能をそぎ落として同じものにしたら同じくらいの速度になるのか、それともHaskell版がMacBookの2つのコアを使ってくれてるから2倍速いのか確かめる。
  • id:Voluntasに添削されながら最中限オンライン2(対人戦)のデータベース設計
  • 充実しすぎて解散寸前に自分のバッテリーがオフに
  • 「バッテリーが残り5%です」状態で駅(熱海?)をさまよっているところをid:tasukuchanに発見され東京駅まで熟睡しながら搬送される
  • 東京駅で山手線に乗り換えたものの、どの駅で降りたらいいのかがわからず頭が回らないのでもう一度熟睡
  • 東京駅についたので降りて総武線に乗り換えて帰った
  • 今まで寝てた

ブログに何か書いとかないと遭難したと思われるかもしれないので書いておいた。

Haskell と Python

Haskell

first_turn :: Score  -> [Int] -> [Int] -> [Int]
first_turn game_score xs yzs = [
    sum 
        [(max_of_list 
            (second_turn 
                game_score
                (progress_turn (Play x y z))
                (delete x xs)
                (delete y (delete z yzs))))
         | y <- yzs, z <- yzs, y /= z]
    | x <- xs]

とそれを移植したPythonのコード

def first_turn(game_score, xs, yzs):
    """
    最終ラウンドの探索、1ターン目
    現在のゲームスコア、自分が出せる札、他人が出せる札、を引数として取り、
    「第2ラウンドで、その後を読んだ結果勝ち点が最大になる手を選ぶ」
    という条件で第1ターンの今何を出すとどれくらいの勝ち点が得られるかを
    他人が出しうるすべての手について合計したものを返す。
    :: Score -> [Int] -> [Int] -> [Int]
    """
    return (
        sum(
            max(
                second_turn(
                    game_score,
                    progress_turn((x, y, z)),
                    delete(x, xs),
                    delete(y, delete(z, yzs))))
            for y in yzs for z in yzs if y != z)
        for x in xs)

同じだね(ぇ
とか言ってたらネガティブキャンペーンされたw
http://twitter.com/voluntas/status/975205263