use sudoku::Sudoku;
use std::io::{self, Read};
fn solve_and_print(puzzle: &str) {
let puzzle = puzzle.trim();
match puzzle.parse::<Sudoku>() {
Err(e) => eprintln!("Error: {}", e),
Ok(mut s) => {
if s.solve() {
println!("{}", s);
} else {
eprintln!("No solution found.");
std::process::exit(1);
}
}
}
}
fn main() {
let args: Vec<String> = std::env::args().collect();
if args.len() > 1 {
solve_and_print(&args[1]);
} else {
let mut input = String::new();
io::stdin().read_to_string(&mut input).expect("Failed to read stdin");
for line in input.lines() {
let line = line.trim();
if !line.is_empty() && !line.starts_with('#') {
solve_and_print(line);
}
}
}
}