halcの競プロ精進ブログ

はるくが競プロしたことを書き留めるなにか

【開催記】yukicoder score contest 8 開催記 (番外編)

コンテストを開催していたので開催記です。あまりしっかりしたものではありません。

注意

⚠️⚠️⚠️今回の問題設定はフィクションです!!⚠️⚠️⚠️

普通に犯罪なので唐突に破壊衝動に駆られても町の建物を爆破させてはいけません!!!

そもそも爆発物の所持・製造・使用もすべて犯罪です!!!!

死刑、無期または7年以上の禁固・懲役に処される重罪です!!!!!絶対に真似しないように!!!!!!*1

開催したいきさつ

実は、6月ごろからyukicoderでコンテストを開催したいとやんわりと思っていました。

その後、だいぶ間が空きますが9月ごろにyukicoderのスコアコンテストの開催経験があるお二方と話す機会がありまして*2、yukicoderのスコアコンテストは思ったより需要があることがわかったので開催することを決意しました。

まあ特に深い理由があってのことではないですが、楽しんでいただけたのであれば幸いです。

問題作成

爆弾ですべてを破壊するネタはなんかのゲームをやってた時に降ってきました。とりあえず大本はG - Strongest Takahashiを参考にして作りました。*3

当初は、「10*10マスを爆破」「上下左右を爆破」「×印のように爆破」のように考えていましたが、たぶんあんまりおもしろくないかなと思い、爆破の形をランダムにしました。

また、最初は「すべての建物マスをカバーする配置を見つける」だけのものを考えていたのですが、要素はある程度多い方がいいかなと思ったので、はるく君をスポーンさせました。移動のコストについてはB - Garbage Collectorの形式が良いと思いそのまま採用しました*4。爆弾をもちすぎるとコストが大きく、だからと言って小分けに買いすぎると爆弾屋が全滅する可能性もあり、けっこうちょうどいい塩梅になったと思っています。*5

実はこのネタは10月に思い付いたもので、6月には別の案があったのですが、6月に思い付いたものは競技性に欠けそうだったこと、ビジュアライザが単調になって盛り上がらなさそうだと思い没になりました。*6

問題ページを作成するにあたり、No.5017 Tool-assisted Shooting - yukicoderを大きく参考にしました。この場でplatinumさんに感謝申し上げます。

ビジュアライザの作成は、先述の問題の形式と同じようにSiv3Dでやろうともしたのですが、どうしてもPythonに慣れてしまったのもあって、Pythonで完結させたいと考えていました。

そこで、pygameというモジュールに行きつき、調べまくって何とか完成させました。実装にあたり、100ターンごとに状況を保持しているので、100000ターンもあるとさすがに重いです*7

難易度がやや高いこと、昼に参加しにくい人も参加してもらいたいことを考えて期間は3日間としました。金曜のコンテストがつぶれるという相当なむちゃぶりなのに対応してくださったyukiさんには感謝です。

問題への言及

えっ、怖い…*8

爆弾屋を破壊すると罰金も考えましたが全部壊す方が面白そうだったので却下しました。

注...彼は特殊な訓練を積んでいます。

治安が終わっておりますね…

解法

writerの想定解

0を出力するだけのものも一応正当な解です。50点

サンプルコードはすべての建物を壊しているので、得点が跳ね上がります。9,148点 しかし、あまりにも無駄が多くこれを改造しても得点が上がる望みは薄いです。

思いつきやすいであろう貪欲は、「一番壊せるところを壊すことを、全て壊れるまで繰り返す」です。はじめに爆弾を買い込んでこれを行うと比較的良い点数が取れます。1,637,160,602点

writerの最高得点は、これを4分割した区画それぞれで行う方針です。1,739,837,672点

絶対爽快だけどコンテスト的にはあまり得点は高くなく…

ちなみにContestantの方の中では以下のが一番近いと思います。

Testerさんの想定解

tester 解は適当に貪欲しただけです

とのことです。貪欲で2G超えられるのすごい…

参加者さんの解

だいたいここから見れます。

どうやら上位の方は爆破のさせ方は貪欲で移動経路を焼きなまし等で決めているそうです。復習しないと…*9

今回の問題については、iiljjさんの以下の発言が最も的を射てると思っています。

コンテスト中

1日目

初めのうちはあまり参加者が来ないとは予想していましたが、まあそれは予想通りでした。

開始2時間でsample.cppに軽微なミスがあったのを指摘されました。反省。

あんま時間ないし順当に1.5G程度の貪欲解が出て終わるかなと思いきや、 まさかのW/Tともに1日目でbin101さんとwanuiさんに抜かされました。何事…

爆弾所持歩行コストがバカにならないとは思っていましたが、まさかここまで影響があると思っておらず…

2日目

W/Tともに複数人に抜かされました。

wanuiさんとbin101さんが首位争いをしており、見ていて楽しかったです。

また、このころから数名ビジュアライザを共有してくれました。ありがとうございます。

3日目

ここまで正直言ってあんま参加者数が伸びず心配だったのですが、この日は潜伏勢がめちゃくちゃ沸いて昨日上位だったメンツが軒並み抜かされていました…

bowwowforeachさん、rhooさん、Kiri8128さんが首位争いに参加しており、少し見れば首位が変わっていてめちゃくちゃ熱い展開でした。*10

また、当初は想定もしていなかった2.9Gが出てしまいました。私の解より1.7倍くらい効率的なの怖い…

結局rhooさんがぎりぎり勝ちました。あらためておめでとうございます。

感想

たくさんの方に参加していただけて、何より無事に終われてよかったです。Clarがほとんどなかったのもよかったです。

期間が普段より長く、ゲームバランスとかを少し心配していましたが、最終日にも多々良い解が出たので結構期間はちょうどよかったと思っています。金曜日がつぶれるのはさすがにあれなので同じ形式でまたやるとしたら土日になりそうではありますが。

改めて、コンテスト開催の場をいただいたyukiさん、Testerのjupiroさん、先駆者のplatinumさん、参加者の皆様に感謝申し上げます。本当にありがとうございました。

*1:参考:爆発物取締罰則(バクハツブツトリシマリバッソク)とは? 意味や使い方 - コトバンク

*2:どれだけ意味があるかはわかりませんが名前は伏せておきます

*3:ただしこの問題は解けてません(え?)

*4:ただしこの問題も解けてません(はい?)

*5:はるく君が破壊する理由も最悪すぎてそこも気に入っております

*6:yukicoderの問題をいい感じに出題する設定

*7:ただ洗練されたものは割とすぐ終わると思ったので気にしないことにしました

*8:あなたが始めた物語ですが!?

*9:writerさん?

*10:なおwriterは下半分…