[ create a new paste ] login | about

Link: http://codepad.org/d9kUDbzg    [ raw code | output | fork ]

C, pasted on Dec 6:
#include <stdio.h>

const int kRow = 5;
const int kCol = 5;
const int kNum = 75;
const int kPercentage = 90;

void CreateCard(int card[kRow][kCol]) {
  int i, r, c;
  int numbers[kNum];
  for (i = 0; i < kNum; ++i) {
    numbers[i] = i + 1;
  }
  for (r = 0; r < kRow; ++r) {
    for (c = 0; c < kCol; ++c) {
      int upper, selected, tmp;
      if ((r == kRow / 2) && (c == kCol / 2)) {
	card[r][c] = 0;
	continue;
      }
      upper = kNum - (r * kCol + c);
      selected = rand() % upper;
      card[r][c] = numbers[selected];
      tmp = numbers[selected];
      numbers[selected] = numbers[upper - 1];
      numbers[upper - 1] = tmp;
    }
  }
}

void PrintCard(int card[kRow][kCol]) {
  int r, c;
  for (r = 0; r < kRow; ++r) {
    for (c = 0; c < kRow; ++c) {
      printf("%2d ", card[r][c]);
    }
    printf("\n");
  }
}

void CreateValid(int valid[kRow][kCol], const int percentage) {
  int r, c;
  for (r = 0; r < kRow; ++r) {
    for (c = 0; c < kCol; ++c) {
      valid[r][c] = (rand() % 100 + 1) < percentage;
    }
  }
}

void PrintValid(int valid[kRow][kCol]) {
  int r, c;
  for (r = 0; r < kRow; ++r) {
    for (c = 0; c < kCol; ++c) {
      printf("%2d ", valid[r][c]);
    }
    printf("\n");
  }
}

void CalcScore(int card[kRow][kCol],
	       int valid[kRow][kCol],
	       int *score,
	       char *rank) {
  int r, c, sum;
  *score = 0;

  // check row
  for (r = 0; r < kRow; ++r) {
    sum = 0;
    for (c = 0; c < kCol; ++c) {
      if (!valid[r][c]) break;
      sum += card[r][c];
      if (c == kCol - 1) *score += sum;
    }
  }

  // check column
  for (c = 0; c < kCol; ++c) {
    sum = 0;
    for (r = 0; r < kRow; ++r) {
      if (!valid[r][c]) break;
      sum += card[r][c];
      if (r == kRow - 1) *score += sum;
    }
  }

  // check diagon
  sum = 0;
  for (r = 0; r < kRow; ++r) {
    if (!valid[r][r]) break;
    sum += card[r][r];
    if (r == kRow - 1) *score += sum;
  }
  sum = 0;
  for (r = 0; r < kRow; ++r) {
    if (!valid[kRow - r - 1][r]) break;
    sum += card[kRow - r - 1][r];
    if (r == kRow - 1) *score += sum;
  }

  if (*score >= 310) {
    *rank = 'S';
  } else if (*score >= 251) {
    *rank = 'A';
  } else if (*score >= 192) {
    *rank = 'B';
  } else if (*score >= 133) {
    *rank = 'C';
  } else if (*score >= 74) {
    *rank = 'D';
  } else {
    *rank = 'E';
  }
}

int main() {
  int valid[kRow][kCol];
  int card[kRow][kCol];
  int score;
  char rank;

  CreateCard(card);
  PrintCard(card);
  CreateValid(valid, kPercentage);
  PrintValid(valid);
  CalcScore(card, valid, &score, &rank);

  printf("Score: %d Rank: %c\n", score, rank);
  
  return 0;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
59 73 27 44 42 
46 38 49 39  2 
 3 72  0 55 21 
24 40 31 37 45 
12 36 65  4 75 
 1  1  1  1  1 
 1  1  1  1  1 
 1  1  0  1  1 
 1  1  1  1  1 
 1  1  0  1  1 
Score: 1363 Rank: S


Create a new paste based on this one


Comments: