From f95aeffef7939556b4a854c219bf19920412c7b1 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sun, 23 Jan 2022 21:07:20 +0100 Subject: [PATCH] game --- Cargo.toml | 1 + src/lib.rs | 92 +++++++++++++++++------------------------------------- 2 files changed, 30 insertions(+), 63 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 06f5afd..1ebbdb6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +rand = "0.8.4" diff --git a/src/lib.rs b/src/lib.rs index 32d1738..f724af7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,31 @@ #![allow(dead_code)] -pub struct Node { - value: T, - children: Vec>, +use rand::Rng; + +mod basic_search; + +pub trait GameState { + fn points(&self) -> i32; + + fn next(&self) -> Box>; +} + +impl GameState for i32 { + fn points(&self) -> i32 { + *self + } + + fn next(&self) -> Box> { + let child_amount = rand::thread_rng().gen_range(0..10); + let mut i = 0; + Box::new(std::iter::from_fn(move || { + if i < child_amount { + Some(rand::random()) + } else { + None + } + })) + } } #[macro_export] @@ -15,67 +38,10 @@ macro_rules! tree { }; } -mod search { - use crate::Node; - use std::collections::VecDeque; - - pub fn breadth_first_search(tree: &Node, searched: &T) -> bool { - let mut candidates = VecDeque::new(); - candidates.push_back(tree); - - loop { - if let Some(candidate) = candidates.pop_front() { - if candidate.value == *searched { - return true; - } - - candidates.extend(candidate.children.iter()); - } else { - break; - } - } - - false - } - - pub fn depth_first_search(tree: &Node, searched: &T) -> bool { - if tree.value == *searched { - return true; - } - - for child in &tree.children { - if depth_first_search(&child, searched) { - return true; - } - } - - false - } -} +mod mcts {} #[cfg(test)] -mod tests { - use crate::search; - +mod test { #[test] - fn dfs() { - let tree = tree!(1, tree!(6, tree!(5), tree!(4)), tree!(6)); - - let has_seven = search::depth_first_search(&tree, &7); - let has_five = search::depth_first_search(&tree, &5); - - assert!(!has_seven); - assert!(has_five); - } - - #[test] - fn bfs() { - let tree = tree!(1, tree!(6, tree!(5), tree!(4)), tree!(6)); - - let has_seven = search::breadth_first_search(&tree, &7); - let has_five = search::breadth_first_search(&tree, &5); - - assert!(!has_seven); - assert!(has_five); - } + fn t() {} }