AtCorderという競技プログラミングサービスがある。設問に対して各種の言語で回答を書くと合否判定されるものなのだけれども、最近Scratchで書いたロジックをC++に変換してAtCorderの解答欄に入力できるという面白ツールがリリースされていたので、これを利用していろいろ遊んでみた。
- Scratcher's AtCoder の紹介 - Qiita
- Scratch3.0を使ってAtCoderで競技プログラミングを楽しむ - Qiita
- Scratcher's AtCoder - Chrome Web Store
やってみて気づいたこと
はじめのはじめ
基本的には次のページの通りだけれども
Scratchの全てのブロックのうち何が利用できるかがわからず、途中で対応していないイベントブロックを使おうとしたりして、少し回り道をしてしまった。
利用できるブロックは以下にあるので、軽く目を通しておくとよさそう。
入力処理について
こちらのページの説明では
Scratch では標準入出力は使えないので、標準入力の代わりに「〜と聞いて待つ」ブロック(一行の文字列入力欄が現れます)、標準出力の代わりに「〜と言う」ブロック(指定された文字列をネコがしゃべります2)を使っています。
Scratcher's AtCoder の紹介 - Qiita
とあったのだけど、この標準入力は改行までを受け付けるのではないという事に最初は気づかず少しハマってしまった。
例えば練習問題のPracticeAだと
入力は以下の形式で与えられる。
a
b c
s
とあったので「a」「b c」「s」が入力されると思ったら違った。普通に4回に分けて入力されるようだ(つまり2行目のb cは別々に入力される)。
よく見たら以下の記事で細かく説明されてた。
入力は調べるの「a と聞いて待つ」のように使う (改行とスペースで分けて読まれる)
Scratch3.0を使ってAtCoderで競技プログラミングを楽しむ - Qiita
なるほど〜
テストをやりやすくする工夫
AtCorderに提出するためには上記の通り入力を受け取るようにする必要があるのだけど、コードをテスト、デバッグする際にいちいちキーボードから入力するのは面倒。
というわけで試行錯誤した結果、次のような形にすると良さそうということがわかった。
- 初期化、主処理はブロック化する
- 提出用のスタートイベント(緑の旗)とは別にテスト用のイベントを作って、テスト時はコードでデータを入力する
- テストパターン(問題で示される入力例)を最初にコメント文にしておく
具体的にはこんなイメージ。
https://scratch.mit.edu/projects/281501288/editor/
便利関数が使えない
たとえばSortなどもScratchでは手組みする必要があるのでなかなか手強い
その他の感想など
- まずはAtCorder Beginners Selectionを正解例を見ないで自分で解いてみた。
- その後AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiitaの解説をチェック。勉強になるな〜
- 今後はもう少し過去問に取り組んでみる予定。
- いつかはコンテストにも挑戦してみたい。
頭の体操になって面白い。ブラウザだけで完結するのも手軽で良い。

- 作者: 阿部和広
- 出版社/メーカー: 日経BP社
- 発売日: 2013/07/25
- メディア: 単行本
- この商品を含むブログ (7件) を見る

- 作者: 倉本大資,阿部和広,酒匂寛
- 出版社/メーカー: 日経BP社
- 発売日: 2016/05/12
- メディア: 単行本
- この商品を含むブログを見る

- 作者: 中植正剛,太田和志,鴨谷真知子
- 出版社/メーカー: 日経BP社
- 発売日: 2015/11/21
- メディア: 単行本
- この商品を含むブログを見る