From af6ef45043ea5712e62a50457525dc5b46497a65 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Sun, 23 Feb 2025 17:26:37 +0100 Subject: [PATCH] Add minesweeper input --- expert.minesweeper | 17 ++++++++++++++ src/bin/minesweeper.rs | 52 +++++++++++++++++++++++++++++++++++------- 2 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 expert.minesweeper diff --git a/expert.minesweeper b/expert.minesweeper new file mode 100644 index 0000000..ae3e55f --- /dev/null +++ b/expert.minesweeper @@ -0,0 +1,17 @@ +99 + + + + + + + + + + + + + + + 2 + 2111 diff --git a/src/bin/minesweeper.rs b/src/bin/minesweeper.rs index 0df19bb..d3f0bbd 100644 --- a/src/bin/minesweeper.rs +++ b/src/bin/minesweeper.rs @@ -1,5 +1,6 @@ -use std::collections::HashMap; +use std::{collections::HashMap, path::PathBuf}; +use clap::Parser; use simple_sat_solver::{ dpll::Index, expr::Expr, normal_form::NormalForm, solver::SolutionIterator, }; @@ -133,7 +134,42 @@ fn print_output(total: u64, input: &[Vec], map: &[Vec], default: f64) { } } +#[derive(Parser)] +struct Args { + inputfile: PathBuf, +} + fn main() { + let args = Args::parse(); + + let mut text = std::fs::read_to_string(args.inputfile).unwrap(); + + let mut lines = text.lines(); + + let mines = lines.next().unwrap().trim().parse::().unwrap(); + + let input = lines + .map(|l| { + l.chars() + .map(|c| match c { + '.' | '0' => 0, + '1' => 1, + '2' => 2, + '3' => 3, + '4' => 4, + '5' => 5, + '6' => 6, + '7' => 7, + '8' => 8, + '9' => 9, + ' ' => 10, + 'F' => 11, + _ => unreachable!(), + }) + .collect::>() + }) + .collect::>(); + // let input = vec![ // vec![0, 0, 1, 10, 10, 10], // vec![1, 1, 2, 10, 10, 10], @@ -144,16 +180,16 @@ fn main() { // vec![10; 6], // ]; // - let input = vec![ - vec![2, 2, 10], - vec![10, 10, 10], - vec![10, 10, 10], - vec![10, 10, 10], - ]; + // let input = vec![ + // vec![2, 2, 10], + // vec![10, 10, 10], + // vec![10, 10, 10], + // vec![10, 10, 10], + // ]; print_input(&input); - let (total, result, default) = solve_minesweeper(simple_sat_solver::cdcl::cdcl, &input, 5); + let (total, result, default) = solve_minesweeper(simple_sat_solver::cdcl::cdcl, &input, mines); print_output(total, &input, &result, default); }