-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathdbchoco.rs
More file actions
38 lines (32 loc) · 1.19 KB
/
Copy pathdbchoco.rs
File metadata and controls
38 lines (32 loc) · 1.19 KB
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
use cspuz_rs_puzzles::puzzles::dbchoco::{deserialize_problem, solve_doublechoco};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct DoubleChocoTask {
pub color: Vec<Vec<i32>>,
pub num: Vec<Vec<Option<i32>>>,
pub expectation: Option<super::BoolInnerGridEdgesIrrefutableFacts>,
}
pub(super) fn run_benchmark(
task: &DoubleChocoTask,
) -> Result<super::BenchResult, super::BenchmarkError> {
let color = task.color.clone();
let num = task.num.clone();
let expectation = task.expectation.as_ref().map(|e| e.to_cspuz_rs());
let (answer, bench_result) = super::run_with_bench_result(|| solve_doublechoco(&color, &num));
if answer != expectation {
Err(super::BenchmarkError::AnswerMismatch)
} else {
Ok(bench_result)
}
}
pub(super) fn materialize_solve_task(url: &str) -> super::Task {
let (color, num) = deserialize_problem(url).expect("Failed to deserialize problem");
let expectation = solve_doublechoco(&color, &num)
.as_ref()
.map(super::BoolInnerGridEdgesIrrefutableFacts::from_cspuz_rs);
super::Task::DoubleChoco(DoubleChocoTask {
color,
num,
expectation,
})
}