1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
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~"); } }