Skip to content
sudoku.cc 1.05 KiB
Newer Older
Seblu's avatar
Seblu committed
#include <stdlib.h>
Seblu's avatar
Seblu committed
#include <unistd.h>
Seblu's avatar
Seblu committed
#include "sudoku.hh"

Seblu's avatar
Seblu committed
inline static void usage();

Seblu's avatar
Seblu committed
int main(int argc, char *argv[])
{
Seblu's avatar
Seblu committed
  int opt;
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
  if (argc != 2 && argc !=3)
    usage();
  while ((opt = getopt(argc, argv, "vx")) != -1)
    switch (opt) {
    case 'v': Grid::verbose = true; break;
    case 'x': Grid::advprint = true; break;
    default: usage();
    }
Seblu's avatar
Seblu committed
  Grid *grid = new Grid();
Seblu's avatar
Seblu committed
  if (!grid->load(argv[optind])) {
Seblu's avatar
Seblu committed
    std::cerr << "Loading failed !" << std::endl;
    return EXIT_LOADFAIL;
Seblu's avatar
Seblu committed
  }
Seblu's avatar
Seblu committed
  if (Grid::verbose) {
    std::cout << "Loaded grid:" << std::endl;
    grid->print();
Seblu's avatar
Seblu committed
  }
Seblu's avatar
Seblu committed
  grid->resolve();
  grid->print();
Seblu's avatar
Seblu committed
  if (grid->verify()) {
    if (Grid::verbose)
      std::cout << "Solution found." << std::endl;
    return EXIT_FOUND;
  }
  std::cout << "No suitable solution found." << std::endl;
  return EXIT_NOTFOUND;
Seblu's avatar
Seblu committed
}

Seblu's avatar
Seblu committed
inline static void usage()
{
  std::cerr << "Usage: sudoku [-vx] file" << std::endl;
  std::cerr << "Options:   -v: Verbose mode" << std::endl;
  std::cerr << "           -x: eXtended print mode" << std::endl;
  exit(EXIT_USAGE);
}