feature image

2020年4月5日 | ブログ記事

競プロ難しいなぁ。せや、バチャコンで練習しよ。【AdC 28日目】

この記事は新歓ブログリレー2020 28日目の記事です。

[クリックしてサブタイトルを入力]

どうも、おはようございます。19のaya_seと申します。普段はアルゴリズム班としてちょっと競プロしたり、サウンド班としてちょっと曲作ったりしてます。サウンド班からは、3月に新歓コンピレーションが公開されていますので、気が向いたときにぜひお聴きください(自分もひょっこり参戦してます)。数日後に新歓コンピのレビュー記事が生まれるという噂もあるので、そちらもお楽しみに。

さて、自分の担当する4/5というこの日…本来なら新学期開始の前日のはずだったのです。1Q頑張りましょう、みたいな記事を書く気満々だったのです。ですが…、ナウいウイルスこと、新型コロナウイルスの影響があり、授業開始がGWに延期になってしまいました。某ロナウイルスは大学もイベントも旅行も奪いやがりますのに今度はブログのネタまで奪いやがり申し上げるなんて。ネタましい……。なんと妬ましいほどに欲深き輩なのでしょうか。許せませんね。

ところで

前述の通り、自分はアルゴリズム班なのでちょっと競プロをしているのですが、いやぁ、競プロって難しいと思いませんか??『わかるー!』ですよねー。わかりますよ、わかります。AtCoderでは週に1回以上のペースでコンテストが開催されますが、正直コンテストに参加するだけではどうしても演習不足になりがちです。始めたての頃はまだ『勉強不足の分は、まあ、有り余る才能でカバーしたいと思っております。』がまかり通る部分もあったのですが、少しレートが上がってくると流石に限界が見えてきました。才能でカバーできないならば、やはりレッスンしないといけませんね。

そんなわけで

レッスンを始めましょう。まずはアルゴリズムを

で勉強……。個人的にはこんなサイトも良さそうだなぁなんて思ったりしてます。


fmfm、なるほど。いやー†完全に理解した†。うーん、これで今日もレート爆上がりホカホカハッピーdayになること間違いナシ!


……とはいかないのが世の常。アルゴリズムの仕組みを理解したつもりになっても結局、問題演習を積まないとなかなか上手くいかないなぁというのが個人的な感想です。普通に過去問を解くのも全然アリではあるのですが、たまには刺激的な(?)レッスンも欲しいと思いませんか?そんな時にオススメできるのが『バチャコン』の存在です。

バチャコンとは

バチャコンとはVirtual Contest、仮想的なコンテストのことです(直訳)。本番ではないが本番さながらの環境でコンテストの練習が可能です。要するにリハーサルですね。バチャコンといっても現在ではAtCoderなら主に2つの方法でバチャコンを開いたり参加したりすることが可能です。

AtCoder公式の機能

最近ではAtCoder公式サイトにバチャコンの機能が追加されました。過去に開催済みのコンテストのページを開くと『バーチャル参加』というボタンがあると思います。これをクリックして開始時間を指定すると、指定した時刻から本番と同じ制限時間でコンテストの問題を解くことができ、順位表も経過時間や自分の解答状況に応じて本番さながらに変化していきます。コンテストの問題セットは本番のセットと全く同じ構成にしかできませんが、何よりも本番のコンテストと全く同じサイトで行えるので、リハーサルにはうってつけです。予定があって参加できなかったコンテストに、数日後自分で取り組むといったケースでも非常に有用です。

AtCoder Problemsの機能

AtCoder公式の機能ではありませんが、AtCoder ProblemsというAtCoderの過去問の難易度や自分がどの問題を解いたかの進捗状況が分かる超有能サイトの更なる機能の1つとしてバチャコンが実装されています。こちらのバチャコンは、誰でも好きな時間に好きな問題構成で立てる(コンテストを作る)ことができ、誰かが立てたバチャコンに他のユーザーも自由に参加することができます。ここでは実際にバチャコンを立ててみましょう。

① AtCoder Problemsにログインする
自分のAtCoderアカウント名でログインする必要があります。

② Virtual Contestsに移動し、Create New Contestをクリック

③ バチャコンの各種設定を行う


Contest Title:コンテストの名称
Description:コンテストの説明です、問題の難易度構成や、誰でも参加自由にしたい場合はその旨を記載するのがおすすめです。
Mode:NormalとLockoutから選択できます。他のユーザーが参加自由なコンテストにしたい場合はNormal、そうでなければLockoutを選択します。
Start Time:コンテストの開始日時
End Time:コンテストの終了日時
Expected Participants:参加が予想されるユーザーをスペース区切りで入力できます。この後の設定で役立ちます。


以下、Problemsでコンテストの問題を設定できます。問題の設定方法は2通りあり、まずSearch Problemsでは問題名を指定してバチャコンに問題を追加できます。もう1つの方法がBacha Gacha。AtCoder Problemsのバチャコンで最も面白い機能であり、コンテストの問題をサイト側が勝手に選んでくれます。色々な設定があるので順に紹介します。

(※以下登場する「Difficulty」はAtCoder Problemsが算出している問題の難易度のことで、その数値によって色分けがなされています。例えばDifficulty1200~1600の問題は水色で表示され、しばしば水Diffの問題、もしくは単に水の問題などと言われます。)

・Exclude experimental difficulty
AtCoderがまだサービスを開始したばかりの頃はまだユーザー数が少なく、Difficultyの算出が不正確な可能性があり、それらの問題を選出対象から除外できます。昔の問題は最近の問題と大きく傾向が異なる場合があるので、傾向の近い最近の問題を解きたい場合に有効です。
・Exclude already solved problems by expected participants
先ほど設定したExpected Participantsに記載したユーザーのうち、誰か1人でもACしたことのある問題を選出対象から除外できます。参加者全員が初見の問題ばかりになるよう設定できる面白い機能ですが、既に過去問を大量に解いているユーザーが含まれていると、選出できる問題が無くなってしまうなどといった問題も発生します。
・Difficulty Adjustment Preset
問題の難易度構成のプリセット(初めから用意されている構成)です。特に気にしなくて大丈夫です。
・Problems1,2,3…
選出する問題数や難易度構成が設定できます。

以上を設定したうえでAddボタンを押すと次のように問題が選出されます。

SetPoint項目では問題の得点が設定でき、より本番のコンテストらしい配点に設定できます。

④ 以上が全て設定出来たら一番下のCreate Contestボタンをクリック。

Virtual ContestsのUpcoming Contestsの一覧にも表示されていれば無事バチャコンの設定終了です。コンテストの設定自体はCreate Contestした後でも変更できます。

バチャコンへの参加方法

ログインした状態でVirtual Contestsに移動、参加したいコンテストの画面に移動してJoinボタンを押すだけで参加できます。開始時間になったら何もしなくてもコンテストが始まり、コンテストで指定された問題をAtCoderで提出するとその結果が自動的に順位表に反映されます。

AtCoder公式ではなく、AtCoder Problemsのバチャコンを利用するメリットは、自分が今最も解けるようにしていかなくてはならない難易度帯の問題に(本番のコンテストに近い形式で)重点的に取り組めることです。例えばレートが水色の人であれば、まずはDifficulty1200(緑)以下の問題を確実に素早く通す練習をする、もしくはDifficulty1200~1600(水)の問題を少し時間は掛かっても通す練習をする、などといった使い方が考えられます。

バチャコンに参加するメリット

普通に過去問を解くだけではなく、バチャコンに参加するメリットって一体何でしょうか?自分が個人的に思うメリットは次の3つです。

・本番に近い環境で緊張感を持って問題に挑める
・制限時間があることで適度に考え続ける練習ができる
・分からなかった問題をそのまま放棄せずにあとで通すようになる

本番に近い環境で緊張感を持って問題に挑める

当然、仮想的なコンテスト(直訳)とだけあって、非常に本番のコンテストに近い環境が得られます。簡単な問題であっても、凡ミスやコーナーケースに嵌ればペナルティが表示されますし、自分以外にも参加者がいれば、順位表で他の人がどれだけ問題を通したかが分かり、それに応じた作戦変更など、現実的な立ち振る舞い方の練習ができます。

制限時間があることで適度に考え続ける練習ができる

普通に問題を解くにあたっては制限時間がありません。じっくり考えること自体はとても良いことではあるのですが、特に、『解法のメドさえ立たないような難しい問題』にあたってしまうと、ついダラダラと考え込んでしまったり(その割に実際には脳が全然動いてなかったりして)、やる気がなくなってツイッターに逃げてしまったり(これは自分だけか…)、結局激しく時間を浪費してしまうことになりがちです。これは逆のパターンもあり、『何もわからんし、さっさと解説見ちゃおう』とか言って、一切自力で考察もしないまま解説ACに走ってしまうことも考えられます。


バチャコンはこの問題を解決します。適度な制限時間が設けられることによって、難しい問題であっても『制限時間までは集中して考えよう、制限時間までに分からなかったら解説を読んで学習しよう』というメリハリが付きます。バチャコンは言うなれば、強制的に時間を区切ってくれるアラームみたいなものですね。

分からなかった問題をそのまま放棄せずにあとで通すようになる

個人的にはこれが結構大きいと思っているのですが、バチャコンで制限時間以内に解けなかった問題をあとで通す癖ができるような気がします。リハーサルとはいえ制限時間以内に解けなかった、つまり本番のコンテストで同じ問題が出たらきっと解けなかっただろう、という事実が重くのしかかるというのもありますし、例えば他の参加者(特に自分とレートが近いような人)が解けたのに自分は解けなかった、というようなことがあればやはり『通さねば(義務感)』という気持ちにもなります。これはただ1人で黙々と問題演習をするだけでは得られない要素かと思います。

おわりに

というわけで、皆さんもぜひバチャコンを駆使して、幸せな競プロライフを送りましょう。
これだけバチャコンについて語っておきながら、自分でバチャコンをやらないのも何だか微妙なので、少なくとも休校が続く4月の間は、毎週月曜日・木曜日の16時~と時間を決めてバチャコンを立てることに決めました。AtCoder Problemsのサイトから誰でも参加できるようにしているので、気が向いたら読者の皆さんもぜひ参加してください。

明日はサウンド班の久石譲こと、kashiwadeさんの記事です。お楽しみに!

……

……

……

お ま け

ここまでバチャコンについて記事を書いてきたわけでありますが、いやぁまぁ正直競プロばっかりやってても飽きますよね(←いや、飽きない人もいるみたいですが…?)。そんなわけで記事の本題とは全く関係ないのですが、ここでは自宅で無限に時間を溶かして広義デジタル創作(諸説)を楽しむことができる、いわゆる『沼ゲー』を皆さんに3つほどご提案させていただきます。

Minecraft

みんな大好きマインクラフト。元祖沼ゲーですね。サバイバルで命がけの狩猟ライフを楽しむもヨシ、工業Modを入れて楽をするために苦労するライフを送るもヨシ、とにかく様々なプレイスタイルがあるのが魅力ですが、個人的にはやっぱりクリエイティブで箱庭プレイをするのが一番好きですし、Minecraftの中では最も底なし沼的なゲームスタイルだと自負しています。
東工大大好き(諸説)なので、ちょっとだけですが以前に東工大の建物を再現したりしました。今度頑張って本館とかも作ってみたいですね(??)。

大岡山北3号館(イノベーション棟)のつもり
東工大附属図書館(チズケ)のつもり(サバイバルモード)

Snowtopia(α版)

こちらは一転して、超無名なゲームです。ざっくり言えば『自分が開拓したスキー場をお客さんが滑走する様子を眺める』ゲームです。もう聞いただけで面白そうなゲームですね。ゲーム画面はこんな感じ。

下のアイコンをクリックするとリフトやコースを設置できます。まだα版なので特に建設費やメンテナンス費などの要素は実装されていないので実質設置し放題&壊し放題なのですが、まぁそのあたりは後々開発されるのでしょう(実際には既に労働者の割り当てシステムが存在するので、リフトに関しては運用できる本数に制限があります)。

このゲームで何よりも楽しいのはやはり自分で作ったスキー場をただぼんやりと眺めたり、滑走しているお客さんを追尾してあたかも自分がスキー場にいるかのような感覚に浸ったりすることができるところです。視点の調節に少し工夫が必要ではありますが、リアルにリフトに乗っているかのような感覚も味わえます。

将来的にはSteam上で販売される予定のようですが、現在は開発途中ということでα版がこのページから無料でダウンロードできます。ぜひ遊んでみてください。

Cities:Skylines

最後にして最大の底無し沼ゲーCities:Skylinesです。こちらももはやMinecraft同様に非常に有名なゲームですが、個人的にはこのゲームはMODやアセットやDLCを本格的に導入して初めて真価を発揮するゲームだと考えていますし、そのような遊び方をしている人は意外に少ないと感じます。ここでは、Cities:Skylinesの基本的な遊び方は知っているという前提で、このゲームの最も底無し沼的なプレイスタイルと言える、箱庭プレイに必須・最適なさまざまなMOD群を紹介します。

以前作った街です(テーマは武蔵小杉のつもりだった)
オリンピック延期になっちゃいましたね~

Real Time

市民の行動を非常にリアルにするMODです。日本の通勤ラッシュを趣味レートさせたい(??)自分としてはもはや無くてはならないMODの1つです。市民が朝起きて出勤して夜帰宅して睡眠するという基本的なライフサイクルのより厳密なシュミレーションはもちろん、週末(Weekend)を設定したり、学校や仕事の開始時刻や終了時刻を設定出来たり、仕事といっても一部は夜勤や連続シフトにできたり、最大の休暇日数や最大残業時間や挙句の果てには朝の絶起割合まで設定できる(正確には時間厳守の厳格さを設定できる)など、致せり尽くせりな機能満載です。

Ploppable RICO

これも箱庭プレイスタイルには無くてはならないMODです。通常のバニラでのゲームプレイでは、一部の施設などを除いてはほぼすべての建物は区画設定をした箇所に自然に建設される(Glowable)のですが、このMODは一般の区画の建物をはじめ、任意のアセットを好きな箇所に好きなだけ配置することを可能にします。これにより、より自分が実現させたい理想の建物配置ができるようになり、街作りの幅が広がります。楽しくなってきましたね。

Move It!

これまたPloppable RICOと合わせて箱庭プレイスタイルには無くてはならないMODで、建設した建物や装飾物など、あらゆる既存の物体を好きなように再配置することを可能にします。いわゆるチートってやつですね。バニラ環境では、基本的に建物は道路沿いにぴったりとくっ付けるようにしか設置することができませんが、このMODを使用すればある程度道路から離して建物を設置したり、角度を傾けて設置したりすることができます。他にも、設置したが高低差などの影響で少し見栄えの悪い配置になってしまった建物の高さや位置を微調整するなど、とにかく細かい調節が非常にやりやすくなります。夢が広がりますね。

Prop & Tree Anarchy

こちらもやはり箱庭プレイスタイルには無くてはならないMODです。バニラ環境だと既に何かが建設された場所に新しく道路や線路を敷いたりすることは出来ませんが、このMODの機能を有効にすればそれらの干渉を全て無視することができます。干渉を無視した結果とんでもない見た目になることも多々ありますが、その場合は前述のMove It!を利用して再配置すればよく、『ひとまず物を設置したい』という場合にも非常に有用です。他にも、バニラ環境では道路の交差点での進入角度に制限があったり(道路と道路の間の角度があまりに小さくすることができない)、道路のカーブの急さに制限があったりしますが、このMODではそれらの制限も全て無視することができます。どこまでも広がるCities:Skylinesの世界。

他にも箱庭市長ライフを魅力的にしてくれるMOD群は色々とありますが、ひとまず最低限これは、というものをピックアップしたつもりです。皆さんもぜひこれを参考にして無限に深い底無し沼の世界にどうぞ嵌ってください。

おわりに(真)

おまけの方が長いって??まぁそんなこともあるよね。

aya_se icon
この記事を書いた人
aya_se

サウンドや競プロをやっています。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年7月13日
アルゴリズム班はやとき王選手権「競(けい)プロ」を開催しました!
abap34 icon abap34
2021年4月18日
ベズー係数とN項の拡張ユークリッドの互除法
0214sh7 icon 0214sh7
2020年5月15日
【新歓ゲーム制作特集 第2弾】Inverse製作秘話
Saltn icon Saltn
2023年4月29日
CPCTF2023 PPC作問陣 Writeup
noya2 icon noya2
2023年4月21日
CPCTFを開催します
noc7t icon noc7t
2022年8月30日
【競プロer向け】母関数を習得しよう!
tatyam icon tatyam
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記