#[derive(Debug, PartialEq, Eq)]
pub enum Error {
InvalidInputBase,
InvalidOutputBase,
InvalidDigit(u32),
}
pub fn convert(number: &[u32], from_base: u32, to_base: u32) -> Result<Vec<u32>, Error> {
if from_base <= 1 {
return Err(Error::InvalidInputBase);
}
if to_base <= 1 {
return Err(Error::InvalidOutputBase);
}
if number.iter().any(|x| *x >= from_base) {
return Err(Error::InvalidDigit(from_base));
};
let mut digit= number.iter().fold(0, |i, vaule| {
return i * from_base + vaule;
});
let mut result: Vec<u32> = vec![];
while digit >= to_base {
result.push(digit % to_base);
digit /= to_base;
}
result.push(digit);
result.reverse();
return Ok(result)
}