Ejemplo n.º 1
0
void setUpBoard(){
  xt_par0(XT_CLEAR_SCREEN);
  printscores();
  xt_par2(XT_SET_ROW_COL_POS,row=1,col=1);
  FILE *fp;
  fp = fopen("pacman.txt", "r");
  int i;
  
  for (i = 0; i < 25; i++){
    char line[25];
    (fgets(line, 25, fp));
    strcpy(data[i], line);
    printf("%s",data[i]);
  }
  fclose(fp);
  xt_par2(XT_SET_ROW_COL_POS, row=19, col=12);
  putchar('<');
  xt_par2(XT_SET_ROW_COL_POS, row=19, col=12);
}
Ejemplo n.º 2
0
void play(){
  setUpBoard();
  numMoves = 0;
  pelletsLeft = 194;
  printscores();

  //cursor pos is data[row-1][col-1]
  while (1){
    while ((c = getkey()) == KEY_NOTHING);
    if (c == KEY_RIGHT){
      if (data[row-1][col] == '#')
	;
      else{
	numMoves++;
	putchar(' ');
	data[row-1][col-1] = ' ';

	//special middle area
	if (row == 12 && col == 23)
	  xt_par2(XT_SET_ROW_COL_POS, row=12, col=1);

	else
	  xt_par2(XT_SET_ROW_COL_POS, row, ++col);
	if (data[row-1][col-1] == '*')
	  pelletsLeft--;
	putchar('<');
	printscores();
	if (pelletsLeft == 0){
	  endGame();	    
	  break;
	}
      }
    }
    else if (c == KEY_LEFT){
      if (data[row-1][col-2] == '#')
	;
      
      else{
	numMoves++;
	putchar(' ');
	data[row-1][col-1] = ' ';

	//special middle area
	if (row == 12 && col == 1)
	    xt_par2(XT_SET_ROW_COL_POS, row=12, col=23);

	else
	  xt_par2(XT_SET_ROW_COL_POS, row, --col);
	if (data[row-1][col-1] == '*')
	  pelletsLeft--;
	putchar('>');
	printscores();
	if (pelletsLeft == 0){
	  endGame();	    
	  break;
	}
      }
    }
    else if (c == KEY_UP){
      if (data[row-2][col-1] == '#')
	;
      else{
	numMoves++;
	putchar(' ');
	data[row-1][col-1] = ' ';
	xt_par2(XT_SET_ROW_COL_POS, --row, col);
	if (data[row-1][col-1] == '*')
	  pelletsLeft--;
	putchar('V');
	printscores();
	if (pelletsLeft == 0){
	  endGame();	    
	  break;
	}
      }
    }
    else if (c == KEY_DOWN){
      if (data[row][col-1] == '#')
	;
      else{
	numMoves++;
	putchar(' ');
	data[row-1][col-1] = ' ';
	xt_par2(XT_SET_ROW_COL_POS, ++row, col);
	if (data[row-1][col-1] == '*')
	  pelletsLeft--;
	putchar('A');
	printscores();
	if (pelletsLeft == 0){
	  endGame();	    
	  break;
	}
      }
    }
    if(c == KEY_F3){
      play();
      break;
    }
    if(c == KEY_F2)break;
  }	
    getkey_terminate();
    xt_par0(XT_CLEAR_SCREEN);
}
Ejemplo n.º 3
0
int main(int argc, char* argv[]) {
    std::cerr << "CHAR_BIT: " << CHAR_BIT << " sizeof(unsigned int): " << sizeof(unsigned int) << " total: " << (CHAR_BIT * sizeof(unsigned int)) << std::endl;
    unsigned int solution[64] = {
        /* S-1 ****/
        // table S1 for DES, as published in biham, seems to be score 14 
        //14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
        // flip x
        //15, 4, 12, 1, 8, 14, 2, 8, 4, 13, 9, 6, 1, 2, 7, 11, 5, 15, 11, 12, 3, 9, 14, 7, 10, 3, 0, 10, 6, 5, 13, 0, 0, 14, 15, 4, 7, 13, 4, 1, 14, 2, 2, 15, 13, 11, 1, 8, 10, 3, 6, 10, 12, 6, 11, 12, 9, 5, 5, 9, 3, 0, 8, 7
        // flip y
        //7, 8, 0, 3, 9, 5, 5, 9, 12, 11, 6, 12, 10, 6, 3, 10, 8, 1, 11, 13, 15, 2, 2, 14, 1, 4, 13, 7, 4, 15, 14, 0, 0, 13, 5, 6, 10, 0, 3, 10, 7, 14, 9, 3, 12, 11, 15, 5, 11, 7, 2, 1, 6, 9, 13, 4, 8, 2, 14, 8, 1, 12, 4, 15
        // rotate 180
        //13, 0, 6, 5, 0, 10, 10, 3, 14, 7, 3, 9, 11, 12, 5, 15, 7, 11, 1, 2, 9, 6, 4, 13, 2, 8, 8, 14, 12, 1, 15, 4, 8, 7, 3, 0, 5, 9, 9, 5, 11, 12, 12, 6, 6, 10, 10, 3, 1, 8, 13, 11, 2, 15, 14, 2, 4, 1, 7, 13, 15, 4, 0, 14
        // exchange the 1st and 2nd, 3rd and 4th rows
        //0, 14, 15, 4, 7, 13, 4, 1, 14, 2, 2, 15, 13, 11, 1, 8, 10, 3, 6, 10, 12, 6, 11, 12, 9, 5, 5, 9, 3, 0, 8, 7, 15, 4, 12, 1, 8, 14, 2, 8, 4, 13, 9, 6, 1, 2, 7, 11, 5, 15, 11, 12, 3, 9, 14, 7, 10, 3, 0, 10, 6, 5, 13, 0
        // exchange only the 1st and 2nd, fails for s-4
        //0, 14, 15, 4, 7, 13, 4, 1, 14, 2, 2, 15, 13, 11, 1, 8, 10, 3, 6, 10, 12, 6, 11, 12, 9, 5, 5, 9, 3, 0, 8, 7, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
        // exchange only the 3rd and 4th: fails for s-4
        //14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 15, 4, 12, 1, 8, 14, 2, 8, 4, 13, 9, 6, 1, 2, 7, 11, 5, 15, 11, 12, 3, 9, 14, 7, 10, 3, 0, 10, 6, 5, 13, 0

        // S2, score 14
        //15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
        // S3, score 14
        //10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12
        // S4, score 10
        //7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14
        // S5, score 14
        //2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3
        // S6, score 12
        //12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13
        // S7, score 18
        //4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12
        // S8, score 12
        //13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11


        /* published score-8 solution */
        //0,	3,	3,	0,	5,	6,	6,	5,	9,	10,	10,	9,	15,	12,	12,	15,	7,	4,	4,	7,	14,	13,	13,	14,	2,	1,	1,	2,	8,	11,	11,	8,	3,	9,	15,	5,	0,	15,	12,	3,	5,	12,	9,	0,	10,	6,	6,	10,	4,	7,	8,	11,	11,	8,	7,	4,	14,	2,	2,	14,	1,	13,	13,	1
        /* possible score 6 solution, fails s-4, updated s-7 */
        //15,	15,	13,	3,	7,	12,	11,	5,	14,	9,	0,	14,	9,	10,	6,	0,	4,	1,	3,	6,	8,	7,	5,	8,	1,	2,	10,	13,	2,	4,	12,	11,	15,	9,	10,	15,	2,	7,	7,	8,	9,	12,	12,	5,	5,	0,	0,	6,	3,	14,	4,	3,	13,	2,	14,	4,	6,	1,	1,	10,	8,	11,	11,	13
        /* possible score 0 solution by Jean-Noel, fails updated s-7 */
        //4,	7,	1,	14,	7,	11,	8,	13,	14,	4,	13,	1,	11,	2,	2,	8,	10,	0,	15,	3,	9,	5,	5,	6,	3,	9,	6,	10,	0,	12,	12,	15,	11,	8,	14,	1,	8,	4,	7,	2,	1,	11,	2,	14,	4,	13,	13,	7,	5,	15,	0,	12,	6,	10,	10,	9,	12,	6,	9,	5,	15,	3,	3,	0

        // s1
        //14,	0,	4,	15,	13,	7,	1,	4,	2,	14,	15,	2,	11,	13,	8,	1,	3,	10,	10,	6,	6,	12,	12,	11,	5,	9,	9,	5,	0,	3,	7,	8,	4,	15,	1,	12,	14,	8,	8,	2,	13,	4,	6,	9,	2,	1,	11,	7,	15,	5,	12,	11,	9,	3,	7,	14,	3,	10,	10,	0,	5,	6,	0,	13
        // new, score 14, passes.
		//14,	0,	4,	15,	13,	7,	1,	4,	2,	14,	8,	2,	11,	13,	7,	8,	0,	12,	10,	9,	6,	1,	15,	10,	12,	11,	3,	5,	5,	6,	9,	3,	8,	14,	2,	8,	4,	2,	13,	11,	7,	9,	11,	4,	1,	7,	14,	1,	15,	5,	5,	6,	9,	15,	10,	0,	0,	12,	12,	3,	6,	10,	3,	13
        // TEST, fails s-7
		//14,	0,	4,	15,	13,	7,	1,	4,	2,	14,	8,	2,	11,	13,	7,	8,	0,	12,	10,	9,	6,	1,	15,	10,	12,	11,	3,	5,	5,	6,	9,	3,	8,	14,	2,	8,	4,	2,	14,	1,	1,	13,	13,	11,	7,	4,	11,	7,	6,	9,	12,	5,	9,	15,	3,	12,	15,	6,	10,	0,	0,	3,	5,	10
        // BITVEC:
        // new, score 12, passes
	    //8,	2,	1,	8,	4,	14,	2,	4,	3,	9,	12,	3,	14,	7,	11,	13,	6,	12,	13,	1,	9,	0,	7,	10,	15,	5,	10,	15,	5,	11,	0,	6,	2,	8,	8,	4,	7,	1,	11,	7,	13,	14,	6,	13,	4,2,	1,	11,	15,	5,	3,	10,	12,	15,	0,	9,	10,	3,	5,	6,	9,	12,	14,	0
        // new, score 12, passes
	    //8,	2,	1,	8,	4,	14,	2,	4,	3,	9,	12,	3,	14,	7,	11,	13, 6,	12,	13,	1,	9,	0,	7,	10,	15,	5,	10,	15,	5,	11,	0,	6,	2,	8,	4,	7,	8,	1,	11,	2,	13,	14,	1,	4,	7,	13,	14,	11,	5,	6,	3,	10,	15,	12,	0,	15,	10,	3,	6,	9,	12,	0,	9,	5

        // something found by BOOL
	    //15,	3,	1,	13,	8,	4,	14,	7,	6,	15,	11,	2,	3,	8,	4,	14,	9,	12,	7,	0,	2,	1,	13,	10,	12,	6,	0,	9,	5,	11,	10,	5,	0,	13,	14,	8,	7,	10,	11,	1,	10,	3,	4,	15,	13,	4,	1,	2,	5,	11,	8,	5,	12,	7,	6,	12,	9,	0,	3,	6,	2,	14,	15,	9
        // 15, 3,  1,  13, 8,  4,  14, 7,  6,  15, 11, 2,  3,  8,  4,  14, 9,  12, 7,  0,  2,  1,  13, 10, 12, 6,  0,  9,  5,  11, 10, 5,  4,  13, 14, 8,  1,  10, 11, 1,  10, 3,  5,  15, 13, 4,  8,  2,  7,  11, 0,  6,  12, 7,  6,  12, 9,  0,  3,  5,  2,  14, 15, 9

/*wtf*/ //15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 5, 15, 13, 4, 1, 2, 4, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
/*s2*/  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
        //                                                                                                                                             ^                   ^                      

// s-4 supposedly passes...?
/*s2*/  //15, 3, 1, 13, 8,  4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6,  0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11,  1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9,  0, 3, 5, 2, 14, 15, 9
/*wtf*/ //15, 3, 1, 13, 8, 15, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 15, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 11, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 15, 3, 5, 2, 14, 15, 9
        //               ^^                                                                      ^^                                            ^^                                                           ^^



    };

    bool fail = false;
    int n = 6;
    int m = 4;
    std::ostream& out = std::cerr;
    int threshold = 8;

    #include "check/checks2.cpp"
    if(s <= threshold) {
        printscores(scores, n, m, out);
    } 
    /*
    // check s2
    int num_scores = numscores(n,m);
    int scores[num_scores];
    calcscores(solution, scores, n, m);
    int s = score(scores, n, m);
    if(s <= 8) {
        printscores(scores, n, m, out);
    } else {
        out << "score: " << s << std::endl;
    }
    */


    #include "check/checks3.cpp"
    /*
    // check s3; distinct per-row
    int num_cols = pow(2, n-2);
    for(int i=0; i<4; i++) {
        int start_pos = ((i/2) * 2 * num_cols) + (i%2);
        for(int j=0; j<num_cols; j++) {
            int cur = solution[start_pos + (2*j)];
            for(int k=j+1; k<num_cols; k++) {
                if(cur == solution[start_pos + (2*k)]) {
                    fail = true;
                    out << "Failed s-3 for row " << i << ", index " 
                        << (start_pos + (2*j)) << " and " << (start_pos + (2*k)) 
                        << " value " << cur << std::endl;
                }
            }
        }
    }
    */

    #include "check/checks4.cpp"
    /*
    // check s4; 2 inputs differ in 1 bit --> outputs differ in 2 bits
    for(unsigned int i=0; i<pow(2,n); i++) {
        for(unsigned int j=i+1; j<pow(2,n); j++) {
            std::bitset<CHAR_BIT * sizeof(unsigned int)> bs(i xor j);
            if(bs.count() == 1) {
                std::bitset<CHAR_BIT * sizeof(unsigned int)> bs2(solution[i] xor solution[j]);
                if(!(bs2.count() >= 2)) {
                    fail = true;
                    out << "Failed s-4 for inputs " 
                        << i << "(" << std::bitset<6>(i) << ") and "
                        << j << "(" << std::bitset<6>(j) << ") xor " 
                        << std::bitset<6>(i xor j) << " count " << bs.count() << " values " 
                        << solution[i] << "(" << std::bitset<4>(solution[i]) << ") and "
                        << solution[j] << "(" << std::bitset<4>(solution[j]) << ") xor "
                        << std::bitset<4>(solution[i] xor solution[j]) << " count " << bs2.count() << std::endl;
                }
            }
        }
    }
    */

    #include "check/checks5.cpp"
    /*
    // check s5; inputs differ in 2 middle bits --> outputs differ in 2 bits
    int s5sum = 3 * pow(2, (n / 2) - 1);    // for s-5, e.g. 001100
    for(unsigned int i=0; i<pow(2,n); i++) {
        for(unsigned int j=i+1; j<pow(2,n); j++) {
            if((i xor j) == s5sum) {
                std::bitset<CHAR_BIT * sizeof(unsigned int)> bs(solution[i] xor solution[j]);
                if(!(bs.count() >= 2)) {
                    fail = true;
                    out << "Failed s-5 for inputs "
                        << i << "(" << std::bitset<6>(i) << ") and "
                        << j << "(" << std::bitset<6>(j) << ") values " 
                        << solution[i] << "(" << std::bitset<4>(solution[i]) << ") and "
                        << solution[j] << "(" << std::bitset<4>(solution[j]) << ") xor "
                        << std::bitset<4>(solution[i] xor solution[j]) << " count " << bs.count() << std::endl;
                }
            }
        }
    }
    */

    #include "check/checks6.cpp"
    /*
    // check s6; inputs differ in first 2 bits, same in last two --> outputs != 
    int s6sum = 3 * pow(2,n-2);          // for s-6, e.g. 110000
    int s6and = 3 * (pow(2,n-2) + 1);    // for s-6, e.g. 110011
    for(unsigned int i=0; i<pow(2,n); i++) {
        for(unsigned int j=i+1; j<pow(2,n); j++) {
            if(((i xor j) bitand s6and) == s6sum) {
                if(solution[i] == solution[j]) {
                    fail = true;
                    out << "Failed s-6 for inputs "
                        << i << "(" << std::bitset<6>(i) << ") and "
                        << j << "(" << std::bitset<6>(j) << ") xor " 
                        << std::bitset<6>(i xor j) << " and s6and " << std::bitset<6>((i xor j) bitand s6and) << " values " 
                        << solution[i] << "(" << std::bitset<4>(solution[i]) << ") and "
                        << solution[j] << "(" << std::bitset<4>(solution[j]) << ")" << std::endl;
                }
            }
        }
    }
    */

    #include "check/checks7.cpp"
    /*
    // check s7
    // pow(2,n) * pow(2,m) space for the check array
    // allocate space for row 0, which we'll ignore
    int count[(int)pow(2,n)][(int)pow(2,m)];
    for(int i=0; i<pow(2,n); i++) {
        for(int j=0; j<pow(2,m); j++) {
            count[i][j] = 0;
        }
    }
    // count for the unordered pairs, skipping comparison against self
    for(unsigned int i=0; i<pow(2,n); i++) {
        for(unsigned int j=i+1; j<pow(2,n); j++) {
            count[i xor j][solution[i] xor solution[j]] += 1;
        }
    }
    // ensure the counts are <= 8
    for(int i=0; i<pow(2,n); i++) {
        for(int j=0; j<pow(2,m); j++) {
            if(count[i][j] > 8) {
                fail = true;
                out << "Failed s-7 for input diff " << std::bitset<6>(i) 
                    << "(" << i << ")" << " and output diff " << std::bitset<4>(j) 
                    << "(" << j << ") count " << count[i][j] << std::endl;
            }
        }
    }
    */

    if(fail) {
        printbox(solution, n, out);
    }
    //printbits(solution, n, m, out);
}