aboutsummaryrefslogtreecommitdiff
path: root/src/solve.rs
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-02-02 00:03:30 +0100
committerCharles Cabergs <me@cacharle.xyz>2021-02-02 00:03:30 +0100
commite77d75ea02abd2c8fd7e04af9f82063eb54d9eca (patch)
tree4f3c9cc63b5c4ee284a4f7908803997fcf0bdc72 /src/solve.rs
parent2b0619720474ce8191326751950442b6ba45da26 (diff)
downloadconnect4-e77d75ea02abd2c8fd7e04af9f82063eb54d9eca.tar.gz
connect4-e77d75ea02abd2c8fd7e04af9f82063eb54d9eca.tar.bz2
connect4-e77d75ea02abd2c8fd7e04af9f82063eb54d9eca.zip
Added reading position form stdin, Added cache
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;
}