use super::CommandTable;
use crate::utils;
pub fn execute_program(cmds: &CommandTable, program: &str, beg_value: i32, var_value: i32) -> f32 {
let mut acc = beg_value as f32;
for cmd_name in program.chars() {
let cmd = cmds.get(&cmd_name).unwrap();
acc = cmd.execute(acc, var_value as f32);
}
acc
}
pub fn find_variable_value(cmds: &CommandTable, program: &str,
beg_value: i32, res_value: i32) -> Option<i32> {
for b in 0..i32::MAX {
if res_value as f32 == execute_program(cmds, program, beg_value, b) {
return Some(b)
}
}
None
}
pub fn make_algorithm(cmds: &CommandTable, len: usize,
beg_value: i32, res_value: i32) -> Option<String> {
for program in utils::combinations::<String, _, _>(len, cmds.keys()) {
if res_value as f32 == execute_program(cmds, &program, beg_value, 1) {
return Some(program);
}
}
None
}