Skip to content

Instantly share code, notes, and snippets.

@mad-p
Created September 24, 2013 22:32
Show Gist options
  • Save mad-p/6692260 to your computer and use it in GitHub Desktop.
Save mad-p/6692260 to your computer and use it in GitHub Desktop.
初めてのHaskell: CodeIQ 468 ナムドット問題
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
@mad-p
Copy link
Author

mad-p commented Sep 27, 2013

「初めてのHaskell」っていうタイトルは、私が書いたHaskellプログラム第1号という意味であって、
これからHaskellを学ぶ人はお手本にしなさい、という意味ではありません。
というわけで達人に添削してもらいたいですw

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment