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

ICPC

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html の Problem D。 非常にめんどくさかった。しかも長いし汚い。 import System import Data.Array import Data.Maybe import Control.Monad.State import Text.ParserCombinators.Parsec…

幅優先探索

なんとなくできてしまったので。 bfs :: (a -> [b]) -> [a] -> [b] bfs f queue = foldr (?a b -> f a ++ b) [] queue

与えられた関数のリストを与えられた1つの値に対して適用する関数ってのはないのだろうか。こんなの。 f :: [a -> b] -> a -> [b] f (fun:funlist) x = fun x : f funlist x f [] _ = [] Main> f [?x->x+1, ?x->x+2] 0 [1,2] Main> みたいな関数はないのだろ…

LL魂

Oさんが LL 魂に出場するそうな。OCaml でプレゼンソフトを作って、それを使って OCaml の素晴らしさについて力説するらしい。(予想) ただ、日程が院試の直前なのがなぁ。そういうイベントにはいつかは参加してみたいと思っているのだけれど。

しりとり

来週の SICP 読書会 (LL魂もどき篇) のための問題と模範解答を用意した。 与えられた単語を全て使ってしりとりができるかどうかを調べるプログラムを書け、というもの。模範解答は個人的な理由で無理に StateT を使ったので(ただ StateT が使ってみたかった…

久々のParsec

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html の Problem E 最近ちっこい問題を適当に解いてるけど、これは気分転換にいいかもしれん。 import Control.Monad paren :: Parser String paren = do n <- many1 digit str <- between …

http://acm.uva.es/problemset/ の問題を解こう

今度はこれ。http://acm.uva.es/p/v1/100.html 暇なわけではないです。 import Control.Monad import System f :: Integer -> Int f n = length (takeWhile (/=1) $ iterate g n) + 1 where g x | even x = x `div` 2 | otherwise = 3*x + 1 main :: IO () m…

"ACM国際大学対抗プログラミングコンテスト" の問題を解こう

http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html の Problem B を (ものすごく適当に) 解いてみる。これ、もしかしたら Arrow を使うとすごくきれいに書けるんじゃないだろうか。けどお腹痛いから細かいことを考えられない。うむ、と…

ラグランジュの四平方定理 再び

id:Gemma さんのアドバイスにより、お利口にしてみた。実行時間がだいぶ縮まる。 import System import Control.Monad lagrange :: Integer -> [(Integer, Integer, Integer, Integer)] lagrange x = do let seed = [ s^2 | s <- [0..(floor $ sqrt $ fromIn…