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

Rest Full

急いで仕事を仕上げる必要があります。 二週間以上休みなく毎日終電までがんばっているある日、緊張の糸が切れたように仕事に集中できなくなりました。どうしますか? 疲れているだけです。 毎日毎日定時の意味も忘れて取り掛かる必要があります。どうしても…

3ヶ月ぶり

最近忙しくて何も更新していなかった。最近寒くなってきたから、早く夏にならないかなーっていつも思う。

Session IDの作り方

どんな風に作ったりするのか疑問だったのでちょっと調べた。 Kahuaの場合 Kahua-1.0.7.3/src/kahua/session.scm Sessionクラス()を取り扱うファイル Kahua-1.0.7.3/src/kahua/gsid.scm SessionIDを取り扱うファイル 継続サーバということで、継続のためのCon…

ひどいコードが含まれています。

はてブで取り上げられたおかげで、いろいろなところで卒論のダメな所が指摘されています。公害になってしまうまえに指摘をまとめておきたいと思います。 JavaとC++のコードダメすぎる件について Twitter / kinaba: new の例外が云々って ... Twitter / kinab…

350を超えました。

自分の作ったものが皆さんのお役に立てているようでうれしいです。ありがとうございます。

僕の書いた卒論がホットエントリに。。

はてなブックマーク - ガベージコレクションの実装法と評価 ビビった。 これをきにいいわけ 課題ではなくて卒論です。なので、僕の一年はこの程度です。世代別GCが載っていないのは手を広げずに基本を説明したかったからです。 このGCはRuby、Emacs、SigSche…

昨日の続き

Make Purse Light 多分動くと思う。めちゃくちゃ遅い。 # # Make Purse Light def get_hanging(price, base_coins, payment) sum = 500 * payment[3] + 100 * payment[2] + 50 * payment[1] + 10 * payment[0] hanging = sum - price return false if hangin…

先週のつづき

先週に続いてACM/ICPC国内予選突破の手引きの問題をRubyでといてみる。 Exploring Caves # # exploringcaves.rb class KarakuriDoll def initialize @x = @y = @farthest_x = @farthest_y = 0 end attr_reader :farthest_x attr_reader :farthest_y def move…

遅い

問題自体は難しくないのに、一時間に一問しか解けない件について。しかもC言語などの言語でもないのに。。まあ、でも感を取り戻すきっかけにはなったかな。

あんまり書いてないな

最近仕事ではPHPばかりなのでRubyを使っていないのでACM/ICPC国内予選突破の手引きの問題をRubyでといてみる。 Hanafuda Shuffle Array#[start, length]で一発で解ける件について # 1978 # hanafuda shuffle def shuffle(n,r) deck = (1..n).to_a.reverse r.…

OpenSSHのRSAの鍵

UBUNTU-VM [1]% cd openssh-5.0p1 UBUNTU-VM [1]% cat -n key.c | grep RSA_generate_key 573 private = RSA_generate_key(bits, 35, NULL, NULL); UBUNTU-VM [1]% RSAのN,e,d,p,qのうちeが35で固定。opensshのrsa1の公開鍵(~/.ssh/identity.pub)のフォーマ…

制御構造まとめ

>と','や;の挙動が全然分かっていなかったので調べてみた。 true, fail, ! 述語 用例 動作 true/0 true 必ず成功する fail/0 fail 必ず失敗する(強制的にバックトレースを行う) !/0(カット) ! 必ず成功する。副作用としてカット以前にバックトレースできなく…

project euler problem 10 answer

区間ふるいを使ったらとけた。ひどいソース。 primes(Primes, Prime, NextPrimes) :- [Prime, _] = Primes, primes_next(Primes, NextPrimes). primes_next([Prime, [Head, Appender]], NextPrimes) :- P1 is Prime + 1, (primes_is_prime(P1, Head, Appende…

つか、ふるいをすれてば良いんだ

確率的素数判定を行えばいいか。必要な領域は大きな整数が数個と素数判定の領域だけになる。今みたいに、200万以下の素数を全て持つ必要はなくなる。

project euler problem 10 answer ?

32bitのCPUでSWI-Prologを動かした場合local stackの上限が128MByteに設定されてしまっているため、以下のプログラムではオーバーフローを起こして動作しない。が、その制限を除けば正しいプログラムだと思う。何とかしたい! primes_new(Primes) :- Primes …

project euler problem 9 answer

良心に苛まれながらも貼る。 SICPにも似たような問題があった。SWI-Prologでグローバルスタックを拡張して実行した。 % ペアを作る(おまけ) integer_pairs_new(PairSeed) :- PairSeed = [[[1, 1] | Tail], Tail]. integer_pairs(PairSeed, Pair, NextPairSee…

明日からちょっくら帰省してくる

東京から埼玉へ帰省する!でもやることnathingになるよ。寄生中もとい帰省中何するか考えるか。

差分リストやループ

Prologで差分リストや末尾再帰の述語を書く場合、たいてい以下のようなイデオムを利用する。 差分リスト % たどる diff_list(List, ResultList) :- diff_list_sub(List, [ResultList, []]). diff_list_sub([Head | Rest], [Result, Tail]) :- <Headを何かしてXにする> [Result, Appe</headを何かしてxにする>…

project euler problem 8 answer

最近、ブログに回答を書くのがマナー違反なんじゃないかと思えて来た。 take(N, [Lcar | Lcdr], [Lcar | R]) :- N > 0, N1 is N - 1, take(N1, Lcdr, R). take(0, _, []). % 数字のアトムを数値に変換 numeric_to_number(List, NumberList) :- numeric_to_nu…

project euler problem 6-7 answer

解いた。5は手で解いてしまったので飛ばす。 sum_sub(N, M, Acc, Sum) :- N1 is N + 1, Acc1 is N + Acc, sum_sub(N1, M, Acc1, Sum). square_sum(N, M, Sum) :- square_sum_sub(N, M, 0, Sum). square_sum_sub(M, M, Acc, Sum) :- Sum is Acc + M * M. squa…

project euler problem 4 answer

二時間くらいかかっているorz 戦略は大きいほうから順に回文数を探し、因子を探していくというもの。ごく普通のもの。 split_at(N, [Lcar | Lcdr], [Lcar | F], R) :- N > 0, N1 is N - 1, split_at(N1, Lcdr, F, R), !. split_at(_, [], [], []). split_at(…

isと=

違いを理解していなくてはまった。Aとaを関連付けしたかった。でもこれはできない | ?- A is a, B is A. A is a, B is A. uncaught exception: error(type_error(evaluable,a/0),(is)/2) | ?- こういう、atomを関連付ける場合は=を利用する。 | ?- A = a, B …

project euler problem 1-3 answer

練習がてら解いてみた。 回答 デフォルトのGnu PrologだとProblem3は速攻でヒープが足らなくなって落ちる。面倒なのでSWI-Prologを利用した。 problem1(N, Result) :- N1 is N - 1, problem1_sub(N1, Result, 0), !. problem1_sub(0, Acc, Acc). problem1_su…

差分リストの練習 その4

split_at_right。Prologで作る数学の世界―Prologそして集合‐位相‐群の第五章の問題の回答でもある。バックトラックを利用したもので、Nが小さい場合は効率がよい。現時点で一番prologらしいプログラム。 split_at_right(N, List, Left, Right) :- right_sub(…

タイトル変えてみた

テーマも変えたい。Prologっぽいはてなのテーマってあるんかな?

二次無理数の連分数展開

が理解できません><

思ったこと

UnitTestをしてコードを理解すること リファクタリングをしたり、自分でコードを書き直して理解するって言うのが多い。この場合、「途中で動かなくなっても構造が理解できればいい」と思って行う。僕もこれをやっている。 今回すでにあるコードのUnitTestを…

剰余

Prologで作る数学の世界―Prologそして集合‐位相‐群の第4章の問題。余りを求めろ。 abs(A, B) :- A > 0 -> B is A ; B is -A. % 条件は % A = B * Q + R, 0 <= R < abs(B) % 割る数の絶対値よりも余りが小さい res_q(A = B*Q + R) :- abs(B, B1), Q1 is A //…

PI

Prologで作る数学の世界―Prologそして集合‐位相‐群の第3章の問題。arctanを定義してπの近似値を求めろ。最初に書いた効率の悪いやつもつけて % 普通の再帰 atn(X, N, Sum) :- N > 0, (N mod 2 =:= 1 -> Sum1 is X ** (N * 2 - 1) / (N * 2 - 1) ; Sum1 is -…

fizzbuzz

僕のprolog力を精一杯使って解いた! fizzbuzz(N) :- fizzbuzz_sub(1, N). fizzbuzz_sub(Current, Max) :- Current > Max, !. fizzbuzz_sub(Current, Max) :- (Current mod 15 =:= 0 -> write('fizzbuzz'); Current mod 3 =:= 0 -> write('fizz'); Current m…