Beyond the Void
BYVoid
Ubuntu 一週小記
本文正體字版由OpenCC轉換

爲了適應NOI比賽惡劣的操作環境,從上週起我就開始使用Ubuntu,編程用Vim,G++,DDD。不要向我推薦Emacs,我討厭這東西。儘量減少調試,不要依賴於調試器,要靠自己認真細心,和靜態查錯。

畢竟Windows用慣了,使用Linux真的有許多不方便的地方,太多了。最顯著的問題是輸入法,Google拼音輸入法爲什麼沒有For Linux版?就連Chrome也沒有Linux版,還好Firefox和Opera都是不錯的。播放音頻和視頻支持的格式很少,Real player還不錯。

沒有批量更名的軟件,對付大量的測試數據很麻煩。大小寫區分,換行符不同,令人棘手。還好換行符的問題可以用dos2unix命令解決,批量更名就麻煩了,我承認我不會shell編程。

我用C++寫了兩個方便的工具,測試數據改名程序和測試數據答案文件生成程序。 測試數據改名程序用法 ./ren PROB#.IN prob#.in 1 10 把PROB1.IN … PROB10.IN 改成 prob1.in … prob10.in 代碼如下

#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int i,S,T;
char Ti[100],To[100];
char *Fi,*Fo;
 
void rm(char *t,char *p,int k)
{
	for (;*t;t++)
	{
		if (*t!='#')
		{
			*p=*t;
			p++;
		}
		else
		{
			sprintf(p,"%d",k);
			while (*p) p++;
		}
	}
	*p=0;
}
 
int main(int argc,char **argv)
{
	int suc;
	Fi=argv[1];
	Fo=argv[2];
	sscanf(argv[3],"%d",&S);
	sscanf(argv[4],"%d",&T);
	printf("\nData Renamer. Author: CmYkRgB123 \nFrom:%s\nTo:%s\nRange:[%d,%d] \n\n",Fi,Fo,S,T);
	for (i=S;i<=T;i++)
	{
		rm(Fi,Ti,i);
		rm(Fo,To,i);
		printf("Rename from %s to %s ...",Ti,To);
		suc=rename(Ti,To);
		if (suc==0)
			printf("Done.\n");
		else
			printf("Failed.\n");
	}
	printf("\n");
	return 0;
}

測試數據答案文件生成程序用法 ./datacreator prob 1 10 根據prob1.in … prob10.in,調用./prob,生成prob1.ans … prob10.ans

#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc,char **argv)
{
	int i,S,T;
	char FI[100],FO[100],ti[100],to[100],Run[100];
	char *name;
	name=argv[1];
	sprintf(Run,"./%s",name);
	sscanf(argv[2],"%d",&S);
	sscanf(argv[3],"%d",&T);
	printf("\nData Creator. Author: CmYkRgB123 \nProblem Name:%s\nRange:[%d,%d] \n\n",name,S,T);
	for (i=S;i<=T;i++)
	{
		printf("Creating %s #%d ...",name,i);
		sprintf(FI,"%s%d.in",name,i);
		sprintf(ti,"%s.in",name);
		sprintf(to,"%s.out",name);
		sprintf(FO,"%s%d.ans",name,i);
		rename(FI,ti);
		system(Run);
		rename(ti,FI);
		rename(to,FO);
		printf(" Done.\n");
	}
	printf("\n");
	return 0;
}

不過也是有不少好處的,起碼我不能玩遊戲了,減少時間的浪費。


上次修改時間 2017-02-03

相關日誌