フレンズさんへのマシュマロ
以下のようなマシュマロが競技プログラミングをするフレンズさん(ここではフレンズさんとします)のマシュマロに届いていて、ちょっと話題になっていました。
このマシュマロの送り主を勝手に救っていきたいと思います。
前提
windows環境であり、ローカルで、自分で書いたコード実行ができる環境であることを前提とします。
また、前提とはしませんがPowershellでコード実行する方法について言及します。
コンテスト中ですので、AHC030のファイルを使用しますが、まったく同じようにAHC040でもローカルテスタを実行できます
問題のreadme
コンテストページから、Windowsのコンパイル済みバイナリをダウンロードして解凍します。このhtmlファイルをブラウザなどで開くと問題のreadmeが開きます。日本語のところを上から順に読んでいきましょう。
readmeの中身
いきなりRust言語が必要と書かれていますが、バイナリをダウンロードした場合は不要です。このへんは確かに不親切ポイントかもです。
入力生成の方法が書かれています。初心者はすでに用意された100個のサンプルで十分だと思うので、スルーします。必要になったら、この記事を読んだ後であれば自力でできるでしょう。
重要なところまで来ました。cargoというのはRust環境のコマンドです。先ほど書いたように、今回バイナリを取得しているためこのコマンドは使用しません。
ではどうするのかというと、一番下に、
Windows用のコンパイル済バイナリを使用する場合は
cargo run -r --bin tester
の部分を./tester.exe
に置き換えて下さい
とありますね、言われた通り書き換えてみましょう。
cargo run -r --bin tester cmd < in.txt > out.txt
./tester.exe cmd < in.txt > out.txt
言われたとおり書き換えました。難しくないですよね?
次に、cmd
, in.txt
, out.txt
についてそれぞれ説明しましょう。
cmd
は書いたコードを実行するときのコマンドです。
例えばあなたがPythonで書いたa.py
というファイルを実行する場合、そのファイルのパスに移動してから
python3 a.py
のように実行しますよね?このコマンド全体で丸ごとcmd
を置き換えます。
./tester.exe python3 a.py < in.txt > out.txt
そうするとこうなります。このコマンドの部分は、言語や環境によって異なるので、ユーザの環境のものを使ってくださいということになっているわけです。決して意地悪でわかりにくく書いているわけではないのです。
また、in.txt
は、入力ファイルのパスを指定します。in
というフォルダに入力サンプルがいっぱい入っていますので、そのなかの一つを指定しましょう。例えばin/0000.txt
とすればよいでしょう。
そうすると、
./tester.exe python3 a.py < in/0000.txt > out.txt
のようになります。
最後にout.txt
についてですが、これは存在しない場合勝手に作られるので、そのままで大丈夫です。
実はまだ油断できません。実は例のところに地味にとても重要なことが書かれています。
Windows で Powershell を使用する場合
上記の<
が使えないため、以下のように実行して下さい。
Windowsでコマンド実行する場合、Powershellを使用する場合が多いと思います。その場合、コマンドで<
という文字が使えず、エラーになります。
その解決方法は書いてありますが、そもそも例という読み飛ばしがちな場所で言及しているうえに、以下のようにというふうに急に雑な説明になっていますね。これはかなりの不親切ポイントです。
要するに、< in/0000.txt
の部分が入力を指定しているので、この部分を消して、代わりに先頭にcat in/0000.txt |
を付けてくれということです。
これを踏まえて先ほどのコードを更新しましょう。
cat in/0000.txt | ./tester.exe python3 a.py > out.txt
これが最終的に実行するべきコードということになります。書いてある通りなんだけどね
このあとはローカルのvisualizerの使い方が書いてありますが、web版で十分だと思うので割愛します。
実際に実行してみる
a.py
というコードを作成し、tools_x86_64-pc-windows-gnu
のフォルダに配置します(画像のように配置にしてください)。この中に提出用コードを記述します。(今回は中に何も書いていないファイルにしています)
Powershellを開きます。スタートメニューなどから開きましょう。
ここをクリックすることで、このフォルダのパスを選択できます。それをコピーして、
cd C:\hoge\hoge\hoge\tools_x86_64-pc-windows-gnu
を実行するとそのフォルダに移動できます。そろそろこういうちょっと抽象的な書き方をされてもわかるようになってきたと思います。
成功すると、PS C:\hoge\hoge\hoge\tools_x86_64-pc-windows-gnu>
のように表示されて、移動できたことがわかります。
そこに先ほどのコードを入力すると...
実行できたようです。コンテスト中ですので敢えて失敗するようにしています
out.txtは先ほどのフォルダに自動で作成されます。
この中身を張り付ければweb版visualizerを利用できます。
最後に
コーディングとかITとかの世界では、こういう謎のドキュメントを解読して、環境の違いに苦しみながら環境構築する能力がわりとデフォで要求されますので、この機に入門するとよいと思います。(難易度的には入門にちょうどいいのではないでしょうか)
途中いろいろなところで不親切だとは書きましたが、いうてこんなもんというか、これでもかなり丁寧で親切なドキュメントのほうだと思います。うまくいかないときは自分で調べるのも重要なリテラシーになります。
また、冒頭のマシュマロのようなヒステリックな態度では解決するものも解決しませんよね。わからないことがあったとしても、それを建設的に解決できるような聞き方を心掛ける必要もあると思います。
以上です