2008-04-01から1ヶ月間の記事一覧

8.04にアップグレード

失敗しまくっていたけど、サーバを変えたらすぐにアップデートできました。 ただいろいろと気になるところはあるかな〜。gnashっていうアプリケーションが メモリ 1GB取って暴走したのはビビった。

Problem 26

1000以内の数に対して 1 / nを求めたときに最も長い幅の循環少数になる nを求めろという問題。素数以外の数は素因数分解したときの一番でかいサイズの 素数に依存するのではないかと思うので、対象は素数のみとする。 方針は wikipediaあたりを参考に決定。 …

Problem 25

フィボナッチ数列で 1000桁を越える一番初めの数字は何かという 問題。楽勝じゃんって思ってやったら 30桁ぐらいで答えがでなく なって調べてみたら、整数値に収まってなかった。なのでbigintを使う。 #!/usr/bin/perl use strict; use warnings; use bigint…

Problem 24

0から9の数字で順列を作って 1000000番めに大きい数を求めろという問題。 先頭が 0でも問題ないっていうのでだいぶ楽になったのかな〜と思います。 単純な方法だと単に 0123456789 から 9876543210まで数えていく方法だろうけど、 面倒なので楽な方法を考え…

Problem 22

ファイルから名前を読んでそれぞれスコアを付けて、その合計を求めろという 問題。名前が二重引用符でくくられてるのが微妙にやらしいけど、それ以外は簡単。 #!/usr/bin/perl use strict; use warnings; print "Answer is ", p22(), "\n"; # Answer is 8711…

Problem 23

過剰数の和で表せない数の合計を求めろという問題。上限がわかっているので、 配列を使ってといてみた。若干 Lisp風に考えてみたかなって思ったけど、全然 そんなことはないかな。約数の和を求めるのは過去の資源を再利用。 #!/usr/bin/perl use strict; use…

Problem 21

10000までの友愛数の総和を求めろという問題。ものすごく単純な方法は即効でかけたけど 遅かったので、Wikipediaの約数の項目を参考に修正しました。そしたらいくらか早くなりました。 キャッシュの機能をつけたらもう少し早くなりそうな気がしますが、それ…

Problem 20

1000の階乗で各桁を和を求めろという問題。10になる組み合わせを省いて いったら大した数にならないのかな〜って考えたんだけど、全然そんなこと ありませんでした。なので定番の配列を使って多倍長整数演算を行う手法で 解決しました。これだとせいぜい数百…

Problem 19

日本語を見たときは意味がわからなかったけど、月の初め、つまり1901年から 2000年の終わりまでの間に 1日が日曜日の月が何回あるかって問題。 モジュール番と数え上げる版を書いてみた。まあ大学一年生でやりそうな問題かな。 #!/usr/bin/perl use strict; …

Problem 18

何番やっているのかわからなくなってきたけど、18番。 時間がかかるであろうっていうのとそうでないを書いてみた。 時間がかかるってやつは 67番だと再帰使い過ぎでエラーになりますね。 #!/usr/bin/perl use strict; use warnings; my $depth = 15; my $m…

emacsの色反転

$ emacs --reverse で起動すると色が反転して起動するんですね。 会社で背景白だと目が疲れるので、背景を変えようと思って調べたら出てきた。 目にいくらかやさしくなった感じがします。

アルゴリズム

アルゴリズムってちゃんとしっておかないといけないな〜と思った。 あるプログラムのプロトタイプを Perlで書いて、早く動くようにして初めに 作ったやつより、数十倍早いものを書いたけどそれでも遅い気がする。 これ以上は閃かないから Cで書き直すぐらい…

追記

真面目に解いてみました。 Problem20を先にして使えるなってことで そのまま流用しただけなんですがね。 #!/usr/bin/perl use strict; use warnings; print "Answer is ", p16(1000), "\n"; # Answer is 1366 sub p16 { my ($times) = @_; my @array1 = (2);…

キーボードの掃除

ふとキーボードの汚れが気になって裏向けにしてバンバンと叩いてみたら すごいカスみたいなのが出てきた。正直見なきゃよかったってぐらいだけどね。 これからはたまに掃除することにしよう。

Problem 16

さすがに手を抜きすぎですね。真面目に考えます。 #!/usr/bin/perl use strict; use warnings; use bigint; my $num = 2 ** 1000; my @a = split //, $num; my $sum = 0; map {$sum += $_;} @a; print "$sum\n";

Firemacs

会社のPCに Firemacsを入れたらデフォルトかなり使えた。以前は C-wで結構 タブが閉じてえらいめにあったんですけど、最新のバージョンだとだいぶ安心して 使えそうですね。

Problem 15

15問目。20*20の区画で最短距離の個数を求めろという問題。 公式に当てはめたら一瞬で解けた。こんなんでいいのかと逆に心配になった。 #!/usr/bin/perl use strict; use warnings; print "Answer is ", p15(20, 20), "\n"; sub p15 { my ($length, $width) …

Problem 14

14問目。コラッツ数列(?)で100万以内の数字で最も数列が長くなるものを求める。 普通に解くと1分強かかってしまったので、すべての数列の長さを記録しておき、 数字が記録していた数になったら、記録した数にそれまでの回数を加算するという ことにしました…

Problem 13

13問目。ちなみに11問目は面倒そうなので後回し。 今回の問題は 50桁の数値の加算を100回してその上位 10桁を求めろっていう問題。 Perlモジュールの bigintっていうのを使えば普通のたし算で解けてしまうのであまり 勉強にはなりそうにないので、一応配列使…

Problem 12

12問目。三角数を求めて行ってその約数の個数が 501個を越える初めの数は何かという 問題。普通に約数を数えていくと時間がかかりすぎるので、wikipediaに書いていた約数の 個数を求める公式を利用。 nが x^a * y^bと素因数分解されるとき nの約数の個数は (…