fn getline() -> String { let mut a = String::new(); std::io::stdin().read_line(&mut a).ok(); return a; } fn main() { let input = getline(); let splited: Vec<&str> = input.trim().split(" ").collect(); let a = splited[0].parse::().unwrap(); let b = splited[1].parse::().unwrap(); let result = logic(a, b); for i in result.iter() { println!("{}", i); } } fn check_three(x: u32) -> bool { let s = x.to_string(); for char in s.chars() { if char == '3' { return true; } } return false; } #[test] fn test_check_three() { let a = check_three(132); assert_eq!(a, true); let a = check_three(568468); assert_eq!(a, false); } fn logic(a: u32, b: u32) -> Vec { let mut res: Vec = vec![]; for i in a..b+1 { if i % 3 == 0 { res.push(i); } else if check_three(i){ res.push(i); } } return res; } #[test] fn test_logic() { let res = logic(1, 10); assert_eq!(res, vec![3, 6, 9]); let res = logic(10, 20); assert_eq!(res, vec![12, 13, 15, 18]); }