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

語句の真相とあやまち

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

問題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個はテスト自体が間違っていたり・・・

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

 

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