以前にScratchでAtCorderする方法を記事に書いた。
その後AtCorderの過去問をScratchで解きまくってみたのだけれども、実行時間制限が厳しい問題をクリアできなくなってきた。Scratchでは例えばソート関数などが提供されていないのでアルゴリズムを手組みせざるをえないのだけれども、高速なアルゴリズムを組むのはしんどい。
というわけでPythonに浮気した。しかし、ローカル開発環境を構築するのは面倒だ。そこで、まるっと使いやすいサービスを探していたところ、Google Colaboratoryがよかったというのが本記事の内容。
Google Colaboratoryとは
このあたりからどうぞ。GoogleがホストしているJupyterですね。
類似のオンライン実行環境としては、国内では某転職斡旋業者のサービスもあるようだが、私はなんとなく避けている。なんとなく。
Google ColaboratoryでAtCorder
基本的にはGoogle Colab上でコーディングとテストを実施して、完成したらAtCorderのフォームから提出するという流れ。
特に工夫をしないでも
- Google Colab上で、テストデータをインプットとするコードを書く
- サンプルデータで正解になるか確認する
- 問題が無さそうであれば、AtCorderに提出する用のI/Oを追加する
- 提出する
という流れでAtCorderに参加できるが、最後のI/Oの追加あたりが面倒だ。
そこで、以下のようなテンプレートコードを考えた。これであればColab上で開発完了したら、そのままAtCorderへも提出できる。
def main(): if 'get_ipython' not in globals(): # 以下のコードはAtCorder提出時のみに実行される。問題の種類に応じてinputメソッドを準備する N = int(input()) # AtCorderでよくある入力形式 # A, B, C = input().split() # b = [int(i) for i in input().split()] 横持ち # S = [input() for _ in range(N)] 縦持ち/行数N # t = [0] * N ti xi yi 縦持ち/行数N # x = [0] * N # y = [0] * N # for i in range(N): # t[i], x[i], y[i] = map(int, input().split()) else: # 以下のコードはColab上でのみ実行される。テスト用の入力データを書いておく N = 1 # 以下にコード本体を書く print(N) main()
例えば、AtCorderサンプル問題「practice_1」の回答は以下になる。
def main(): if 'get_ipython' not in globals(): #以下のコードはAtCorder提出時のみに実行される。問題の種類に応じてinputメソッドを準備する a = int(input()) b,c = map(int,input().split()) s = input() else: #以下のコードはColab上でのみ実行される。テスト用の入力データを書いておく a,b,c = 1,2,3 s = "test" # 以下にコード本体を書く print("{} {}".format(a+b+c, s)) main()
参考リンク
![プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える? プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?](https://images-fe.ssl-images-amazon.com/images/I/41oruV%2BaJIL._SL160_.jpg)
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?
- 作者: 秋葉拓哉,岩田陽一,北川宜稔
- 出版社/メーカー: マイナビ出版
- 発売日: 2012/01/28
- メディア: Kindle版
- この商品を含むブログを見る

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
- 作者: 渡部有隆
- 出版社/メーカー: マイナビ出版
- 発売日: 2015/01/30
- メディア: Kindle版
- この商品を含むブログを見る