2023年4月4日火曜日

MC Digital プログラミングコンテスト2023(AtCoder Heuristic Contest 019)

 pretest50位→システムテストは49位。序盤に思いついたことを実装していっただけで、後に発想できたことがほとんどなかったため、あまり手応えはなかったけれど、順位はまあまあ良かった。手応えがあっても全然順位が伸びないこともあるので、それに比べれば良いか。
 以下は、大体ツイートのまとめです。

コンテスト後のツイート

 基本的な方針はビームサーチ。

 一番目のシルエット用に使っていない頂点(x1,y1,z1)と二番目のシルエット用に使っていない頂点(x2,y2,z2)と、回転方向directionを決めて、できるだけ大きくブロックを拡大させる……というのを一操作としたビームサーチ。
 あとは、一部のブロックと周囲のブロックを壊す操作を入れました。

・評価値は使えていないシルエットの頂点+Σ1/今までおいたブロックにの大きさ
・使う頂点は、シルエットで使っていない&角に近いもの優先(片方を1個、もう片方を5個採用。これが一番得点が高かった)
・方角は全24通り試しています。

 その中で評価値が良いものを最大850個(これがビーム幅?)採用しています。ビームサーチ(っぽいの)はじめて書いたので、語句とか間違っていたらすみません。最初(Pythonで書いていたとき)はもっとビームサーチしてたと思う(?)んだけど、時間使い切るならchokudaiサーチが良いって読んで、chokudaiサーチっぽい要素も取り入れました。

 この方法だと、二頂点を選んだ後、最大まで膨らませないときが最適だったときのケアができていないけど、どうすれば良いか分からず断念。
 焼き鈍しはしてみたかったけど、できた盤面から変化させる方法が分かりませんでした。

 結構序盤で探索ゲーだと思ったのですが、とりあえずPythonで書いてRustに直しました。書き直して結構順位が上がったのが嬉しかった。本質ではない(と思っている)パラメータを1変化させるだけでスコアが大きく変化するのが謎でした。

 PythonからRustへ書き換える際には、ChatGPTにお世話になりました。書きたい大まかな内容をPythonで書いて、「このPythonのコードをRustに直して」みたいな聞き方を何度もしていました。適切な答えが返ってくることが多かった。
 さらに、文法が分からないとき丁寧に解説してもらい、凄くありがたかったです。

0 件のコメント:

コメントを投稿