FLYING

/* TODO: 気の利いた説明を書く */

JOI予選で使ったやつ

実行して問題番号を入力すると、ソースをコンパイルして出力ファイルを生成するプログラム。ただし、問題のソースを 1.cpp, 2.cpp, ... というファイル名にしておく必要がある。別にシェルスクリプトでもいいじゃんという脳内意見もあったが、シェルスクリプトの文法を知らなかったのでこんな感じに。

#include <iostream>
#include <cstring>
#define NINPUT 5	// 入力ファイル数
#define TYPE "cpp"	// ソースの拡張子
using namespace std;

int main()
{
	char cpp[128], exec[128];
	int num;
	
	cout << "問題番号を入力: ";
	cin >> num;
	
	cout << "コンパイルちう..." << endl;
	sprintf(cpp, "g++ %d.%s -o %d", num, TYPE, num);
	system(cpp);
	
	cout << "実行ちう..." << endl;
	for(int i = 1; i <= NINPUT; i++){
		cout << "入力" << i << "を実行中..." << endl;
		sprintf(exec, "./%d < 2008-yo-t%d-in%d.txt > out%d-%d.txt",
			num, num, i, num, i);
		system(exec);
	}
	
	cout << "done." << endl;
	return 0;
}

単に入出力を手動でリダイレクトするのが面倒だっただけ。たぶん他の参加者もこういうの作ってたと思うんだけど、どうなんでしょう。