codevs5.0 予選 参加したお

yukicoderでちらっと聞いて「へー」程度だったのですが、chokudaiさんが参加すると聞いて、
シナジー効果により欲エネルギーが上昇、僕もコードを組んで参加することにしました。IDは「mai」です。

・・・感想文は後に回して、ソースコードの公開(後悔)とざっくりとした戦略を書きましょう。







雑なフローチャート

1. 標準入力読み込み
2. スコアマップ計算(座標x,yは安全か危険か)
3. (消費量次第で高速を唱える)。
4. 2人のninjaに対して:
4-1. 移動可能なコマンドを列挙する(ae)
4-2. 移動先のスコアで降順ソート
4-3. 列挙したコマンドに対してシミュレーションを行う
捕縛されるものはここで除外する(xe)
4-4. シミュレーション結果で安定降順ソート
4-5. 岩を避けて移動するコマンドをそれなりに評価・安定ソート(be)
4-6. 4-5で得られた配列の先頭がコマンドの候補である。
4-7. 選んだコマンドを詳しく調べ、降石の危険があるならば、岩砕を発動。
4-8. 4-5でコマンドが得られなかったら、岩砕・回転斬り・分身・高速を検討
ここでスペルを発動する場合、4のループをninja1人目からやりなおす
5. この時点でスペルを発動しないなら、敵への攻撃の探索の計算を実施する
2人のninjaに対して:
5-1. 敵の行動可能なコマンドと行動不能なコマンドを列挙する
5-2. 行動可能なコマンドが唯一ならば、そのマスに対して敵分身・敵降石を検討。
5-3. 行動可能なコマンドが0ならば、相手は何か術式を使うはずなので、敵分身を検討。
5-4. 犬と岩に隣接している等の条件が揃えば、敵降石を検討。
6. まだスペルを使わないなら、消費量次第で敵岩砕を検討する。
7. 印刷。


このプログラムの良いところ

・・・


わるいところ

・中遠距離のソウル検出が完全にスコアマップ依存
最大の問題点。
犬に簡単に詰められて回転斬りするし、下手に岩押してソウルが取れなくなる

・フローチャート4-7が甘い
相手側に比較的大きな賭けの要素があると、岩砕実行しません。ダメかなぁ。

・敵分身が下手
賭け要素あるし、多少はね?

・その場で右往左往する問題をスコアマップで無理やり解決(ninjaShadow)
前ターンninjaが居た場所は減点。

・ソースコードが汚い
ごめんなさい



よくわからないところ

・マクロ的な要素全般
・・中遠距離のソウル検出

・・犬との距離の取り方
どの程度距離取ればいいんだろう。
人との距離の取り方が分からない俺に犬の距離の取り方とか



感想
実はcodeVSどころか、AI系のコンテスト初参加でした。
CodinGameのチュートリアルは解いた。それだけです。

100位切ればいいかなーと思っていましたが、思ったより良かったので、ついのめりこんでしまった…。
50位の壁は厚かった。

根本が成ってないプログラムですから、見直したいと思います。



gist
最後に、Gistを貼ります。1ファイル、言語はC++です。

適当にダウンロード、コンパイルして苛めてあげてください。

コンパイラは「VS2013 x64」です。サーバにsubmitしたので、g++でもコンパイル・実行できるはずです。

codevs_5_final.cmt.cpp 軽いコメント付き

codevs_5_final.cpp予選終了前最終提出。コメント以外に違いはありません。
https://gist.github.com/buyoh/66a32991b4d74e680841


2016/04/01 : 追記
AIを改修し、サーバに再提出しました。先読みの実装がメインです。
ソースコードはこちら。サーバ提出する度にgistを書き換える予定です。
https://gist.github.com/buyoh/c551ca7f538a36946bb6c889d34aa684?ts=4



おまけ



スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : codeIQ

コメントの投稿

非公開コメント

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++JavaRubyUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1437位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
245位
アクセスランキングを見る>>