パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Very-Hardなつるかめ算

2020-08-28 | Python

https://www.codingame.com/training/expert/the-barnyard

つるかめ算にペガサス、悪魔が参加して、翼とか角も数える問題。

問題のレベルはVery-Hardこれまで何問か挑戦して、2問しか全問正解していない。

 

データの正規化

アルゴリズムを解く場合、データを扱いやすく整えることが大切。

これによって作りやすくなったり、最悪完成しなかったりする。

企業のシステムなんかでも同じ。データベースおかしいけど

システムはうまく動いている。なんてことはまずない。

 

情報整理

初期の頃と比較してアルゴリズムの能力はそんなに変わっていない

しかし、何度もいろいろなデータ化をしてきたので、

データの作成の能力はあがっている。

昔はデータごちゃごちゃだーとほぼ毎回、作り直していたが

最近、作り直しは逆にほとんどなくなった。

想定外に解ける

正解時のソース60行ぐらいある

データ化が終わって、とりあえずランダムで入れ替えて、

答えを速く探す方法を考えようかなと思っていたのですが、

最終問題、全ての動物が混ざって61頭のつるかめ算も

ランダム入れ替えで時間内に解けたので終了。

 

ソースの整頓

あいまいな名前を少しでも直して、インデントなども直してみる。

3分の2に減らして、ランダム探索部も少し速くしてみる。

一番の達人はfrom numpy.linalg import solveを使ってこの3分の1ぐらいの

ソース量で解いている人もいる。まだまだ道は続く。

 

空間

ソースの空間はわかりやすくするためには重要

animal が、やかましいソースになってしまったので

コメントで緑化。

 

いくらでも見直せるのでこのへんで...

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。