Skip to content

Commit de119d0

Browse files
authored
add run_solver.rs (#224)
1 parent ec36f10 commit de119d0

3 files changed

Lines changed: 45 additions & 2 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use cspuz_solver_backend::{decode_and_solve, Uniqueness};
2+
3+
fn main() {
4+
let mut url = None;
5+
let mut show_json = false;
6+
7+
for arg in std::env::args().skip(1) {
8+
if arg == "--json" {
9+
show_json = true;
10+
} else if url.is_none() {
11+
url = Some(arg);
12+
} else {
13+
eprintln!("Unexpected argument: {}", arg);
14+
std::process::exit(1);
15+
}
16+
}
17+
18+
if url.is_none() {
19+
eprintln!("Usage: run_solver [--json] <puzzle_url>");
20+
std::process::exit(1);
21+
}
22+
23+
let url = url.unwrap();
24+
match decode_and_solve(url.as_bytes()) {
25+
Ok(board) => {
26+
if show_json {
27+
println!("{}", board.to_json());
28+
} else {
29+
let answer_status = match board.uniqueness {
30+
Uniqueness::NoAnswer => "No Answer",
31+
Uniqueness::Unique => "Unique",
32+
Uniqueness::NonUnique => "Not unique",
33+
_ => panic!(),
34+
};
35+
println!("Answer Status: {}", answer_status);
36+
}
37+
}
38+
Err(err) => {
39+
eprintln!("Error: {}", err);
40+
}
41+
}
42+
}

cspuz_solver_backend/src/board.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ pub struct Board {
231231
pub(crate) height: usize,
232232
pub(crate) width: usize,
233233
pub(crate) data: Vec<Item>,
234-
pub(crate) uniqueness: Uniqueness,
234+
pub uniqueness: Uniqueness,
235235
}
236236

237237
impl Board {

cspuz_solver_backend/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub mod testing;
1212
use board::Board;
1313
use cspuz_rs::serializer::{get_kudamono_url_info_detailed, url_to_puzzle_kind};
1414
pub use puzzle::{list_penpa_edit_puzzles, list_puzzles_for_enumerate, list_puzzles_for_solve};
15+
pub use uniqueness::Uniqueness;
1516

1617
static mut SHARED_ARRAY: Vec<u8> = vec![];
1718

@@ -29,7 +30,7 @@ fn parse_penpa_edit_special_url(url: &str) -> Option<(&str, &str)> {
2930
Some((kind, url))
3031
}
3132

32-
fn decode_and_solve(url: &[u8]) -> Result<Board, &'static str> {
33+
pub fn decode_and_solve(url: &[u8]) -> Result<Board, &'static str> {
3334
let url = std::str::from_utf8(url).map_err(|_| "failed to decode URL as UTF-8")?;
3435

3536
if let Some(puzzle_kind) = url_to_puzzle_kind(url) {

0 commit comments

Comments
 (0)