1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
extern crate console_error_panic_hook;
use std::panic;
use types::SolutionType;
use wasm_bindgen::prelude::*;
use gloo_utils::format::JsValueSerdeExt;
pub mod solver;
pub mod types;
#[wasm_bindgen]
pub fn wasm_check_solved(js_constraints: JsValue, js_grid: JsValue) -> JsValue {
panic::set_hook(Box::new(console_error_panic_hook::hook));
let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
let grid: types::SudokuGrid = js_grid.into_serde().unwrap();
let solver = solver::Solver::new(constraints, Some(grid));
let result = solver.check_solved();
JsValue::from_serde(&result).unwrap()
}
#[wasm_bindgen]
pub fn wasm_logical_solve(js_constraints: JsValue) -> JsValue {
panic::set_hook(Box::new(console_error_panic_hook::hook));
let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
let mut solver = solver::Solver::new(constraints, None);
let result = solver.logical_solve();
JsValue::from_serde(&result).unwrap()
}
#[wasm_bindgen]
pub fn wasm_brute_solve(js_constraints: JsValue) -> JsValue {
panic::set_hook(Box::new(console_error_panic_hook::hook));
let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
let mut solver = solver::Solver::new(constraints, None);
let result = solver.brute_solve(true);
JsValue::from_serde(&result).unwrap()
}
#[wasm_bindgen]
pub fn wasm_logical_hint(js_constraints: JsValue) -> JsValue {
panic::set_hook(Box::new(console_error_panic_hook::hook));
let constraints: types::SudokuConstraints = js_constraints.into_serde().unwrap();
let mut solver = solver::Solver::new(constraints.clone(), None);
let result = solver.logical_solve();
if result.solution_type != SolutionType::Full {
return JsValue::from_serde(&result).unwrap();
}
let mut solver = solver::Solver::new(constraints.clone(), None)
.with_hint_mode();
let result = solver.logical_solve();
JsValue::from_serde(&result).unwrap()
}