読者です 読者をやめる 読者になる 読者になる

語句の真相とあやまち

なにもないことにまつわるあれこれとか関係のないこととか

問題42-44

問題42

単純な問題だった。

 

  0.029455 seconds (18.09 k allocations: 706.945 KB)

 

問題43

問題が曖昧でどうしたものか。this property ってなに??

やめる

 

問題44

これは意味が明確なようだ。

とりかかることにする。

 

問題40-41

これからは1エントリーに1日分のことだけを書くことにする。

 

問題40 

あれこれ考えたけれど、面倒くさいので数列を文字列で作ってi番目をもとめてみた。

1003.247984 seconds (4.50 M allocations: 1.273 TB, 17.44% gc time)

その文字列を作るのに20分かかっている。

なさけなや。

 

どうしたものかなあ。三角形の三角形になってると思うのだけど、その三角形が逆転しているので計算しにくいだけ。

 

問題41

pandigitalは前にもでてきたけれど、nは9だろうか。

問題文がちょっと意図不明なところがある。

そのまま書いたら終わらない。やめる。

 

 

問題38-40

pcommon.jlはModuleにしたほうがよいかもしれないと思い始める。

 

問題38

 正しく書いたら答えが得られる。

  0.268039 seconds (3.92 M allocations: 186.233 MB, 10.56% gc time)

 

この実行時間は、二度目の値。できるばあいは、小さい値で1回目をやって二度目をとっている。1秒以下なら、同じ計算を二度でもよい。

 

この問題について、

効率の良い計算をさがそうと性質をいくつか考えたが、いい考えにたどり着かなかったので、力任せにといた。

その手順は、問題がうながす手順。

 

問題39

問題の意味は? 

if p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, ...

"pが各辺の長さが整数{a,b,c}であるような、直角三角形(right angle triangle)の周の長さ(perimeter)であるとする。みたいなかんじか。

 総当たりでは時間がかかるかと思ったが

0.126755 seconds (92 allocations: 3.828 KB)

 

最後の難関は、問題の答えを読み間違えていた。

 

 問題40

最初、問題の意味がわからなかった。プログラムを作れというように読めたので。

数列をみなおすと、わかった。必要なのは読解力。

 

 

問題32-37

問題32 二段階の組み合わせの問題だと思った

JuliaでVectorを拡張していくことができなくてずいぶん悩んだ。

deepcopy()を使ったので、遅くなっているのだと思う。

7.818219 seconds (154.22 M allocations: 10.936 GB, 24.28% gc time)

 

月曜と今日の一日弱の時間で解決したとはいえ、push!, append!では元のデータが変わってしまい、そのため10!個の組み合わせを作ることがなかなかできなかった。

 

問題33

問題がわかりません。

If the product of these four fractions is given in its lowest common terms, find the value of the denominator.

調べる。

一日たって、

 四つの分数はみつけたが、最後のこの文の意味が不明で答があわない。

分母の最小公倍数ではだめなのか???

 

これ以前の部分もなんかよく分からないことがかかれていて、trivialの意味も明確ではないし、4つしかないという条件で絞り込んだけど、実際にはたくさんあった。

どういう条件を仮定しているのかわからない。

この問題はやめた。

 (追記4/1: Juliaの分数を使って積を計算したところ、答えになっていた。分数の計算が下手だったのだろう)

 

  0.000426 seconds (55 allocations: 2.453 KB)

 

問題34

数字とベクトルの間の変換関数を共通ファイルにまとめた。

これからも使いそうなので。Moduleにするかどうか・・・

Juliaの関数として既存ではないのだろうか。探したがみつからずる

 

factorialはJuliaにある。

この問題は力づくで解いた

0.042996 seconds (502.06 k allocations: 36.408 MB, 23.43% gc time)

 

問題35

一見、力づくで解けばすぐにできそう。

できた。

isprimeはusingPrimesにある。

 0.698078 seconds (10.36 M allocations: 756.132 MB, 10.82% gc time)

 

 問題36

これも力づく。

前に、parindromicの問題があったなあ。同じ方法で判定しているかどうかは忘れた。

 

  0.181568 seconds (4.01 M allocations: 214.097 MB, 26.15% gc time)

 

問題37

素数はPrimesを使用

力づくで解いた。30分程度。

別の考え方もあるのかもしれないけれど、わからない。

 

 0.314442 seconds (3.02 M allocations: 211.984 MB, 8.45% gc time)

 

計算のこと

クラスにもとづくオブジェクト指向は、計算というか関数を整理するための仕組みだと思う。前にも書いたかもしれない。

 

同じアルゴリズムオブジェクト指向で書いたり、Cで書いたりして、それを同じアルゴリズムだと区別できるのだから、そういうことだろう。

 

COMMON LISPのgeneric functionやその他、型ベースでメソッドをディスパッチするタイプのオブジェクト指向(というよりただの型か)の方式もそう見られる。

 

計算の方式自体が違うとしても、時系列上で実行される処理が同じなのだから、それは計算の表現の違いと考えるべきで、結局、こまぎれにしたメソッドをどう管理するかという問題だと見られる。

 

Apple Dylanの開発環境では、メソッドをデータベースで管理していたけれど、まさにそういうことではないのだろうか。

 

 

問題29-31

問題29

この問題の問題は、100^100が標準では表現できないということだな。

BigIntで解く

  0.047865 seconds (105.86 k allocations: 3.073 MB, 75.59% gc time)

 

他の解法も考えてみたのだけれど、面倒。

 

問題30

 どこまで計算すればいいのかを決めるのが謎

  0.260236 seconds (2.00 M allocations: 243.836 MB, 12.19% gc time)

 

問題31

 そんなに難しい問題ではないのに、解決するのに時間がかかった。

 

0.001980 seconds (137 allocations: 7.969 KB)

 

一般的な解法の手順(私の場合)

1) 問題を手で解いてみる

2) その計算過程を抽象化し手順の表現を作る

3) プログラムが想定した計算過程と同じ計算をしているかを確認する

 

補足

1) 問題を手で解いてみる

 とはいっても、その前に問題を理解し、どのように計算するかをみつけなくてはならない。

 同じ計算をしていても、頭の中でどう理解しているのかが、違う場合がある。

 ある程度の量の計算をして、特別な場合を尽くすこともひつよう。

 この段階で、問題の理解が十分でなければ、より煩雑な計算になってしまう。

2) その計算過程を抽象化し手順の表現を作る

 関数をひとつ作るということは、その計算をどのように表現するかということなので、重要だし面白い。

 

3) プログラムが想定した計算過程と同じ計算をしているかを確認する

  デバッグのことを言い換えて見ただけ

 

問題31は、最初、ポンドの話だったので、英国固有の話ならとばそうかと思ったけれど、ちゃんと読むと一般的な話だったので、とりかかることにした。一週間くらいまえ。

 

最初は200ポンドのケースを考えていて、あやまった仮説をいろいろたててしまい、うまくいかなかった。1ポンドから順番に考え直すと、計算がみえてきた。水曜くらい。

土曜の朝に、いろいろ考えていたけれど、とても単純にできると確信したのだけれど、数時間後、それが勘違いだということがわかり、元の計算方法にもどる。

しかし、単純にできる計算を考えたとき、ややこしい計算が整理されたようで、元の計算を見直し、整理し直したのが日曜。

なぜかうまくいかなかったけれど、今日、作成した10個のテストをクリアして正解を得た。

 

10個のテストのうち3個はテスト自体が間違っていたり・・・

「なぜかうまくいかなかった」理由がよくわからない。

 

総じて、プログラミング能力が低下している。

 

 

問題26-28

問題26は難航中。

 かれこれ一週間。

難易度5%なので、これは何か勘違いをしているのだろう。

[一週間ののち]

 循環小数の勉強をして、時間ができたのでコードを書き、ようやく正解にたどりつく。

0.088795 seconds (19.28 k allocations: 12.422 MB

 

2週間かかりました。

 

それにしても、コード書く能力が低下しているなあ。

 

問題27

問題の意味がわからん。

 そのまま解いた。

 

0.982154 seconds (12.72 M allocations: 255.358 MB, 6.27% gc time)

 

25問正解

 

問題28

数列の問題。ちょっと煩雑なだけ。

0.000009 seconds (7 allocations: 400 bytes)

 

自分が何をしているのかを観察

何を関数にするかというところを気にしている。

プログラムの言葉ではインターフェースともいえるが、

それは問題をどう解釈しているか、どう理解しているかということだ。

 

今日までforumは見ていなかったけど、そこを見ればいいのだな。