diff --git a/src/base4.rs b/src/base4.rs index 4028aba..7738800 100644 --- a/src/base4.rs +++ b/src/base4.rs @@ -1,23 +1,3 @@ -/* -def decode(string): - """Decode a Base 4 encoded string into the number - Arguments: - - `string`: The encoded string - - `alphabet`: The alphabet to use for decoding - """ - base = len(alphabet) - strlen = len(string) - num = 0 - - idx = 0 - for char in string: - power = (strlen - (idx + 1)) - num += alphabet.index(char) * (base ** power) - idx += 1 - - return num - */ - pub fn alphabet() -> Vec<String> { return vec!["meow", "mrrp", "mreow", "mrow"] .into_iter() diff --git a/src/core.rs b/src/core.rs index c15883b..dd4bf95 100644 --- a/src/core.rs +++ b/src/core.rs @@ -1,5 +1,5 @@ //! Handles conversion one word at a time for any base - +// based off this SO answer: https://stackoverflow.com/a/1119769 use std::ops::Index; use crate::base4::alphabet; @@ -31,20 +31,20 @@ pub fn num_to_cat(num: u32, alphabet: Vec<String>, char_length: u32) -> String { /// Converts catspeak to a [`u32`] pub fn cat_to_num(text: Vec<String>, alphabet: Vec<String>, char_length: u32) -> u32 { let mut nums: Vec<u32> = Vec::new(); - for word in text.clone() { + for word in text { for i in 0..alphabet.len() { if word == alphabet[i] { nums.push(i as u32); + break; } } } let base = alphabet.len(); - let idx = 0; let mut num = 0 as u32; - for n in nums { - let power = (text.len() - (idx + 1)) as u32; - num += n * (base as u32).pow(power); + for n in 0..nums.len() { + let power = (char_length - (n as u32 + 1)) as u32; + num += nums[n] * (base as u32).pow(power); } return num; } diff --git a/src/main.rs b/src/main.rs index 8de31c4..466be42 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,17 +14,6 @@ fn main() { stdin.read_line(&mut input).unwrap(); let trimmed = input.trim(); if trimmed == "1".to_string() { - input = "".to_string(); - stdin.read_line(&mut input).unwrap(); - println!( - "{}", - core::cat_to_num( - input.trim().to_string().split(" ").into_iter().map(|item| item.to_string()).collect(), - base4::alphabet(), - base4::char_length() - ) - ) - } else if trimmed == "2".to_string() { input = "".to_string(); stdin.read_line(&mut input).unwrap(); println!( @@ -34,7 +23,24 @@ fn main() { base4::alphabet(), base4::char_length() ) - ) + ); + } else if trimmed == "2".to_string() { + input = "".to_string(); + stdin.read_line(&mut input).unwrap(); + println!( + "{}", + core::cat_to_num( + input + .trim() + .to_string() + .split(" ") + .into_iter() + .map(|item| item.to_string()) + .collect(), + base4::alphabet(), + base4::char_length() + ) + ); } else { println!("Invalid input, exiting..."); break;