simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

PathDefense日記(Topcoderマラソンマッチ)

0日目

今日からTCO MM Round2の始まり始まりー、いつも対戦後に戦略とかをツイッターに流しているけど、
今回は日記を使ってコンテスト中の考えとかを雑にまとめてみるテスト。

1日目(2015/05/26)

5:00 起床

起きて問題文を読む。和訳が面倒だ...ひたすらGoogle翻訳に英文を投げ続ける

「Path Defense」
https://www.topcoder.com/longcontest/?module=ViewProblemStatement&compid=48152&rd=16471



タワーディフェンスだ」!

7:00 問題文大体翻訳終わった

とりあえず何もしないAIを投げる

165000.00

正のスコアが取れた!圧倒的感謝!

19:00 帰宅

とりあえず基本的な部分のコードを書き始める。

ぼーっと何もしないビジュアライザを眺める

「波状攻撃きつそう」

そういえばcreepって侵略者って認識だけど完全にコイツで再生される

f:id:simanman:20150526205839j:plain

ぶつかったら爆発して消失するところとか似てる

22:00

色々足回りのコード書いてるだけで終わりそう

今のところhoshiさんとhogeさんが上位

問題がCODEVSっぽいというか1.0ってタワーディフェンスだったような(参加していないので詳細は知らず)

23:45

testerに修正があったみたいyowaさんのツイートで気づく

とりあえず「攻撃範囲 * 攻撃力 / コスト」でタワーの価値を計算してみる、ゴミのようなタワーからコスパ最強のタワーまで色々あった。攻撃範囲のことを考えても使うタワーそんなに多くなさそう。

2日目(2015/05/27)

0:00

とりあえずタワーの射程範囲を見える化しておこう

グリッド系の問題では毎回お世話になってる「PathFinding.js」で確認
PathFinding.js

範囲1
f:id:simanman:20150527000231p:plain:w300

範囲2
f:id:simanman:20150527001008p:plain:w300

範囲3
f:id:simanman:20150527001339p:plain:w300

範囲4
f:id:simanman:20150527001702p:plain:w300

範囲5
f:id:simanman:20150527002024p:plain:w300


範囲5デカっ

範囲3から使い物になりそう。範囲1とか2はテストケース次第って感じかな

0:30

とりえあず眠いので寝よう

7:00

起きる。支度して会社

22:00

ひたすら足回りを実装、まだ終わらない

3日目(2015/05/28)

1:00

のんびり考えてたらこんな時間。

これ波状攻撃を以下に防ぐか、そして捨て基地が必要なのかが気になる。
端から4マスしか離れていない場所にある基地とか、近場のスポーン地点から波状攻撃があったら
即詰みしそう

3:00

コメントをdoxgen風に
明日には提出できるといいな

7:00

起床

20:40

帰宅

タワーを立てる条件を考えよう

  • 1. 敵が出現する
  • 2. 現在の建設状態で敵が基地に到達出来ない場合はスルー
  • 3. 敵を止めきれない場合、建設を行う

この「敵を止めきれない場合」を判定するのが難しい。

22:45

とりあえずコードに「やりたいこと」をコメントで残して「実装まだですコメント」を入れていこう

4日目(2015/05/29)

最初の1週間は何も出来ないマンになってる気がする

0:25

マップの各要素をセルとして扱っていたけど、各セルに対して「防御価値」をつけて
防御価値の高いセルを多く守れるようにタワーを設置してみよう。

防御価値の高いセルとは

  • 多くの基地への経路の一部となっている(ここを通る敵が多いので守るべき)
  • 基地に近い(基地に近いところは火力を高くしておく)

あまり思いつかないけど、とりあえずこの辺りで

5日目(2015/05/30)

ひたすら実装、想像以上に実装が多い

2:30

とりあえず欲しい機能をAmazonウィッシュリスト感覚で追加していったら
コード量がどんどん増えていく...

3:00

結講実装したつもりだけどまだ出せない...土日頑張ろ

6:00

おはようございます!そしておやすみなさい!

10:30

おはようございます!

頑張って今日で2投目投げたい、とりあえず戦略を一度整理して少しずつ実装していくことに

12:00

kindle 50%還元セールが始まってた。購入作業

6日目(2015/05/31)

機能はkindleのセールでほとんど作業できなかった


19:30
やっと完成したけど、バグ

7日目(2015/06/01)

バグが取れたので投げてみる

226754.39

うん。まぁこんなもんか、とりあえずここからここから

3:00

2投目を投げる

384385.96

やっぱり波状攻撃に対応しないとこんなもんか

8日目(2015/06/02)

セルに対して「防御価値」をつけて、その合計値が高いところにタワーを置くようにする

3投目

520472.44

まだちょっと評価値が変な感じ、あとは「捨てタワー」もどうするか出来てないし

13日目(2015/06/07)

日記つけるのさぼってました

日本勢の順位が1位(eitahoさん)、5位(hoshiさん)、11位(takaptさん)とかなり上がってきてる。

正直このゲームまだ「敵をひたすら殲滅」するゲームなのか「タワーを犠牲にしても良い」
のかよくわかってない

最終日(2015/06/08)

スプラトゥーン楽しい(∩´∀`)∩

Rubyで配列の最大値と最小値を同時に取得

rubyでは配列の最大値と最小値を同時に取得出来るminmaxメソッドがあります。

minmaxを使わないver

array = [1,2,3,4,5]

min = array.min
max = array.max

puts min
puts max
1
5

使うver

array = [1,2,3,4,5]

min, max = array.minmax

puts min
puts max
1
5

ちょっとだけ記述量が減ります。minmax_byで条件をつけた最小値、最大値を取得出来ます。

京都旅日記 最終日

今日で最終日です。

朝は荷物をまとめて、忘れ物がないかチェックしてホテルのチェックアウトを行いました。ちょっと荷物が増えてるのでトランクの中身がかなりギチギチになりました。。。

サイクリング

京都駅から関西空港までは特急はるかで向かうことにしたのですが、それまでちょっと時間が空いたので近くのレンタルサイクル屋さんで自転車を借りて京都の町をひたすら回ってました。(どちらかと言うと鴨川を北上した感じ)

f:id:simanman:20150322104432j:plain

f:id:simanman:20150322105256j:plain

さよなら京都

2時間ぐらいのサイクリングを終えて、京都駅に戻ってきました。そこから特急はるかに乗って関西空港

f:id:simanman:20150322130613j:plain

お土産たくさん

関西空港に着くと、サッサと搭乗手続きを済ませてお土産を購入しに向かいました。今回、SamurAIcodingで得た賞金2万円があったので、全部お土産に使いました。ありがとうございます。

f:id:simanman:20150322150149j:plain

昼飯は天ざるです。

自宅

那覇空港に到着 → 自宅。今回5泊6日というとても長い帰還京都にいましたが、観光地が多すぎて結局全部回れませんでした。あと2週間くらい滞在すれば桜も満開になって観光地も全部回れる気がしたのですが、長時間の徒歩によって腰をいためたのと、主に諭吉さんが大量に飛んでいったので断念しました。(あと有給がそんなに無い)

次回訪れるのがいつになるのかわかりませんが、次はまた別の所を巡ってみたいと思います。

京都旅日記 5日目

今日は嵐山を目指します。

地下鉄 → 嵐電 → 嵐山

1回乗り換えして向かいます。嵐電の中では太秦近くになると、暴れん坊将軍のBGMが流れて面白かった。

f:id:simanman:20150321114715j:plain

到着

竹林

早速有名な竹林へと向かいました。今日は土曜日ということもあってめちゃめちゃ人が多かったです。縁日かと思うぐらい

f:id:simanman:20150321115646j:plain

竹林!

f:id:simanman:20150321120810j:plain

竹がいっぱいだ

大河内山荘庭園

休憩がてら大河内山荘庭園に行ってきました。

f:id:simanman:20150321121157j:plain

f:id:simanman:20150321121509j:plain

抹茶と最中

f:id:simanman:20150321122818j:plain

f:id:simanman:20150321123350j:plain

f:id:simanman:20150321123755j:plain

嵐山とか見えたり

トロッコ満車

この後、トロッコの嵐山駅にたどり着いてチケットを購入しようと思ったら、次のトロッコは満車でその次が1時間30分後とかだったので「どうせ乗るなら最初の駅から乗りたい」ということで嵯峨野駅に向かって歩きました。

嵯峨野駅に到着

歩いて20分ぐらいで嵯峨野駅に到着しました。チケットを購入しようと思ったら、立ち見席しか無かったので、見送って次の電車のチケットを購入して暇と潰すことにしました。

f:id:simanman:20150321154639j:plain

昼食

トロッコの到着時間まで大分時間があったので、それまでに昼食を取ることにしました。この辺りからもう歩くのが辛かったので、近くのレンタルサイクルで自転車を借りて移動しました。

f:id:simanman:20150321145219j:plain

和牛を使った料理のお店に入ってステーキ丼を注文。

ジオラマJAPAN

まだ発射まで30分程度時間があったので、嵯峨野駅の隣で行われていた「ジオラマJAPAN」に行ってきました。

f:id:simanman:20150321153035j:plain
夜の街並み

f:id:simanman:20150321153720j:plain
交通事故

f:id:simanman:20150321153932j:plain
金閣寺

全体のサイズはすごく大きくて、大変見応えのあるジオラマでした。

トロッコに乗る

トロッコの発射時間になったので、改札へと向かいトロッコに乗りました。自分がのった車両は屋根と横の壁が無くて(柵はある)景色を見渡すには大変良い車両でした(リッチ車両)

f:id:simanman:20150321161519j:plain

f:id:simanman:20150321161940j:plain

f:id:simanman:20150321162121j:plain

f:id:simanman:20150321162209j:plain
たぬき

f:id:simanman:20150321162724j:plain

道中色々な景色が見れてよかった。

終点の亀岡駅近くでは渓流下りのイベントがあったのですが、時間が間に合わずこちらは断念しました(次回リベンジで)

つけ麺

嵐山から京都駅に戻って。晩御飯は昨日急に食べたくなったつけ麺屋に行くことにしました。

f:id:simanman:20150321192847j:plain

吟醸らーめん 久保田

ホテル着

途中お菓子とか買おうと思いましたが、特に店が無かったのでそのままホテルに戻りました。
いよいよ明日が最終日です。

京都旅日記 4日目

4日目は日本三景の1つである天橋立に行ってみました。

特急はしだて天橋立

行きは特急はしだて号の始発で向かいました。乗り換えなしで一直線で天橋立まで行くことが出来ます。

f:id:simanman:20150320090616j:plain

電車に揺られること2時間、天橋立駅に着きました。

f:id:simanman:20150320094826j:plain

道中

f:id:simanman:20150320100148j:plain

山が多かった

f:id:simanman:20150320112619j:plain

とうちゃーく

松並木を歩く

天橋立駅に着くと、そこから徒歩10分程度で松並木に到着しました。途中レンタルサイクルがあったのですが、せっかくなので歩くことにしました。

f:id:simanman:20150320114230j:plain

f:id:simanman:20150320114412j:plain

海水浴場もあった。PCがあったら砂浜コーディング出来そう

f:id:simanman:20150320122157j:plain

なかよし松。自分は1人だったけど

f:id:simanman:20150320123034j:plain

台風で折れた松。台風が来る度にヒヤヒヤしてたんだなーと、美しい景色を保持するのも一苦労

f:id:simanman:20150320123523j:plain

終点。直前に雨が降ってたのか、水はけが悪いのかちょこちょこ水たまりがあった。

傘松公園へ

ここから、例の股くぐりをやりに傘松公園を目指します。

f:id:simanman:20150320131502j:plain

リフトで傘松公園を目指します。ちょっとグラグラして怖かった。

f:id:simanman:20150320132426j:plain

遂に!写真でよく見る光景を生で見ることができました!(ちょっと霞がかかってたのが残念)。

「股くぐり」をやろうとしましたが、体が90℃以上曲がらなくて出来ませんでした。

f:id:simanman:20150320133742j:plain

他の観光客のこのポーズ取れてない人多かったです。

昼食タイム

昼食は天橋立の景色を眺めながら食事をすることのできるレストランに入りました。

f:id:simanman:20150320134828j:plain

飯!

f:id:simanman:20150320134545j:plain

景色!

フェリーで戻る

行きは歩きで来たのですが、帰りはせっかくなのでフェリーで戻ることにしました。

f:id:simanman:20150320151249j:plain

カモメが待機してる

f:id:simanman:20150320151647j:plain

並走して飛んできた!(フェリーの到着場の中やフェリーの中でカモメの餌を販売しているので、それを狙ってるのかも)

f:id:simanman:20150320151943j:plain

めっちゃ近かった

f:id:simanman:20150320152104j:plain

無銭乗船の常習犯

カモメに気を取られてほとんど景色を見てなかった。。。

天橋立からの帰還

行きは特急で来たのですが、帰りは乗り継ぎで帰りました。

f:id:simanman:20150320175359j:plain

さよならー

二条城ライトアップイベント

二条城でライトアップイベントが行われていたので、ついでに行ってきました。

f:id:simanman:20150320191001j:plain

城壁にプロジェクションマッピングを使用して、映像を流してました。

f:id:simanman:20150320192454j:plain

f:id:simanman:20150320192133j:plain

音楽に合わさって映像が変わる様子は楽しかった。

f:id:simanman:20150320193217j:plain

桜もライトアップされてたのですが、桜が咲いてなかった。。。

他にも、出店とか琴の演奏会がありました。

ホテル着

21:00ぐらいにホテルに戻ってきたのですが、この時間帯だと空いている飯屋がほとんど無かったので、近くのカレー屋さんでカレーを食べました。

京都旅日記 3日目

今日からはタスクが無くなったので自由に観光できるぞ!

最初は伏見稲荷大社

ということで、まずは伏見稲荷大社に向かいました。画像でよく見る千本鳥居を見てみたかったので。

f:id:simanman:20150319111543j:plain

平日にもかかわらず観光客で大変賑わってました

f:id:simanman:20150319113537j:plain

千本鳥居の入り口!

f:id:simanman:20150319113609j:plain

うひょー

f:id:simanman:20150319113859j:plain

まさに絶景。大きい鳥居が連なるところと小さい鳥居が連なるところがあったのですが、この上の写真の小さい鳥居が連なっているところは本当にすごかったです。この後山頂付近まで登ったのですが、あいにく天気が雨だったため景色はほとんど見えませんでした。

f:id:simanman:20150319120557j:plain

残念。

その後、麓まで下りて近くの茶店で「稲荷うどん」と「稲荷ずし」を注文しました。

f:id:simanman:20150319133842j:plain

うまうま

宇治へ向かう

次はお菓子と平等院鳳凰堂を求めて宇治へ向かいました。

f:id:simanman:20150319143933j:plain

駅に下りてから見えるのは宇治茶の看板だったり、旗だったり、チラシだったり。まさに「お茶の町」って感じでしたね。

早速近くの茶店に入って、抹茶と草団子を注文しました。

f:id:simanman:20150319145648j:plain

団子が思ったより甘かったのですが、それを抹茶と一緒に食すことにより丁度いい甘さになり、とても良い茶菓子でした。抹茶単体でも普段飲んでいるお茶とは違って渋みが無いというか、ほんのり苦さはあるけどスーって飲めて後味がすごいサッパリしてて美味しかったです。

そして平等院鳳凰堂に向かいました。

平等院鳳凰堂

f:id:simanman:20150319153121j:plain

平等院鳳凰堂ってあと10円玉に描かれている絵のイメージが強かったのですが、入って驚いたのは庭がすごい手入れされてて綺麗だったことです。

ちょっと歩くと、有名な鳳凰堂にたどり着きます

f:id:simanman:20150320003210j:plain

こういつも見てる絵柄の実物をみると、ちょっと感動しますね「おー本当に一緒だー」って感じで(実際に10円玉に描かれている絵と見比べながら1人で感動してました)

この後は博物館で年表とか歴史とか国宝を見たり、実際に鳳凰堂の中に入って、中の阿弥陀像を見たりとかしてました。

京都タワー

この辺りで時間も夕刻近くになってたので、京都駅に戻りました。そこで、最初来た時に目がついた京都タワーに行ってきました。

f:id:simanman:20150319182212j:plain

最初は「なんか小さいタワーだな」と思っていたのですが、登ってみると以外や131mあるらしくて結講高く感じました。望遠鏡が無料だったので、そこから京都の街並みを一望することが出来ます。

圓徳院へ

既に日も落ちて真っ暗だったのですが、ライトアップイベントが行われている圓徳院が京都駅から近かったので歩いて行きました(歩くと遠かった...)

f:id:simanman:20150319195823j:plain

こういった庭を見たのは初めてなのですが、砂の模様がとても綺麗でこういった模様を考えた人はスゴイなと。過去に「枯山水」というボードゲームをやって、こういった庭園を見たいと思って来てみたのですが、想像以上に綺麗だったので庭園めぐりもいいかもしれません。

晩飯は京料理

帰りはバスで京都駅に戻り、この辺りで20:30ぐらいだったのですが、京都駅近のレストラン街で京料理の店に入りました。

f:id:simanman:20150319205638j:plain

ついでに日本酒も頼んで京料理を満喫しました。結構量があってお腹一杯

明日も観光頑張るぞい!

京都旅日記 2日目

今日はsamurAI codingの決勝当日。

2日目の朝

朝8:30に起きて、ホテルの朝食が9:30までだったのでお風呂入って朝食。バイキング形式で和洋折衷な取り方をしてしまった。朝食を終えたら11:30ぐらいまで昼寝して、そのあと会場の京都大学に向かいました。

会場の京都大学に向かう

途中の鴨川
f:id:simanman:20150318130716j:plain

鴨がいた!
f:id:simanman:20150318131645j:plain

一応渡れるっぽい
f:id:simanman:20150318132754j:plain

渡ってみた
f:id:simanman:20150318132908j:plain

河川敷にはお昼から寝てる人ととか、のんびりしてる人とから、ランナーとか自転車乗っている人とか様々な人がいました。
あと、鴨川の水綺麗だった。

京都大学に到着

f:id:simanman:20150318145631j:plain

会場に着くと既に参加者の人達が集まっていました。今回、チーム戦OKだったのですが、大体の参加者は1人でしたね。下は高校生から上は40代まですごい幅広い年齢層でした。

SamurAI Coding決勝戦

決勝戦が始まって、予選ラウンドの初戦からいきなり登場だったのですが、なんとか1位を取れて予選を突破しました。(1戦だけだったので本当に運が良かった)

そして、決勝リーグでは3戦行われて3位、4位、2位のトータルで3位だったのですが、1位のTaiyoさんが1位、1位、1位の圧倒的勝利!予選からの強さをそのまま決勝でも発揮できるとは本当にスゴイです。

3位の副賞として2万円を頂きましたお土産代に使おうと思います!

懇談会

そして懇談会ではお寿司とお酒とその他色々な料理が出されていて、とてもよかった。

sushi
f:id:simanman:20150318190434j:plain

参加者の話を聞いていると大体の人がモンテカルロ法を使用していたました。一口にモンテカルロといっても参加者毎にプレイアウトの方法や、細かいパラメータの調整が違っていてその辺りの知見を得られたのは大きいなと思います。(次はルールベースじゃなくてモンテカルロでやろうな!)

これで今回の京都も目的は達成したので、残りは京都観光するぞ!