Haskell

Round 1C (Google Code Jam 2009)

ヘボヘボだった,1Bだが,なんとか通過していた. 練習のために,1Cもやってみた. 時間制限とかプレッシャーがないぶん,気楽で,まぁまぁ良い感じだった(たぶん,問題も簡単になっている).(前回と同じテンプレートを使用しています.) A そのまま.た…

Round 1B (Google Code Jam 2009)

まぁ,前回同様,予想通り,ダメダメだったわけだが.共通のテンプレート(下)を使用した. import Data.List import Data.Maybe import Data.Ord import Data.Char import Data.Function import Data.Map (Map) import qualified Data.Map as M import Dat…

Problem 255 めも

Problem 255 - Project Euler解いた.前2問に比べると簡単だと思う(もう内容忘れかけているが).はじめにHaskellで解いたら,実行時間は3分ぐらいだった. 再帰を使おうとしたら,stack space overflow. seq入れてみたり,!入れてみたりして,stack space…

速いnubが欲しい.(Haskell)

The Haskell 98 Library Report: List Utilities によると, nub :: (Eq a) => [a] -> [a] nub [] = [] nub (x:xs) = x : nub (filter (\y -> not (x == y)) xs) なので,実はnubはO(n^2). Eq だけ,だから仕方ないのかもしれないが. しかし, nub :: (Ord …

Problem 254 めも

取り敢えず,解いた. しかし,少し遅い.約20秒 (Core 2 Duo E8500).もうすこし工夫して下限を求めるか, 探索方法を工夫するか, の二択なのか? 追記 #1 ad hoc な工夫をして,約3秒になった. しかし,もう少し綺麗な改良の方法はないのか? 追記 #2 C++…

Qualification Round 感想

総じて,ダメダメな出来だったが,反省会の意味も込め感想を書いておく. Qualification なだけあって,どの問題も簡単だったが,アルゴリズムをコードにするのに時間がかかった. あと入出力もメンドウ. A - Alien Language すべての問題についてあてはま…

Problem 253 めも

Problem 253 - Project Euler 取り敢えず,解いたが,フォーラムのシンプルかつ高速な解法が理解できない… それにしてもMemoTrieは強力だ.お手軽,メモ化.ほとんどコードを変えることなくメモ化できる. やはり,高階関数は便利. # import MemoTrie とし…

Practice

去年のやつ. Dashboard - Qualification Round 2008 - Google Code JamBの問題 簡単な問題だと思う.Qualificationなんちゃらだし. 各駅での列車の出発,到着(正確には再び出発可能な状態になる)をイベントと思い,その時系列順のリストをつくる.本質的…

メモ化 @ Haskell

MemoTrieのソースを読んで,だいたい理解した. どうやら,内部では Tree を作って,その中に関数の評価値を保持するみたい. まず,全ての入力に対応する出力を Tree の中に保存する.しかし,実際に計算はしない. 遅延評価を利用して,必要になったときだ…

Haskellの簡約の実装とMemoTrieの秘密?

関数型言語では,グラフ簡約と最外簡約を行うと効率が良くなるらしい. っていうのを http://www.amazon.co.jp/%E9%96%A2%E6%95%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-R-%E3%83%90%E3%83%BC%E3%83%89/dp/4764901811 で読んだ…

MemoTrie? (関数の自動メモ化@Haskell)

HaskellにはMemoTireというパッケージがあります. どうやら,関数のメモ化を自動でやってくれるみたい. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/MemoTrie http://hackage.haskell.org/packages/archive/MemoTrie/0.4.5/doc/html/Data…

LU分解

LU分解@Haskell 遅延評価って便利.自分で評価の順番を明示的に与えなくても, よきにはからってくれる. import Data.Array type Matrix = Array (Int, Int) Double -- assumption: u!(i,i) /= 0 lu :: Matrix -> (Matrix, Matrix) lu a = (l, u) where b =…

ラングトンのアリ

平面が格子状に構成され、各マスが白または黒で塗られる。ここで、1つのマスを「アリ」とする。アリは各ステップで上下左右のいずれかのマスに移動することができる。アリは以下の規則に従って移動する。 * 黒いマスにアリがいた場合、90°右に方向転換し、そ…

GMAP

import Data.List -- greedy algorithm next :: Integral a => a ->[a] -> [a] next c ms = bs ++ 1: genericReplicate n 0 where (as, bs) = genericSplitAt c ms n = c - sum as sequences :: Integral a => a -> a -> [[a]] sequences c n | c > n = [] |…

cabal-install を インストール

何度もcabal-installをインストールしている気がするのでメモ. 追記 id:nobsunさんのコメントから; cabal-installを展開した中に bootstrap があります.これを実行すれば必要なパッケージを インストールしてくれるようです.(試していませんが) 以下 R…

APR素数判定

多分当っている. コード長いです. Miller Rabin はやはり非常にシンプル. それに比べ,APRは… まぁ,実装がヘタなんだよと,言われればそれまでだが. しかし,綺麗なコードがあれば見てみたいが,すくなくとも簡単にはwebでは見つからなかった. 100桁と…

連立合同方程式

ちょっと,連立合同方程式を解く必要がでてきたので,実装してみた. ここで,invMod n p = n^(-1) (mod p). -- Input: 互いに素な整数 m1,m2,...,mn, 整数 a1,a2,...,an -- Output: 連立合同方程式の解 x in Zm s.t. x = ai (mod mi) congruence :: (Integ…

いまさらながら,素数判定 @ Haskell

とりあえず,試し割りとMiller-Rabin. Miller-Rabinはアルゴリズム自体は簡単. なんで,こんなコードがほぼ正しい答えを返すか若干不思議である (乱択アルゴリズムは,相当単純なのに,まぁまぁなものが多い). 決定性アルゴリズムも実装したいが… modul…

Problem 252

252 Convex Holes Problem 252 - Project Euler 計算幾何の問題. 二次元平面上に点集合が与えられる. 最大空凸包とでもいうのでしょうか? 凸包であって,内部に他の点を含まないもの のうちの最大面積を求める問題. さて,どこから手を付ければ良いのや…

Problem 250

250 250250 Problem 250 - Project Euler 前の問題(249)と似ているが…

Problem 249

249 Prime Subset Sums Problem 249 - Project Euler 部分和問題はNP困難で,難しそうですが…

Problem 248

248 Numbers for which Euler’s totient function equals 13!Problem 248 - Project Eulerphi(n) = 13 ! となる n を探す問題. 一見,探索範囲が広そうに見えるが…

Problem 247

247 Squares under a hyperbola Problem 247 - Project Euler x=1, y=0, y=1/x の中に次々と最大の正方形を詰めていく問題. 一見,複雑だが…一つ,正方形を詰めると,残りの領域の分割数が丁度一つ増えることに着目. 再帰関数を構成した. haskellのコード…

Flymake-mode for Haskell (Emacs) without perl script

前の Flymake-mode for Haskell (Emacs) - 落書き、時々落学 ではperlスクリプトが必要だった. しかし,それがなくても,大丈夫であることが分かった. 参考 EmacsWiki: Flymake Haskell 環境 Ubuntu 9.04 emacs 23.0.91.1 flymake 0.3 ghc 6.8.2 .emacsの…

Problem 246

246 Tangents to an ellipse Problem 246 - Project Euler 格子点を数える簡単なお仕事?(そう思っていた時期が(ry 直線と楕円の方程式と三角関数の加法定理を知っていて,二次方程式が解ければ出来る問題ではあるが…

Problem 245

245 Coresilience Problem 245 - Project Euler オイラーのφ関数がらみの問題. c(n) = (n - φ(n)) / (n - 1) = 1 / k となるような,合成数の和を求める. 探索範囲が 2

Problem 244

244 Sliders Problem 244 - Project Euler 15 puzzle が2色に塗り分けられたときの話. 最短手順ではなく,全ての最短手順を求めなくてはいけないのだが…

BA (Barabasi-Albert) モデル

BAモデルはスケールフリーのネットワークを生成する手順. レポートで使うので,実装してみた. Haskellで. 多分,正しいはず.(多分) しかし,非決定的だから,何とも. そして,面倒なので非効率的実装になっている.あしからず. import Data.List (so…

Problem 243

243 Resilience Problem 243 - Project Euler おそらく簡単. n未満でnを割り切る数の割り合いについて. これは,どこかでみたような…

Problem 242

242 Odd Triplets Problem 242 - Project Euler ある条件を満たす三つ組(実質的には二組)の奇数は,10^12以下では何個ありますか? という問題.探索範囲が広いので,真面目にやると大変. しかし,小さい数で試してみると…