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
44
45
46
47
48
49
50
51
52
pub fn parse_and_iterate(loop_counter: i32, number: i32) -> i32 {
let int_to_str: String = number.to_string();
let mut char_vec: Vec<char> = int_to_str.chars().collect();
char_vec.sort();
let mut reversed_vec = char_vec.to_vec();
reversed_vec.reverse();
let smaller_str = char_vec.iter().cloned().collect::<String>();
let rev_str = reversed_vec.iter().cloned().collect::<String>();
let smaller_int: i32 = smaller_str.parse().unwrap();
let larger_int: i32 = rev_str.parse().unwrap();
let mut result = larger_int - smaller_int;
if result < 10 {
result = result * 1000
} else if result < 100 {
result = result * 100
} else if result < 1000 {
result = result * 10;
}
if result == 6174 {
return loop_counter + 1;
} else if result == 0 {
return -1;
} else {
return parse_and_iterate(loop_counter + 1, result);
}
}
pub fn calculate(num: i32) -> i32 {
if num > 9999 || num < 1000 {
return -1;
} else if num == 6174 {
return 0;
}
return parse_and_iterate(0, num);
}
pub fn main() {
let answer = calculate(1234);
println!("{}", answer);
}