見出し画像

高速化させる

私が住んでいる家は、こっちの言葉ではアパートという。アパートと書くと日本ではトキワ荘みたいなのを想像してしまうが、公園みたいなひろい敷地に1階や2階立ての建物が点在していて、その建物に1~8世帯ぐらいが入れるような感じになっている。敷地内には、出不精の私は行ったことがないが、プールやシアタールームやジムなどがあったり、バーベキュースペースもあったりする。最初のころは日本と住環境が圧倒的に違くてすごいカルチャーショックを受けたが、慣れてくるとところどころ外国特有のツメの甘さが鼻につくようになってくる。一番わかりやすいのは建物の壁の薄さだ。私の上には中国人の夫婦が住んでいるが、夜も10時を過ぎてくるとやけに活動的になり、掃除機はかけるは、風呂場で音楽を流すわ、食器洗い機は稼働させるわで非常にうるさい。あとよく喧嘩するらしく奇声が聞こえる。恐妻家が多いというのは本当なようだ。文化が違う。まあでも私はまだ幸せなほうかもしれない。ある同僚は階下にメキシコ人が住んでいて、週7日24時間ラテンミュージックが大音量で流れる素晴らしい住環境らしい。文句を言おうとおもったら、そのメキシコ人は全身タトゥーな筋肉ムキムキでとても声をかけることができないようなきさくな感じの人だったらしい。

今日は作ったツールを使ってあれやこれやグループ構成を考えたかったが、昨日私がはりつけた恥ずかしいコードを見て、遅い原因を指摘していただいたので、それを参考に高速化させようと思う。もう全然Everquestと関係ないな。

件のコード

昨日はりつけたコードの先がこれになります。このとぐろを巻いた素晴らしいネストをみてほしい。これはさすがに恥ずかしいな。どうもpythonはfor文がすごく遅いらしく、for文を使ったら負けとまで言われているようだ。ご指摘をいただくまで全然知らなかった。しょーがねーだろ、赤ちゃんなんだから。

もらったスニペットはこれ。EQのクラスが16あるのを利用して、まず0からfまでのグループの組み合わせをつくり、その16進表記になっているものを10進にもどすというものだ。これで6つあるループが2つに減る。なるほど。
最初これをこのまま組み込もうと思ったが、これ最初に16の6乗の組み合わせのグループをメモリにバーンと展開するため、結構なメモリを食うのではないかと思った。
EQのクラスが16ならば、16進で6桁の数字でそれぞれの桁でグループのクラスに見立てることができるので、その数値からグループのリストを作ればもっと簡単にできるのではないかと思った。ついでに最初からいくつかクラスを固定する場合に対応するようにしてコードを作ってみた。

できたコードがこちら

60行くらいあったとぐろが3行まで縮まった。Daybreakはグループ構成最適化ツールが高速化されるのを想定していた?そして速度は体感でいままでの10倍くらい早くなった。ちょっとPythonがどういうものかわかった気がする。気だけね。いずれにしろ、すごい勉強になった。

さて、明日こそはこのツールを使って機械の考えた最強のグループを見ていきたいと思う。

この記事が気に入ったらサポートをしてみませんか?