パーソナルブログメモリ

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

Python 思考するプログラム 2時間でアニマルチェスのアルゴリズムを作った手順

2023-04-24 | 新規1000万人ぐらいにプログラムをマスターしてもらいたい

深夜3時 CodinGameに新しい対戦ゲームが投稿されているのを知って

5時までショボショボの眼でつくった手順をご紹介

対戦結果

ルール

1)お互いのプレイヤーは自分のアニマルを一枚上下左右ひとマスずつ動かせる(例外あり)

2)アニマルには固有の強弱関係があって取れたり取れなかったり相打ちもあるらしい

3)相手側陣に相手の巣穴があってそこに自分の駒を動かせれば勝ち(相手全滅でも勝ち)

4)巣穴の隣には罠があってそこにいる敵アニマルは全て自アニマルから取られる状態になる

(例外)

沼は飛び越えられるアニマルがいたり入ることができるアニマルがいたりする

 

実際のゲーム

ゲームサーバからの情報

最初

 自分のチームの色が教えられる

各ターン

 相手のアニマルの移動したものの元場所と先場所の情報

 自分のアニマルの移動できる元場所、先場所の全情報が与えられる

 

各ターンゲームサーバへ送る情報

 動かすアニマルの元場所と先場所をひとつ

 

 

作成手順

情報収集

 まずどのような情報が送られてくるかログ表示

データ検討 

 今回面倒なので盤も駒の強弱関係も作らずにやっていく方針を立てる

相手駒の位置把握

 ゲームサーバーから送られてくる相手の移動情報から相手位置を集合型で保存

ターン前作成データ

 相手巣穴と罠、自分巣穴と罠の情報をチームの色で入れ替え

作成した関数

 ログ表示用

 位置のリストを渡され、そのひとマスまわりの位置のリストを返す

 指定位置から、相手巣穴までのマンハッタン距離を返す

 (マンハッタン距離 x,yごとの距離を足したもの)

自分の移動

 送られてきた自分の動かせる全移動情報をスコア化してもっとも評価の高いものを実施

 移動先(以後 先)が相手巣穴 +1000000

 先が相手アニマル +1000 さらに自分のトラップないなら +10000

 移動元(以後 元)が相手アニマルのひとマスないで先が相手アニマルのひとマス以外 +500

 自分のトラップのひとマスまわり +50

 先が相手アニマルのひとマスない -50

 先が相手トラップで相手アニマルのひとマス以外 +50000

 相手巣穴からのマンハッタン距離をそのままマイナスで追加 -マンハッタン距離

結果の送信とあとしまつ

 先に相手位置がある場合、相手位置から外す

 

蛇足

 はかない、ほんのつかの間の世界一位を満喫する 

 

  

 

 


最新の画像もっと見る

コメントを投稿

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