haskell

整数の漢数字表記

http://ja.doukaku.org/38/ http://ja.doukaku.org/comment/2055/ プログラマのためのコロシアム,どう書く?orgに参戦することにしました。皆様お手やわらかに。あっ間違えた、じゃアレなんでこれからはテストをちゃんと書こうと思います。どうなるか分かんな…

A Taste of Haskell

http://conferences.oreillynet.com/presentations/os2007/os_peytonjones.pdf (発表資料のPDF) http://blip.tv/file/324976 (動画 A Taste of Haskell Part I) http://blip.tv/file/325646 (動画 A Taste of Haskell Part II) OSCON2007 Simon Pyton-Jones…

議席数をドント方式で

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…

地下鉄の求人広告2

一応動いたけど、ちょっと重い。手元のDebianでこんな感じ。もっとスマートな解き方が知りたい。 $ time ./Subway ~ 'r' ./Subway 123.53s user 0.98s system 76% cpu 2:43.08 totalmodule Main where s = ["zero", "one", "two", "three", "four", "five", …

地下鉄の求人広告

http://d.hatena.ne.jp/bonotake/20070617/1182049744より。 (追記) リンク元によると問題読み違えてたみたい。転職に失敗しちゃったな。 *Main> exec 180 == (concatMap show [1..]) !! 180 True *Main> exec 5100000000 '3'five_one_billion = 5100000000 …

ACM国際大学対抗プログラミングコンテスト(E)

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_E {- http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_E 2007.06.15 nisikawa -} import Text.ParserCombinators.Parsec data Genom = S Strin…

オープンソースカンファレンス2007 Hokkaido

http://www.ospn.jp/osc2007-do/

ACM国際大学対抗プログラミングコンテスト(D)

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_D {- http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_D 2007.06.12 nisikawa -} import Data.Maybe (fromJust) import Data.List (find, zipW…

ACM国際大学対抗プログラミングコンテスト(B)

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_B {- http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_B 2007.06.07 nisikawa -} import Control.Arrow import Data.List (nub) revF (x, y) =…

ACM国際大学対抗プログラミングコンテスト(A)

via http://d.hatena.ne.jp/zyxwv/20070606 入出力はサボった。 http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_A {- http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_A 2007.06.06 nisikawa …

FizzBuzz一般化

http://karetta.jp/article/blog/oneline/030146より。 $ runhaskell FizzBuzz3.hs 1 100 2 Hage 3 Fizz 5 Buzzmodule Main where import System (getArgs) data FB a = FB (a, String) instance Monad FB where return x = FB (x, "") m >>= f = bind m f w…

はじめてのTemplate Haskell(2)

http://research.microsoft.com/~simonpj/papers/meta-haskell/ http://www.haskell.org/hawiki/TemplateHaskellTutorial 先週読んでたPDFを読み切った。途中ちょっと振り切られた。Tutorialの方は動くコードがたくさんあって良かった。Compile-Time IOには…

Real-World Haskell

http://www.realworldhaskell.org/blog/ http://radar.oreilly.com/archives/2007/05/real_world_hask.html 今更かもしれないけど一応紹介しときます。O'Reillyさんから出るHaskellの本について。入門書というよりはテスト,DB,FFI,Web,GUIなど"Real-World"な…

はじめてのTemplate Haskell

http://www.haskell.org/haskellwiki/Template_Haskell http://research.microsoft.com/~simonpj/papers/meta-haskell/ PDFを6ページくらい読んだところ。英文読んでると寝てしまう。なんでだろ。 > ghc --make -fth Main.hs -o main > ./main "World\!" "He…

FizzBuzzをArrowで

書いてみた。もっとカッコ良く書けると思うんだけど。ArrowChoiceとか使って。 import Control.Arrow newtype FB a b = FB {run :: a -> b} instance Arrow FB where arr f = FB f (FB f) >>> (FB g) = FB (g . f) first (FB f) = FB (first f) fizzbuzz = m…

FizzBuzzをモナドで

書いてみた。 data FB a = FB (a, String) instance Monad FB where return x = FB (x, "") m >>= f = bind m f where bind (FB (x, y)) f = let FB (m, n) = f x in FB (m, y ++ n) instance (Show a) => Show (FB a) where show (FB (x, "")) = show x sho…

FizzBuzz

ちょっとはHaskellらしく書けたかな。 map fst $ zip (concat (repeat ["","","Fizz","","Buzz","Fizz","","","Fizz","Buzz","","Fizz","","","FizzBuzz"])) [1..100](追記) コメントをいただいたので、修正。 zipWith (\x y -> if x == "" then show y else…

GHC6.6.1

ちょっと前にGHCを6.6.1にした。mac portsで。System.FilePathは便利そうだ。あとhasktagsの存在を知った。 find -name "*.hs" | xargs hasktags -cあとは適当にsortして。vimに食わせて。

Arrowデビュー

Arrowを使ってパスカルの三角形を作ってみた。これは全然Arrowっぽくないんだけど、ちょっとだけ分かった、気がする。 {- ArrowPascalTriangle.hs :set -farrows nisikawa 2007.04.02 -} import Control.Arrow import Data.List (mapAccumL) newtype PS a b …

パスカルの三角形

前に解いた気がするけど、思い出せない(兄さん頭が痛いよぉ)のでもう一度(?)書きます。mapAccumLが使えると一撃なのだ。 import Data.List (mapAccumL) pascalTriangle = iterate f [1] where f x = let (f, s) = mapAccumL (\x y -> (y, x + y)) 0 x in s ++…

続・圏論やモナドが、どうして文書処理やXMLと関係するのですか?」を読んでるところ

http://d.hatena.ne.jp/m-hiyama/20070125/1169702291 http://d.hatena.ne.jp/nskj77/20070318/1174204588のつづき プログラミング課題8を解いた。モナド出来たよ! *Main> processTemplate (Ts [T "hoge", Ph "fuga", T "piyo"]) $ con(C [("fuga", Ts [T "x…