プログラミングコンテストシステムへの提出履歴データとその分析
堤 祥吾1

楊 欣1

崔 恩瀞2

井上 克郎1

概要：本論文では，プログラミングコンテストシステムから参加者の提出履歴を取得して構築できるデータセットについて紹介する．また，本データセットを利用してプログラム特徴分析を行う方針を述べる．
キーワード：プログラミングコンテスト, Codeforces, データセット

1. プログラミングコンテスト

名前AU

提出履歴API

Codeforces

29927

○

○

この章では，本データセットの作成のために参照するプ

Topcoder

3675

△*5

○

ログラミングコンテスト [4] について説明する．プログラ

CodeChef*612129*7○×

表 1 プログラミングコンテストサービスの特徴*4

ミングコンテストには複数の種類があるが，本論文ではアルゴリズムに関する問題を解く種類のコンテストについて述べる．

1.2 プログラミングコンテスト

以下では，プログラミングコンテストに用いられるオン

プログラミングコンテストは，OJS 上で複数の参加者がラインジャッジシステム (OJS) とそれを用いたプログラミ同じ問題セットを解く方式で行われる．正解問題数や回答

ングコンテストについて説明する．

時間に応じて参加者の順位が決定する．順位に応じて参加

1.1 オンラインジャッジシステム (OJS)なっている．

者の rating[2] が変動し，参加者の熟練度がわかるようにプログラミングコンテストにおいて，その採点に利用されているオンラインジャッジシステム (以下 OJS) につい

2. 作成するデータセットの概要て説明する．OJS は，利用者に問題を提示し，利用者から2.1 データセットを構築するために利用するサービス受け取った回答の正誤を通知するシステムである．一例とプログラミングコンテストサービスは複数あり，国内外して，国内で代表される AIZU ONLINE JUDGE*1 ，アメでよく利用されているものの一部を表 1 にまとめた．表のリカの Topcoder*2 が存在する．

各項目について説明する．
「AU」は過去 6 ヶ月以内に 1 度OJS は問題として，問題文，サンプルテストケース，実でもコンテストに参加したことがあるユーザー (アクティ

行時間やメモリ制限等の実行上の制約を与える．利用者はブユーザー) の総数を表す．「提出履歴」は，提出された制約を満たすプログラムを作成し，そのソースコードをシソースコードにアクセス可能かを表す．「API」は，主にステムに提出する．システムは提出ソースコードをコンパ

ユーザーや提出履歴の取得に用いる API が存在するかど

イルし，予め用意されている複数のテストケースを実行すうかを表す．

る．実行後，テストケースを通過すれば正解を，間違った

本データセットを構築するにあたっては，大手プログラ出力や実行制限を違反した場合はその旨を利用者に通知

ミングコンテストサービスである Codeforces を利用する．

する．

選定理由としては，他のサービスと比較して，アクティブ

1

2

*1
*2

大阪大学
Osaka Uniersity
奈良先端科学技術大学院大学
Nara Institute of Science and Technology
http://judge.u-aizu.ac.jp/onlinejudge/
https://www.topcoder.com/

ユーザー (以下 AU) が多いこと，提出履歴が公開され，アクセスしやすいこと，API の有無が挙げられる．
*5
*6
*7

各問題に対する最終提出のみ閲覧可能
https://www.codechef.com/
過去 6 ヶ月以内に 1 度でも提出したことがあるユーザー数

2.2 データセットに含まれるデータデータベース上に構築した本データセットの内容を表 2に示す．Codeforces の AU のうち，3000 人をサンプリングし「ユーザー情報」テーブルに格納した．また，サンプ
ルユーザーが過去 6 ヶ月以内に提出したソースコードを「ソースコード情報」のテーブルに格納した．
「ユーザー情報」に含まれる情報のうち，「最大 rating」
は過去に到達したことがある rating の最大値を，「ソースコード数」は過去 6 ヶ月の間に提出したソースコード数を表している．
「ソースコード情報」に含まれる情報のうち，「問題 ID」は提出ソースコードに対応する問題番号を，「提出結果」は問題に正答したソースコードかどうかを表している．

3. 分析計画
3.1 分析の目的
プログラミング上級者の特徴を発見することは，学習者が上級者の持つプログラミング技術を理解し，自身の能力向上に役立てることができるという観点から教育上有用である．また，プログラミングコンテストにおいては，能力を計測する定量的尺度の 1 つとして rating が用いられており，参加者の能力を比較することが容易である．そこで，rating が高い参加者共通の特徴を抽出することにより，学習者や教育者に対して有用な結果を得ることを分析の目的とする．

3.2 分析の方針

2.3 統計情報
図 1 は，データセット中のソースコード長の度数分布を表す．縦軸はソースコード数，横軸は長さ (単位は byte)である．提出ソースコード長の平均は 1256byte であった．
本データセットに含まれるソースコードは，開発で作成されるソースコードより短いことがわかる．
図 2 は，データセット中の修正提出数の度数分布を表している．ここで修正提出数とは，ある同一の問題に対して，最初の正解までに提出した不正解提出の数と定義する．このグラフでは，縦軸を提出数，横軸を修正提出数とする．
提出の多くは 1 度目で正解しており，修正の増加とともに分析の方針として，提出時間や提出回数，rating が，ソースコードの特徴とどのような関連があるかを調べることとする．ソースコードの特徴量としては，ソースコードの長さやコードクローン [1]，コードスメル [3] などが考えられる．またプログラミングコンテストにおいては自作データ構造ライブラリやマクロの多用等の特有の特徴も存在するため，それらを考慮した特徴量を扱う必要がある．
参考文献
[1]

分布が減少している．

[2]
テーブル種別

データ数

内容

ユーザー情報3000

ユーザー名，rating，

ソースコード情報

394521問題 ID，プログラミング言語，[3]

最大 rating，ソースコード数
提出者，提出結果, ファイルパス名
表 2

[4]

Ira D Baxter, Andrew Yahin, Leonardo Moura, MarceloSant’Anna, and Lorraine Bier. Clone detection using abstract syntax trees. ICSM ’98 Proceedings of the International Conference on Software Maintenance, p. 368,
1998.
Open
codeforces
ratingsystem,
2015.
http://codeforces.com/blog/entry/20762.
Martin Fowler, Kent Beck, John Brant, William Opdyke,and Don Roberts. Refactoring:Improving the Design ofExisting Code. Addison Wesley, 1999.
秋葉拓哉, 岩田陽一, 北川宜稔. プログラミングコンテスト
チャレンジブック. マイナビ出版, 2010.

データセットの内容

60000

14000050000

120000100000

40000

80000

30000

60000

20000
40000
10000
20000

0
400
800
1200
1600
2000
2400
2800
3200
3600
4000
4400
4800
5200
5600
6000
6400
6800
7200
7600
8000
8400
8800
9200
9600

0

図 1

提出ソースコード長の分布00

123456789

図 2 修正提出数の分布

10 11 12 13 14 15