2007-07-01から1ヶ月間の記事一覧

議席数をドント方式で

http://ja.doukaku.org/26/ ちょっと無理めかもしれませんが、勉強のために合成モナドを使いました。 import Data.List import Control.Monad.State import Control.Monad.Writer data Vote = V {idx::Int, num::Double, poll::Double} deriving Show type V…

マップの通りぬけ

http://ja.doukaku.org/30/ import Data.Maybe (fromJust) import System (getArgs) import Control.Monad (liftM) type Point = ((Int,Int),Char) data Direction = N | S | W | E deriving (Eq, Show) direction d = fromJust $ lookup d [(N,[E,N,W,S]),(…

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

http://ja.doukaku.org/21/ f = take 100 $ concatMap sequence $ scanl1 (++) $ repeat [['A'..'Z']]

逆順になるアミダくじ

http://ja.doukaku.org/20/ nが11以上になると表示がくずれるYO。あとやたらintersperseしてて見苦しい。 (追記) これ全然ダメだ...またやっちゃった (追追記) 修正した import Data.List amida n = mapM_ print $ tail $ transpose (f ++ [line]) where lin…

アレイのuniqどう書く

http://ja.doukaku.org/16/ (via http://d.hatena.ne.jp/takkan_m/20070711) こんなんじゃダメかね? import Data.Array import Data.List (nub) f arr = let assoc = zip (indices arr) (nub (elems arr)) in array (fst (head assoc), fst (last assoc)) as…

ICPC: Problem A Keitai Message

http://www.deqnotes.net/acmicpc/p0003/ja (via hattanさんとzyxwvさん) みんなやってて楽しそうだったからやりました。Parsecでやっつ系。 import Text.ParserCombinators.Parsec as Parsec key = [cycle ['.',',','!','?',' '], cycle ['a','b','c'], cyc…

コインを減らす払い方

http://ja.doukaku.org/3/ import Data.List (notElem, nub, minimumBy, group) import Control.Monad (filterM, guard) pay 0 = [] pay n | n >= 500 = 500:pay (n - 500) | n >= 100 = 100:pay (n - 100) | n >= 50 = 50 :pay (n - 50) | n >= 10 = 10 :pa…

ピラミッドを作る

http://ja.doukaku.org/8/ pyramid n i | n == i = [replicate (2 * n - 1) '*'] | otherwise = let p = pyramid n (i + 1) in (f (reverse (f (head p)))):p where f [] = [] f (x:xs) = if x == ' ' then x:f xs else ' ':xs f n = mapM_ print $ pyramid n…

倍数になる13進数

http://ja.doukaku.org/14/ s13 s = sum $ map (\(y,z) -> (13 ^ y) * (read [z])) $ zip [(length s)-1,(length s)-2..0] s f = [n | n <- [10..], n * 2 == s13 (show n)]

君ならどう書く2.0

http://karetta.jp/article/blog/ll-spirit/033840 import Data.List data Oke = Oke {limit::Int, amount::Int} deriving (Show, Eq) type Oke3 = (Oke,Oke,Oke) (.<.) x1@(Oke l1 a1) x2@(Oke l2 a2) | l1 == a1 = Nothing | a2 == 0 = Nothing | l1 < (a1…