aboutsummaryrefslogtreecommitdiff
path: root/src/solve.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solve.rs')
-rw-r--r--src/solve.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/solve.rs b/src/solve.rs
index 2c7e0d2..e9c8c04 100644
--- a/src/solve.rs
+++ b/src/solve.rs
@@ -1,6 +1,12 @@
+use std::collections::HashMap;
+
use crate::position::{Position, WIDTH, HEIGHT};
-pub fn solve(p: Position, a: i32, b: i32) -> i32 {
+
+pub fn solve(p: Position, a: i32, b: i32, cache: &mut HashMap<u64, i32>) -> i32 {
+ if let Some(score) = cache.get(&p.key()) {
+ return *score;
+ }
if p.is_draw() {
return 0;
}
@@ -27,7 +33,7 @@ pub fn solve(p: Position, a: i32, b: i32) -> i32 {
continue
}
- let score = -solve(p.play(x), -beta, -alpha);
+ let score = -solve(p.play(x), -beta, -alpha, cache);
if score >= beta {
return score;
@@ -37,6 +43,7 @@ pub fn solve(p: Position, a: i32, b: i32) -> i32 {
alpha = score;
}
}
+ cache.insert(p.key(), alpha);
return alpha;
}