Created
September 24, 2013 22:32
-
-
Save mad-p/6692260 to your computer and use it in GitHub Desktop.
初めてのHaskell: CodeIQ 468 ナムドット問題
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Data.List | |
-- 分割psのi番目にdを追加する | |
append d ps i = let (l, rr) = splitAt i ps | |
m = head rr | |
r = tail rr | |
in l ++ [m ++ d] ++ r | |
-- 各分割にdを追加したもの、dを新規分割として加えたものを返す | |
add d ps = (map (append d ps) [0..length ps - 1]) ++ [ps ++ [d]] | |
-- 分割にdを加える可能性をすべて列挙する | |
part d = concatMap $ add d | |
-- 空分割に1〜5を順に加え、52通りの分割を得る | |
weeks = (foldr (.) id $ map part $ map show $ reverse [1..5]) [[]] | |
answer = map (intercalate ".") weeks | |
main = do putStrLn $ intercalate "\n" answer |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
「初めてのHaskell」っていうタイトルは、私が書いたHaskellプログラム第1号という意味であって、
これからHaskellを学ぶ人はお手本にしなさい、という意味ではありません。
というわけで達人に添削してもらいたいですw