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

Project Euler 615

https://projecteuler.net/problem=615150着。実は、この問題は採用された最初の自作。 (内部的に言うと実は違うのだが)14年2月に提案した問題らしい。それが最後に少し改変されて公開されるに至った。 解いてみればわかるが、手法ありきのわざとらしい問…

Project Euler Dev Teamのメンバーに

きっかけは、Problem 12だっただろうか。私は、PriorityQueueを使えば大きな数でもこの問題が解けることに気が付いた。これがフォーラムでどこまで大きな数で1分以内に問題を解けるかの競争が行われる端緒になったのではないだろうか。どうもこれを中の人が…

Project Euler 29

http://projecteuler.net/index.php?section=problems&id=29この問題は、解くだけなら非常に易しいです。Pythonなら1行で書けるレベルです。 しかし、工夫をすれば大きな数でも解けることに昔気づきました。フォーラムに今までそういう書き込みは無かったの…

BashでProject Euler(9) 再帰

前回の例にあるように関数はふつうに再帰できます。 gcd() { local n=$1 local m=$2 if [ $n -eq 0 ]; then echo $m elif [ $m -eq 0 ]; then echo $n else local d=`gcd $m $((n%m))` echo $d fi } d=`gcd 110 150` echo $d # 10 Pythonのジェネレータっぽ…

BashでProject Euler(8) 二次元配列

Bashには二次元配列はもちろんありません。それらしいことを実現するにはかつてのPerl4のように例えばカンマで区切るようなことをしなければなりません。 #!/bin/bash N=$1 table=() for y in `seq 1 $N`; do b=() for x in `seq 1 $N`; do b+=($((x*y))) do…

BashでProject Euler(7) 配列

Bashに配列はあります。ただ、とても遅いです。 white spaceで区切って()で括ると配列になります。 #!/bin/bash a=(1 2) a+=(3) echo ${a[@]} # 1 2 3 a+=(3)は、見た通り要素を追加しています。 これは本当に追加なのでしょうか。多くの要素を追加して、経…

BashでProject Euler(6) ラムダ

前回はパイプを使ったのですが、結局ラムダが使えないので中途半端なんですよね。takewhileやfilterを汎用の関数にできないのです。 しかし、evalを使うとラムダっぽいことができます。 a=1 b=c eval $b=\$a echo $c # 1 evalは、c=$aという文字列をコマンド…

BashでProject Euler(5) パイプ

前回は、フィボナッチ数列を垂れ流すだけのfibsを使いたいが、fibsが終わらないと次に進まないのでできないという話でした。 しかし、Linuxにはパイプというものがあったはずです。これならfibsがある程度進めば、その下流の関数が動き出すはずです。そこで…

BashでProject Euler(4) 関数

関数fは次のように定義します。 [function] f() { ... } 関数の値の返し方には2種類あります。 is_even() { n=$1 return $((n%2)) } 引数は、$1、$2に格納されます。そして、returnで返します。 返せる値は0〜255の整数に限られているので、上のように、叙述…

BashでProject Euler(3) if

if文を使えるようになると、Problem 1が解けます。if文は、 if ...; then ... elif ...; then ... else ... fi という形式になっています。ifの行は、例えば次のようです。 #!/bin/bash if [ 1 -lt 2 ]; then echo 1 fi -ltはless thanを意味していて、1は2…

BashでProject Euler(2) for

Problem 1を前回のように包除原理で解くのはプログラミングの問題としてはやや邪道です。ループを回す方法を考えてみましょう。 while/untilを使うことも使うことも可能ですが、やはりforを使うほうがフローが分かりやすいでしょう。forには2種類あります。…

BashでProject Euler(1) first step

Bash on Ubuntu on Windowsをインストールしたので、Project EulerをBashで解いてみました。 元々、WindowsのPythonで64ビット整数を扱おうとすると多倍長整数になってしまい32ビットの範囲で計算しているときよりかなり遅いという問題がありました。Linux版…

Project Euler 592

http://projecteuler.net/index.php?section=problems&id=59232着。 目が覚めて問題を見て、少し手を動かしたら割と早く解法を思いついたが、けっこうめんどくさかった。フォーラムになさそうな解法だったので、フォーラムに書いた。今のところ、40秒くらい…

Project Euler 573

http://projecteuler.net/index.php?section=problems&id=573110着。 Problem 584が解けたので、久々に考えていた。今だと30が限界だが、ほとんど無い確率の計算をカットすればできると思っていた。しかし、一方で、非常に早く解いている人がいて、その人た…

Project Euler 584

http://projecteuler.net/index.php?section=problems&id=58459着。 先週やっと解けた。 割と早く方針は立ったが、なかなかつまらないバグが取れずにここまで来てしまった。なおかつ、1時間もかかっている。 恐らくフォーラムには無い解法だと思っていたが、…

バイオインフォマティクス技術者認定試験受験(2)

ここの続き首席合格していた。正直、自己採点した時、少なくとも2問は足りないと思っていた。 過去の各分野平均点データがあるのでまとめてみた。この4分野は、いずれも250点ずつだった。ただし、去年まではバイオインフォマティクス(前半)が24問、同(後…

Project Euler 589

http://projecteuler.net/index.php?section=problems&id=5897着。 英語の意味がわからなかった。30分以上にらめっこしていたが、結局意味が取れなかった。 しかし、ある可能性がひらめいて、それを擬似乱数を使って組んでみたら、だいたい合った。ひらめき…

Project Euler 587

http://projecteuler.net/index.php?section=problems&id=5879着。 23分で解けた。すぐに解法を思いついた、というか、思いつくというほどの解法でもなかった。しかし、とにかく間違えまくった。これで、Eulerianは188ptsの14位。もう二度とこんな位置までは…

Project Euler 585

http://projecteuler.net/index.php?section=problems&id=58525着。 いまさらだが、フォーラムに書いたので。 これもなぜか正答者が伸びない。 コーディングに時間がかかったが、方向性はすぐに思いついた。

Project Euler 586

http://projecteuler.net/index.php?section=problems&id=5867着。 割とすぐに解法を思いついた。しかし、なかなか正しく書けない。ありがちなコードも間違えまくっていた。そして、この問題は間違っていた。自分は気づかなかったが。それはすでに修正されて…