勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

Scratch3.0でAtCorderに参加できるようになったのでいろいろやってみた

AtCorderという競技プログラミングサービスがある。設問に対して各種の言語で回答を書くと合否判定されるものなのだけれども、最近Scratchで書いたロジックをC++に変換してAtCorderの解答欄に入力できるという面白ツールがリリースされていたので、これを利用していろいろ遊んでみた。

やってみて気づいたこと

はじめのはじめ

基本的には次のページの通りだけれども

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に提出するためには上記の通り入力を受け取るようにする必要があるのだけど、コードをテスト、デバッグする際にいちいちキーボードから入力するのは面倒。
というわけで試行錯誤した結果、次のような形にすると良さそうということがわかった。

  • 初期化、主処理はブロック化する
  • 提出用のスタートイベント(緑の旗)とは別にテスト用のイベントを作って、テスト時はコードでデータを入力する
  • テストパターン(問題で示される入力例)を最初にコメント文にしておく

具体的にはこんなイメージ。
f:id:kent4989:20190124233818p:plain
https://scratch.mit.edu/projects/281501288/editor/

便利関数が使えない

たとえばSortなどもScratchでは手組みする必要があるのでなかなか手強い

その他の感想など

頭の体操になって面白い。ブラウザだけで完結するのも手軽で良い。

小学生からはじめるわくわくプログラミング

小学生からはじめるわくわくプログラミング

小学生からはじめるわくわくプログラミング2

小学生からはじめるわくわくプログラミング2

Scratchで学ぶ プログラミングとアルゴリズムの基本

Scratchで学ぶ プログラミングとアルゴリズムの基本