From 78460c7b8e5b386b9fa8196542235ccc385d71f0 Mon Sep 17 00:00:00 2001 From: Juergen Stuber Date: Tue, 7 Apr 2026 10:01:52 +0200 Subject: [PATCH] bitart: Complete builder pattern to allow changing parameters Change expression depth to 4 --- src/bin/bitart/expression.rs | 30 +++++++++++++++++++++++++----- src/bin/bitart/main.rs | 4 +++- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/bin/bitart/expression.rs b/src/bin/bitart/expression.rs index f85d213..4e0ead6 100644 --- a/src/bin/bitart/expression.rs +++ b/src/bin/bitart/expression.rs @@ -270,11 +270,7 @@ pub struct RandomExpressionBuilder { depth: usize, } impl RandomExpressionBuilder { - pub fn build(rng: &mut R) -> Expression { - let builder = Self::new(); - builder.build_binary(rng, builder.depth) - } - fn new() -> RandomExpressionBuilder { + pub fn new() -> RandomExpressionBuilder { // Default values let unary_rate = 0.3; let variable_rate = 0.5; @@ -287,6 +283,9 @@ impl RandomExpressionBuilder { depth, } } + pub fn build(&self, rng: &mut R) -> Expression { + self.build_binary(rng, self.depth) + } fn build_recursive(&self, rng: &mut R, depth: usize, left: bool) -> Expression { if depth == 0 { self.build_leaf(rng, left) @@ -315,4 +314,25 @@ impl RandomExpressionBuilder { let arg1 = self.build_recursive(rng, depth - 1, false); binary_operation(op, arg0, arg1) } + + #[allow(unused)] + pub fn unary_rate(mut self, unary_rate: f64) -> Self { + self.unary_rate = unary_rate; + self + } + #[allow(unused)] + pub fn variable_rate(mut self, variable_rate: f64) -> Self { + self.variable_rate = variable_rate; + self + } + #[allow(unused)] + pub fn max_literal(mut self, max_literal: i64) -> Self { + self.max_literal = max_literal; + self + } + #[allow(unused)] + pub fn depth(mut self, depth: usize) -> Self { + self.depth = depth; + self + } } diff --git a/src/bin/bitart/main.rs b/src/bin/bitart/main.rs index 5011342..b51b8a7 100644 --- a/src/bin/bitart/main.rs +++ b/src/bin/bitart/main.rs @@ -118,6 +118,8 @@ fn main() -> std::io::Result<()> { let mut old_board = Board::with(Color::black(), bbox, |_p| Square::Uncommon); let mut new_board = Board::with(Color::black(), bbox, |_p| Square::Uncommon); + let builder = RandomExpressionBuilder::new().depth(4); + let mut time_count = frame_time_count; loop { if time_count >= frame_time_count { @@ -129,7 +131,7 @@ fn main() -> std::io::Result<()> { // Pick a random expression. loop { - let expression = RandomExpressionBuilder::build(&mut rng); + let expression = builder.build(&mut rng); let values = Array2d::with(bbox, |p| { let x = x0 + xk * p.x(); let y = y0 + yk * p.y();