The later levels are too hard so I write this program to calculate them XD
use std::{collections::VecDeque, io};
fn main() {
let target = {
let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
line.trim().parse::<u8>().unwrap()
};
let mut q: VecDeque<(u8, Vec<char>)> = VecDeque::new();
q.push_back((0, vec![]));
while !q.is_empty() {
let (cur, mut cur_ops) = q.pop_front().unwrap();
if cur == target {
println!("{:?}", cur_ops);
break;
}
cur_ops.push('+');
q.push_back((cur.wrapping_add(1), cur_ops.clone()));
cur_ops.pop();
cur_ops.push('-');
q.push_back((cur.wrapping_sub(1), cur_ops.clone()));
cur_ops.pop();
cur_ops.push('<');
q.push_back((cur.wrapping_shl(1), cur_ops.clone()));
cur_ops.pop();
cur_ops.push('>');
q.push_back((cur.wrapping_shr(1), cur_ops.clone()));
cur_ops.pop();
}
}