Project Eulerはじめました 11-20

こんかき!!!

11. データの整形がいっちゃんだるかった...やめていただきたい。Sugarの制約の生成をした経験が少しだけ活きたかもしれない。

12. ちょいめんどう。素数をあらかじめ調べておいた(過去の流用)。愚直に約数の個数を求めてもいいし、隣り合う数が互いに素なことを用いて、n, n-1 (ただし偶数はあらかじめ半分にしておく) の約数の個数をかけてもよい。

13. めんどうなだけはやめろ!桁ごとに足せばいいんじゃなーい

14. やるだけ。すでに得られた結果を利用したら、気持ち早くなりそう。

15. コンビネーションって知ってますか?DPするまでもなかった。交互にかけたり割ったりするといいですね。ナメてるよね?ナメてるよね??

16. ぬるま湯に浸かりすぎて一瞬「計算するだけだな!」ってなったけど違った。

各桁をリストで保持して2倍していくとよいです。業界用語でDPとかいうやつです。競プロっぽいな!あと0.3010. 

17. クソゲーやめろ!!!こんなことするためにPEはじめたんやないんや!!!

ところで、40ってfortyなんですね(無限敗) これに関しては英語がカス。総じてひどい。

18. データ整形に慣れてきた。問題自体はおそらく2^15全探索が想定だろうけど、全探索書くのだるいと感じたので素直にDP。どっちが素直なのかはしらん。

19. 1901年じゃなくて1900年の最初の曜日をよこしてきたPEを極刑に処す

20. 問題16と一緒だな!

...と思ったら、アホほどバグらせるの巻。原因はDP配列の宣言で、

dp = [[0]*205]*101

とやっていたせい。こうすると、値を代入したときに他の列まで変わってしまうとか。は?なにその仕様?

というわけで今後は

dp = [[0 for i in range(205) for j in range(101)]

などとしましょうという話だった。

note.nkmk.me

てかこれnumpyでやればよかっただけの話なのでは?