Thursday, May 21, 2015

UVa 947 - Master Mind Helper

Accepted date: 2015-05-21
Ranking (as of 2015-05-21): 19 out of 102
Language: C++

/*
  UVa 947 - Master Mind Helper

  To build using Visual Studio 2012:
    cl -EHsc -O2 UVa_947_Master_Mind_Helper.cpp
*/

#include <cstdio>
#include <cstring>
using namespace std;

const int nr_digits_max = 5;
char guess[nr_digits_max + 1], code[nr_digits_max + 1];
int fn, sn;

void generate_code(int n, int ci, int& ctr)
{
  if (ci == n) {
    char s[nr_digits_max + 1], t[nr_digits_max + 1];
    memcpy(s, guess, n);
    memcpy(t, code, n);
    int fm = 0, sm = 0;
    for (int i = 0; i < n; i++)
      if (s[i] == t[i]) {
        s[i] = t[i] = '0';
        fm++;
      }
    for (int i = 0; i < n; i++)
      if (s[i] != '0')
        for (int j = 0; j < n; j++)
          if (s[i] == t[j]) {
            s[i] = t[j] = '0';
            sm++;
            break;
          }
    if (fn == fm && sn == sm)
      ctr++;
  }
  else {
    for (int i = 1; i <= 9; i++) {
      code[ci] = '0' + i;
      generate_code(n, ci + 1, ctr);
    }
  }
}

int main()
{
  int N;
  scanf("%d", &N);
  while (N--) {
    scanf("%s %d %d", guess, &fn, &sn);
    int ctr = 0;
    generate_code(strlen(guess), 0, ctr);
    printf("%d\n", ctr);
  }
  return 0;
}

No comments:

Post a Comment