Monday, January 14, 2013

UVa 232 - Crossword Answers

Accepted date: 2013-01-05
Ranking (as of 2013-01-14): 560
Language: C++

/*
  UVa 232 - Crossword Answers

  To build using Visucal Studio 2008:
    cl -EHsc -O2 UVa_232_Crossword_Answers.cpp
*/

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
  const int r_max = 10, c_max = 10;
  char grid[r_max][c_max];
  int definitions[r_max][c_max];
  for (int pn = 1; ; pn++) {
    int r, c;
    cin >> r;
    if (!r)
      break;
    cin >> c;
    for (int i = 0, n = 1; i < r; i++)
      for (int j = 0; j < c; j++) {
        cin >> grid[i][j];
        definitions[i][j] = (grid[i][j] != '*' &&
          (!i || !j || grid[i - 1][j] == '*' || grid[i][j - 1] == '*')) ? 
          n++ : 0;
      }
    if (pn > 1)
      cout << endl;
    cout << "puzzle #" << pn << ":\n";
    cout << "Across\n";
    for (int i = 0; i < r; i++)
      for (int j = 0; j < c; j++)
        if (definitions[i][j] && (!j || grid[i][j - 1] == '*')) {
          cout << setfill(' ') << setw(3) << definitions[i][j] << '.';
          for (int k = j; k < c; k++) {
            if (grid[i][k] == '*')
              break;
            else
              cout << grid[i][k];
          }
          cout << endl;
        }
    cout << "Down\n";
    for (int i = 0; i < r; i++)
      for (int j = 0; j < c; j++)
        if (definitions[i][j] && (!i || grid[i - 1][j] == '*')) {
          cout << setfill(' ') << setw(3) << definitions[i][j] << '.';
          for (int k = i; k < r; k++) {
            if (grid[k][j] == '*')
              break;
            else
              cout << grid[k][j];
          }
          cout << endl;
        }
  }
  return 0;
}

No comments:

Post a Comment