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

Slides:



Advertisements
Similar presentations
プログラミング演習( 2 組) 第 9 回
Advertisements

7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
配列(2) 第10回目 [6月22日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)課題
ループで実行する文が一つならこれでもOK
4章 制御の流れ-3.
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
C言語 配列 2016年 吉田研究室.
第13回 プログラミングⅡ 第13回
第8回 プログラミングⅡ 第8回
第6章 2重ループ&配列 2重ループと配列をやります.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
第10回 プログラミングⅡ 第10回
第7回 条件による繰り返し.
C言語講座 第3回 ポインタ、配列.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
C言語講習 第0章 Hello, world!.
第10回関数 Ⅱ (ローカル変数とスコープ).
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
知能情報工学演習I 第12回(後半第6回) 課題の回答
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第11回 プログラミングⅡ 第11回
動的データ依存関係解析を用いた Javaプログラムスライス手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
高度プログラミング演習 (05).
プログラムの制御構造 配列・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
バイトコードを単位とするJavaスライスシステムの試作
プログラミング 4 探索と計算量.
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
プログラムの基本構造と 構造化チャート(PAD)
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
プログラミング序論演習.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
オープンソースソフトウェアに対する コーディングパターン分析の適用
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
プログラミング基礎演習 第4回.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
skill-net(MILESTONE CAI,笈川他,1982)[Fortranの課題選択など]
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング序論演習.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
プログラミング 2 静的変数.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

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

プログラミングコンテストとは(1/5) 問題読解 制約 問題文 サンプル入力・出力 [サンプル: 5 1 3 4] (実行時間・メモリ) 問題文 (概要:数字「2」「3」「5」「6」の個数が与えられるので,合計が最大になるように「32」と「256」を構成してください) サンプル入力・出力 [サンプル: 5 1 3 4] {2, 2, 2, 2, 2, 3, 5, 5, 5, 6, 6, 6, 6} → 256 + 256 + 256 + 32 = 800 が最大

プログラミングコンテストとは(2/5) コーディング

プログラミングコンテストとは(3/5) テスト~修正 サンプルを用いてテスト 結果を確認 (今回は間違い)

プログラミングコンテストとは(4/5) 修正~提出 修正 (今回は, ×: max ○: min) 提出! 再度テストしたら...

プログラミングコンテストとは(5/5) 問題に正答すると... 順位に影響 (解けた問題の難易度・解けた速さ)

その他のコンテスト概要 アルゴリズムに関する問題を複数の参加者が同じ時間に解く 正解問題数,時間に応じて順位が決まる 順位によりレーティングが変動 成績開示 レーティング変動 順位 A B C 計 1 〇 × 2 - … 回答提出 問題・制約 フィードバック コンテスト終了後 コンテストシステム

コンテストの規模や頻度 開催頻度 月に2~3回程度 参加者 毎回7000人程度 国籍 全世界から参加 本研究で利用するCodeforcesに限定した場合 開催頻度 月に2~3回程度 参加者 毎回7000人程度 国籍 全世界から参加 アクティブユーザー数※:    約30,000人 ※過去6カ月以内に1度でもコンテストに参加したユーザーの数

レーティングシステム レーティング コンテストの成績に応じて変動する値 レーティングが高いほど,コンテストでの期待順位が高い ある参加者のレーティング遷移 本研究では,レーティングが高い参加者(例:上位10%程度)を,上級者と定義 [1] Arpad E Elo, Sam Sloan: The Rating of Chess Players, Past and Present, Ishi Press, 2008.

研究内容 研究内容 学習者が上級者の技術を理解し, 自身のプログラミング学習に役立てる 研究目的 上級者に共通する特徴を調査 上級者のソースコード 上級者の修正履歴 研究内容 #include <bits/stdc++.h> using namespace std; int a[1234567]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); } sort(a, a + n); printf("%d\n", a[n / 2]); return 0; 上級者に共通する特徴を調査 上級者の特徴をもとに 上級者 学習者が上級者の技術を理解し, 自身のプログラミング学習に役立てる 中級者 研究目的 注:プログラミングコンテストのレーティングとプログラミング技術に   一定の相関があることを仮定(要検証) 初級者

Research Question 上級者には,どの構文要素が使用・変更されやすいか 上級者が行う修正変更の量はどの程度か

RQ1 上級者が,そうでない者と比較して,構文要素の利用に差があるかを調査する 上級者が,どの位置の構文要素を変更するかを調査する 構文要素利用の例 期待する結果例 if, for, while 等の   制御文の利用回数 変数名の扱い 各演算子の利用回数 上級者は,条件分岐を簡潔に記述するためif文が少ない

RQ1に向けたソースコード長分析 ソースコードの分析を行う前段階として,ソースコードのサイズを調査 平均は約1.2KB,最大約65KB 分析を行うには十分なサイズ ソースコード長度数分布

RQ2 上級者が,プログラムにどの程度の量の修正変更を行うかを調査する 期待する結果例 上級者はそうでない者と比較して,修正量が少ない  - 上級者:修正すべき箇所を理解して修正を行う  - 初級者:修正すべき箇所の特定に慣れていない int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); } calcData(n, a); int calcData(int n, int* a){ for (int i = 1; i < n; i++) { a[i] += a[i – 1]; int main() { int n; scanf("%d", &n); for (int i = 0; i <= n; i++) { scanf("%d", a + i); } 量:少ない変更 量:多い変更

まとめ 目的 プログラミングコンテストを利用し,上級者に共通する特徴を抽出する 方針 有効な特徴量を調査するため,RQを設定し,それに向けて統計を取っている 現状 データベースの構築と,一部の統計処理が完了している