Better BF function conversions

This commit is contained in:
Alex Bethel 2021-12-07 14:27:45 -07:00
parent ffcd0000c2
commit 3044ef91e3

View file

@ -209,10 +209,12 @@ impl Value {
Value::Int(i) => Functio::BfFunctio {
instructions: {
let instruction_mappings = [b'[', b']', b'+', b'-', b',', b'.', b'<', b'>'];
std::iter::successors(Some(i), |i| Some(i >> 3))
.take_while(|&i| i != 0)
.map(|i| instruction_mappings[(i & 0x07) as usize])
.collect()
std::iter::successors(Some(i as usize), |i| {
Some(i / instruction_mappings.len())
})
.take_while(|&i| i != 0)
.map(|i| instruction_mappings[i % instruction_mappings.len()])
.collect()
},
tape_len: crate::brian::DEFAULT_TAPE_SIZE_LIMIT,
},