diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-02-02 00:03:30 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-02-02 00:03:30 +0100 |
| commit | e77d75ea02abd2c8fd7e04af9f82063eb54d9eca (patch) | |
| tree | 4f3c9cc63b5c4ee284a4f7908803997fcf0bdc72 /src/solve.rs | |
| parent | 2b0619720474ce8191326751950442b6ba45da26 (diff) | |
| download | connect4-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.rs | 11 |
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; } |
