示例#1
0
文件: f.cpp 项目: xzj1997/ACM2016
int runprog(int first, int last, int level)
{
	int ans = 0;
	for (int i = first; i < last; ++i) {
		if (prog[i].ilevel > level)
			continue;
		else if (prog[i].ilevel < level)
			return ans;
		if (prog[i].type == Stmt::STMT_LAG) {
			//std::cout << "LAG " << i << std::endl;
			++ans;
			continue;
		}
		int for_to = 0;
		if (prog[i].for_is_var) {
			for_to = var[prog[i].for_var];
		} else {
			for_to = prog[i].for_num;
		}
		int& looper = var[prog[i].looper];
		for (looper = 0; looper < for_to; ++looper) {
			//std::cout << (char) (prog[i].looper + 'a') << ' ' << looper << std::endl;
			ans += runprog(i + 1, last, level + 1);
		}
	}
	return ans;
}
示例#2
0
// entry point into program
int main(int argc, char *argv[])
{
  int x;
  program *pgm;
  FILE *fp;

  signal(SIGFPE, fpe_handler);
  signal(SIGINT, brk_handler); 

  gprog = SafeMalloc(sizeof(program));
  storageinit(gprog);  

  envinfo.argc = argc;
  for (x=0; x<argc; x++) envinfo.argv[x] = argv[x];

  if ((fp = fopen("LOGIN", "rb")) == NULL) 
    printf("ERROR: Could not open login script\n");
  else {
    fclose(fp);
    pgm = SafeMalloc(sizeof(program));
    envinit();
    loadall(pgm, "LOGIN");
    runprog(pgm, 1);
    GC_free(pgm);
  }

  printf("\x1B[11m");
  rl_inhibit_completion = 1;
  printf("\n\x1B[10mREADY\n"); 
  setjmp(mark);

  do {
     stackinit();
     gprog->nextprog = 0;
     gprog->prevprog = 0;
     input = readline(">");
     prog = input;
     if (*input) { 
       add_history(input); 
       encode_rpn(); 
     }
  } while (1);

  return 0;
}
示例#3
0
文件: f.cpp 项目: xzj1997/ACM2016
int main()
{
	std::string s;
	while (std::getline(std::cin, s)) {
		Stmt st;
		int i = 0;
		while (s[i] == ' ') ++i;
		st.ilevel = i / 4;
		if (s[i] == 'l')
			st.type = Stmt::STMT_LAG;
		else {
			st.type = Stmt::STMT_FOR;
			char ch = s[s.size() - 3];
			if (std::isdigit(ch)) {
				st.for_is_var = false;
				st.for_num = ch - '0';
			} else {
				st.for_is_var = true;
				st.for_var = ch - 'a';
			}
			st.looper = s[i + 4] - 'a';
		}
		prog.push_back(st);
	}
	for (int i = 0; i <= 6; ++i) {
		var['n' - 'a'] = i;
		runresult[i] = runprog(0, prog.size(), 0);
		//std::cout << runresult[i] << std::endl;
	}

	for(int i = 0; i <= 6; ++i){
		aaaa tmp(1, 1);
		for(int j = 0; j <= 6; ++j){
			a[i+1][j+1] = tmp;
			tmp = tmp * aaaa(i, 1);
		}
		a[i+1][0] = aaaa(runresult[i], 1);
	}
	for(int i = 1; i <= 7; ++i){
		int tmp = -1;

		for(int j = i; j <= 7; ++j)
			if(a[j][i].a != 0 && tmp == -1) tmp = j;
		if(i != tmp){
			for(int j = 0; j <= 7; ++j) std::swap(a[i][j], a[tmp][j]);
		}
		//std::cout << a[i][i].a << std::endl;
#if 0
		for(int j = 1; j <= 3; ++j) {
			for (int k = 0; k <= 3; ++k) {
				std::cout << '(' << a[j][k].a << '/' << a[j][k].b << ") ";
			}
			std::cout << std::endl;
		}
		std::cout << "====" << std::endl;
#endif

		for(int j = i + 1; j <= 7; ++j){
			aaaa t = a[j][i] / a[i][i];
			for(int k = 0; k <= 7; ++k){
				a[j][k] = a[j][k] - (a[i][k] * t);
			}
			//std::cout << i << ' ' << j << ' ' << t.a << '/' << t.b << std::endl;
			//std::cout << a[1][0].a << '/' << a[1][0].b << std::endl;
		}
#if 0
		for(int j = 1; j <= 3; ++j) {
			for (int k = 0; k <= 3; ++k) {
				std::cout << '(' << a[j][k].a << '/' << a[j][k].b << ") ";
			}
			std::cout << std::endl;
		}
		std::cout << "====" << std::endl;
#endif
	}
	for(int i = 7; i >= 1; --i){
		for(int j = i + 1; j <= 7; ++j)
			a[i][0] = a[i][0] - a[i][j] * a[j][0];
		a[i][0] = a[i][0] / a[i][i];
	}
	bool first = true;
	for(int i = 1; i <= 7; ++i) {
		if (a[i][0].a == 0)
			continue;
		if (!first) {
			std::cout << " + ";
		} else {
			first = false;
		}

		for (int j = 0; j < i - 1; ++j) {
			std::cout << "n * ";
		}
		std::cout << a[i][0].a << "/" << a[i][0].b;
	}
	std::cout << std::endl;
	
	return 0;
}