use std::ops::Neg;
fn enchode_letter(in_char: char) -> std::string::String {
const START_CHAR: char = 'a';
let diff = in_char as i32 - START_CHAR as i32;
let delta: i32 = if diff < 0 { diff.neg() } else { diff };
let shaft_len = delta / 5;
let jizz_len = (delta - (shaft_len * 5)) / 3;
let hands_cnt = delta - (shaft_len * 5) - (jizz_len * 3);
let shaft = "=".repeat(shaft_len as usize);
let jizz = "~".repeat(jizz_len as usize);
let mr_hands = "w".repeat(hands_cnt as usize);
let jizz_splash = "*".repeat(if diff < 0 { 1 } else { 0 } as usize);
return format!("8{}{}D{}{}", shaft, mr_hands, jizz, jizz_splash);
}
pub fn enchode(str: String) -> std::string::String {
str.trim()
.chars()
.map(enchode_letter)
.collect::<Vec<String>>()
.join(" ")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_enchode() {
assert_eq!(
enchode(String::from("Hello World")),
"8=====D* 8wD~ 8==wD 8==wD 8==wD~ 8=============D* 8==D* 8==wD~ 8===wwD 8==wD 8D~"
);
assert_eq!(enchode(String::from("Beans Beans the magical fruit, the more you eat, the more you toot")), "8======wD* 8wD~ 8D 8==D~ 8===D~ 8=============D* 8======wD* 8wD~ 8D 8==D~ 8===D~ 8=============D* 8===wD~ 8=wwD 8wD~ 8=============D* 8==wwD 8D 8=wD 8=D~ 8wwD 8D 8==wD 8=============D* 8=D 8===wwD 8====D 8=D~ 8===wD~ 8==========D~* 8=============D* 8===wD~ 8=wwD 8wD~ 8=============D* 8==wwD 8==wD~ 8===wwD 8wD~ 8=============D* 8====wD~ 8==wD~ 8====D 8=============D* 8wD~ 8D 8===wD~ 8==========D~* 8=============D* 8===wD~ 8=wwD 8wD~ 8=============D* 8==wwD 8==wD~ 8===wwD 8wD~ 8=============D* 8====wD~ 8==wD~ 8====D 8=============D* 8===wD~ 8==wD~ 8==wD~ 8===wD~");
}
}