2008-01-01から1年間の記事一覧

Stateモナドを考える(その5)

ついでなのでStateモナドの定義を最後まで. MonadFixクラス StateモナドはMonadFixクラスのインスタンスでもあります.Stateモナドから離れて,MonadFixクラスを考えてみます.何なんでしょう,これ.Fixというからには何かを固定するはずです. class (Mon…

Stateモナドを考える(その4)

モナド則の確認 一個一個モナド則を確認してみます.Haskellの表記としては間違っているかもしれませんが,意味が通じるように書きます. -- return a >>= k == k a runState (return a) s = (a,s) runState (m >>= k) s = let (a, s') = runState m s in ru…

Stateモナドを考える(その3)

Stateモナドがモナドであることの定義は以下の通りです. -- Monadクラスとクラスメソッド class Monad m where (>>=) :: forall a b. m a -> (a -> m b) -> m b return :: a -> m a -- State sをMonadクラスのインスタンスにする instance Monad (State s) …

Stateモナドを考える(その2)

分からないときは定義をみるのはお約束.ということでControl.Monad.Stateをみます. module Control.Monad.State ( module Control.Monad.State.Lazy ) where import Control.Monad.State.Lazy はうっ・・別の呼んでますね.本体はControl.Monad.State.Lazy…

Stateモナドを考える(その1)

sampou.orgのhttp://www.sampou.org/cgi-bin/haskell.cgi?Memoiseをほとんど丸写しして,Stateモナドを使ってフィボナッチを書いてみました. import Control.Monad.State rfib :: Integer -> Integer rfib 0 = 0 rfib 1 = 1 rfib n = rfib (n-1) + rfib (n-…

Stateモナドがすっきり分からない

Project Euler Problem 14に関連して,どうにもStateモナドがしっくりこない.キャッシュを持ちまわすため方法がすっきりしない.たぶんモナドの理解が甘いのであろう.とりあえずお約束のフィボナッチ数列からスタートでしょう.

Problem 14 (その3:答えはでた)

なぜスタックがあふれるのか.答えは自明で何でも溜め込むからなんですよね.1000000までの各整数に対してコラッツ列の長さを求めて,最大のものを求めると1000000個の要素のリストを扱わないといけないのは当たり前で,当然あふれても仕方がないです.キャ…

Problem 14 (その2:未解決)

わからない・・・どうやっても1000000で処理すると *** Exception: stack overflow がでるか,異常な時間がかかってやってられない・・・むむーー.前のコード {- Project Euler Problem 14 e14.hs -} collatz::Integer -> [Integer] collatz n | n == 1 = […

Problem 14

The following iterative sequence is defined for the set of positive integers:n n/2 (n is even) n 3n + 1 (n is odd)Using the rule above and starting with 13, we generate the following sequence: 13 40 20 10 5 16 8 4 2 1It can be seen that th…

Problem 13

Work out the first ten digits of the sum of the following one-hundred 50-digit numbers. 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 7432498619952474105947423330951305812372661730962…

Problem 12

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...Let us list the factors o…

Problem 11

In the grid below, four numbers along a diagonal line have been marked in red.08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88…

VMware WS 5.5.6にUbuntu 8.0.4を入れてみた

レポジトリが応答しない なぜかレポジトリが落ちててemacsが入りませんでしたが,これはレポジトリを変えればOKでした.http://www.ubuntulinux.jp/switch-archive-mirror を参照. 「マウスのホイール(wheel)が動かない」「マウスがシームレスに動かない」…

dviファイルの構成2

TeX

ポスタンブル ヘッダ ポスタンブルの先頭です. post p[4] num[4] den[4] mag[4] l[4] u[4] s[2] t[2]post(248)から始まる,4+4+4+4+4+4+2+2=29バイトです. p (4バイト):最後のページのbopの位置(開始位置) num:プリアンブルと同じ den:プリアンブルと…

dviファイルの構成

TeX

TeXが生成するdviファイルは当然バイナリですが,実際は普通にテキストにしたって問題ないようなもの,つまり機械語とかになってるわけでもなく,要は中間コード,仮想コードのようなものです.実際,dvioutの大島先生が,dviファイルの可視化やページ独立性…

dviファイルのノンブルの抽出

TeX

ちょっと必要があって,dviファイルのページをdviファイルから引き出すスクリプトを書きました.紛失防止の意味も込めて超いいかげんなものを晒します. ノンブルは一貫している(つまり,途中でリセットとかされない)のが大前提です. use strict; use war…

イテレータ修正

やっぱりお馬鹿してたわけで,pushを使えば十分な速さでした. use strict; use warnings; use Time::HiRes qw/gettimeofday tv_interval/; my $x=primefactory2(); my $sum; my $start = [gettimeofday]; while (1){ my $p=$x->(); last if $p>2000000; $su…

Problem 10

素数関係なので着手. The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.Find the sum of all the primes below two million. 訳 10未満の素数の和は2 + 3 + 5 + 7 = 17.2,000,000未満のすべての素数の和を求めよ. [Haskell] 前に考えたものをそのま…

Problem 9

A Pythagorean triplet is a set of three natural numbers, [tex:$a 訳 ピタゴラス数とは自然数の三つ組で[tex:$a [Haskell] {- Project Euler Problem 9 e9.hs -} line:: Int -> [(Int,Int)] line k = [(i,k-i) | i<-[0..k], i*k == 500, i>k-i ] lattice:…

素数を列挙する4

「mod 6で1か5」を探索する方法でいってみます. use Benchmark; $x=primefactory2(); $count=5000; timethese($count, {'p1' => '$x->();', } ); sub next_cand{ $_[0] + 2 * ($_[0] % 6 ==5) + 4*($_[0] % 6 ==1); } sub primefactory2{ my @primes=(2,3,5…

素数を列挙する3

キーボードが小さくなって誤入力倍増キャンペーン開催中. ##単純なエラトステネスの篩 use Benchmark; $x=primefactory1(); $count=5000; $i=0; timethese($count, {'p1' => '$x->();', } ); sub primefactory1{ my @primes=(2,3); my $state=-1; return su…

素数を列挙する2

素数を列挙するは最適化の罠にはまったようです.ただいま原因の探求中(正しくは「自分の納得させる」作業中). すくなくとも「探索範囲を縮小するための処理のコスト」が「縮小による効果」を大幅に上回ったのは間違いないでしょう(grepは遅いということ…

キーボードが・・・

壊れてしまった.特定の,そしてよく使うキーを押しても入力されない.小型のキーボードに買い換えたら・・・小さすぎて入力に慣れるまでしんどい。。。

素数を列挙する

Haskellだと遅延評価で素数列に限らず「無限列なんでも来い」ですが,Perlだとどうなるでしょう.ここはMJD師匠(勝手に師匠よばわり)のHigher-Order Perlに助けを求めます.Perlでの「遅延評価」はコードリファレンス(サブルーチンへのリファレンス)とク…

Problem 8

Find the greatest product of five consecutive digits in the 1000-digit number.73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698…

GHCを更新した

GHCを6.8.2に更新してみました.どうやらデバッガがついたみたい.それと起動時のロゴがでないのがちょっとさびしい・・・.Project Euler Problem 8,なんか毛色が変わってすっきり思いつかない.Haskellの文字列の扱いがよくわかってないということだろう…

Problem 7

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.What is the 10001st prime number? 訳 最初の六つの素数,2,3,5,7,11,13を列挙することで,6番目の素数が13であることがわかる.10001番目の素…

Problem 6

The sum of the squares of the first ten natural numbers is, 1^2 + 2^2 + ... + 10^2 = 385The square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10)^2 = 55^2 = 3025Hence the difference between the sum of the squares of the…

Problem 5

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.What is the smallest number that is evenly divisible by all of the numbers from 1 to 20? 訳 2520は,1から10までのそれぞれの数で割り切…

素因数分解

コメント欄でご指摘いただいたことを考えてみます.素因数分解をする際に素数の列として,エラトステネスの篩ではなく, primes = 2:3:([6,12..] >>= (\x->[x-1,x+1] ) を使うというテクニック.6の倍数の「前後」を「素数のタネ」として使うということです…