doukaku

FizzBuzz

ちょっと前に、どうかく?org で FizzBuzz の変形版が出てたのでここにさらしたストックからいくつか投稿しておいた。どうも C++ の template を使ったやつが評価が高いようだ。 まぁ、なんというかあれって今見ると Haskell 風のパターンマッチを template …

n倍完全数

ref:ダブル完全数 自分自身も含めた約数の和が自分自身の n 倍になる数を n 倍完全数というらしい。ということで、n 倍完全数を列挙するプログラムとか。 愚直な解き方。 def divisors(n): return (i for i in xrange(1, n + 1) if n % i == 0) def perfect_…

アルファベットの繰り上がり #2

ref:アルファベットの繰り上がり Enum クラスのデータを定義するというネタで。これで任意区間を簡単に取得できる。 import Char alpha_succ :: String -> String alpha_succ [] = "A" alpha_succ ('Z':cs) = 'A' : alpha_succ cs alpha_succ (c:cs) = succ …

アルファベットの繰り上がり

ref:アルファベットの繰り上がり import Char next :: String -> String next [] = "A" next ('Z':cs) = 'A' : next cs next (c:cs) = succ c : cs main :: IO () main = mapM_ (putStrLn . reverse) $ take 100 $ iterate next "A" 普通に基数変換かと思い…

ピラミッド

ref:ピラミッドを作る ひきつづき HUnit の練習。TDD、TDD。 import Test.HUnit nrepeat :: Int -> b -> [b] nrepeat n c = take n (repeat c) pyramid :: Int -> String pyramid n = pyramid' 1 (n - 1) where pyramid' _ s | s < 0 = [] pyramid' i s = nr…

コメントの削除

ref:/*コメント*/を取り除く どう書く?org こう、Haskell の練習というか HUnit の使い方確認というか。 import Test.HUnit removeComment :: String -> String removeComment = outOfComment where outOfComment ('/':'*':cs) = inComment cs outOfComment…