AHC054 日記

ほとんどコンテスト中に書いたもの(一部編集)です

文体が終わっていたり嘘が含まれていたりします

1日目(9/19)

スタートダッシュ賞楽しみ~

インタラクティブ

目的地設定するの一様ランダムなのか

嫌がらせの最適化、おもしろ

よくわかんないけどジグザグにすればまあまあいやな気持ちになるのでは?

あ~もともと木が植えられてるのか

これスタートダッシュするの大変すぎる

とりあえず最初のターンだけたくさん植えてみるか

目的地になりうるマスを増やしつつなるべく確認済みマスを増やさない感じか?

うまく渦巻みたいな感じでAAを隠してもそこを通られると勝手に最短距離にされるのか

すでに助けて~という感じに

四方向それぞれに全体が連結ならトレントを置くのが強いらしい このゲーム難しすぎる…

あ~最短路が決まるからいい感じになるのか なるほどね~

これスコアが伸びれば伸びるほどTLが足りなくなりそう

2日目(9/20)

初日12位だった 微妙にスタートダッシュ賞とれてなさそ~~~

確認→移動→トレント設置の順に起こるから冒険者の真横にトレントを置けるのか(今更!?)

目的地がいつ変わったかがわからないの、どうすればいいんだろう

とりあえずAAをうまく隠したいが、どうすればいいんだ

なるべくそこを通られないようにしたいので、先に周りに木が生えていることを明かしたい

逆に、AAがバレる可能性のあるマスはたぶん2マスまでしか減らせないのでそれさえうまくできれば余計なトレントを置かなくても済みそう

あ~AAの隣のマスを通られるのも困るのか

だから、Aを花、oを空きマス、xを見られなくてもいい木、Xを見られないといけない木、-を何でもいいとして

-X-
-ox
xAX
-X-

になればいいのか(まあ冒険者のいるマスと連結じゃないといけないけど)(8通りある)

この形は前からやってたけど意外と見せる木は少なくてもいいのか

とはいえどうやって無理やり木を見せればいいんだ

とりあえず近くに来たら置けば行けるか?

3日目(9/21)

いやそこに木を置くとAAと連結じゃなくなるときすぐ詰むな ひ~~~~~

なんかそれ以前でバグっているな 助けて~~~~~

if(!ok) continue;を if(ok) continue; って書いてた ?????

でもダメそう

先にAAの周りを囲うと目的地に向かう途中にAAを見つけられる可能性があるし、近くに冒険者が来たらAAの周りを囲おうとすると連結を保つのが難しい  う~~~~~ん

先に危なそうなところは埋めておくか?

いや~一回見られたところに木を置けないのつらいな~

1マスとなりの四方向だけ見てたけどkマスとなりの四方向を見るようにしたら伸びた 確かにな~

でもジグザグしちゃうな これは強いのか…?

ちまちま頑張ることで1ページ目に戻ってきた

長期コンあるある:提出したら自分の順位は伸びたけど、ほかの人の相対スコアもちょっと伸びたとき微妙な気分になる

いやお絵描きする分には楽しいけど実装するのめんどくせ~~~~~

....x.
..X.o.
..oxox
.xAXox
..X.o.
....x.

みたいにすればうまくいくか…?いや微妙そ~

4日目(9/22)

今日の夢:自分と上位陣の解を同時にビジュアライズする機能があった。そして上位陣も同じ感じで途中で詰んでたから別にいいんだと思った。(でも思い返すとあのビジュアライザ詰んだ後も点入ってたな だからダメそう(?))

いやルールベースでAAの周りを見せるのは難しいか…?

提出したけど下がった う~~~~~ん

なんかまだhighest持ってるっぽいな

一回詰み回避のことは忘れるか?

手数を増やすなら

x..
x.x
x.x
x.x
..x

みたいなのは強いか?

なんかあんまり強くなさそ~

AA周り、

..x.
xoox
.xAX
..X.

にすれば一つ見るべきマスが減るのか

待てよ…

..x..
xacx.
.xAdx
..xb.
...x.

の形にしておいて、冒険者がaに来たらcを、bに来たらdを閉じればいいじゃん! うおおおお

これ考えつけたのめちゃくちゃ気持ちいいな パズルみたいだ

あとはこれを4回転させればOK 持っててよかったrotateライブラリ(?)

AAが端にあるときはいらないところに木を生やしちゃうな まあとりあえずはいいか

ふ~む 100ケース中16ケースでこれの構築に失敗してる

あとAAが壁の隣のときとかに壊れていそう

これパズルすぎるな

端は

(注:これは壊れています)

..x..
.aeb.
xcAdx

にしてaに来たらcとe、bに来たらdとeを閉じればよさそう

隅は

.xA
...
..x

でよさそう

隅の1つ隣は

(注:これは壊れています2)

xAx
..x
.x.

でよさそう

なんかさっきの2つ閉じるテクを使ったら別の詰み回避ができそう

(注:これは壊れています3)

..x..
.ap..
xpApx
.p..p
..x..

にしてaに冒険者が来たらpに置けばよさそう いやこれは必要な空きマスが多すぎるか?

(注:これは壊れています4)

..x..
xap.x
xpApx
xp..x
..x..

でもいいけど…

さっきの端のやつ、

(注:これは壊れています5 壊れすぎ…)

.axb.
xcAdx

でいいのか

5日目(9/23)

とりあえずさっきの両端からの構築に失敗したら適当に前の5本生やすやつで埋めることにするか

提出したら61Gで13位になった お~

これ新しく見るマスを最小化するように移動したらいい感じになる?まあその方法がわからないんですが…

いや端のやつこれじゃダメじゃん 先にc見られたら何もできない

.x.x.
.axb.
xcAdx

じゃないとダメだ

とりあえず詰む問題は大体どうにかなったからこれからはちゃんと冒険者の移動回数を増やすことを考える必要がある

このルールベースだと何もできないな

詰み回避するやつ、反転させたら候補が増える!?→aとb、cとdが入れ替わるだけでした…

上で書いてたpに4つ置くやつ、先に見られるから不可能でした…

う~んギザギザさせようとしても微妙そう

閉じてもあんまり意味がないところは閉じなくてもいいのか?う~ん…

最初に真ん中に道を作るようにしたらちょっと伸びた

おい隅の隣これじゃだめじゃね~か!

.xAx
x..x
..x.

じゃないとダメじゃん も~

やっぱ最小マスで繋ぐみたいにするのがいいんじゃないのかなあ

6日目(9/24)

最小マスで繋ぐためには目的地を推測する必要があるが、目的地を推測するには冒険者にある程度自由に動いてもらう必要がある

一回推測→Kマス進むみたいな感じならいける…?

7日目(9/25)

多分最高スコアを達成できるのは今まで通ったマスを全部通り、かつ新しく見るマスが1つ(ジグザグ見てく感じ)なはず

だからスコアの上界は1+2+3+…N*N=N^2*(N^2+1)/2

だけど木があるし目的地がランダムだからこんなスコアにはならなそう

でもseed0はN=20なのにまだ1000点くらいしか出てないんだよな~

ということは冒険者をたくさん動かすのではなく数回の長距離移動を目指すべき?

でもそもそも14回くらいしか目的地が変わってないっぽいな

出口(?)を二点だけにするのはアリかも?いや難しいか…?

最初に穴開けたらめっちゃ伸びて66Gくらい、8位になった うお~

こういうのをたくさん埋め込むのがやっぱり強いか?

何がヤバいって多分トップ層はここら辺までを1日目に思いついてたんだよな

ここからはどうやってこの形を作るかという問題になってきた

8日目(9/26)

四方向の一番近くに置けるなら置く貪欲を最初のターン以外はするとして、最初のターンだけ木のおき方を決めれば大体のスコアがわかる…?

でも1ターンシミュレーションするのにO(N^2)かかるからKケースTターン試したらO(K*T*N^2)になるしな~

そもそも1マス変えたくらいでスコア変わるのか?

とりあえず保留で…

いやジグザグ2行書くの面倒すぎるからこっちをやろうかなあ…

これは言い訳なんですけど、スタートダッシュ賞を狙ってめちゃめちゃなコードを書いて、それを無理やり継ぎ足していったせいで今大変なことになっています

なんか山登りしてできた解を見る限り木(グラフ)を作るのが強いっぽい?

確かにそれはそうで、最終的に木を置くならあらかじめ形を作っておいたほうがいいのか

これしかも微妙に木じゃない なんだこれ

ぐわ~一生バグっている

どうにか実装はできたけどあんまりいいスコアにはならない

目的地の選択順番が分かればな~

9日目(9/27)

結論:目的地の選択順番が分かんないと無理そう(モンテカルロにしてもまあ微妙)

10日目(9/28)

2行ジグザク書いたけどダメそう

ちまちま改善している

一応多少木を置くことで強くはなるっぽい(乱択だけど…)→全然だった

TODO:緊急回避を書く

11日目(9/29)

ちょっとだけ改善して終了…

結果

暫定16位、最終27位でした ぐわ~