aboutsummaryrefslogtreecommitdiff
path: root/challenge-273/atschneid/rust/ch-1.rs
blob: aa48e39f027f426adf105361f2ee99fb6571fae0 (plain)
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
// fn percent_of_string_char_v1(string: &str, character: &char) -> u32 {
//     let mut sum: u32 = 0;
//     let mut string_length: u32 = 0;
//     for c in string.chars() {
//         string_length += 1;
//         if c == *character {
//             sum += 1;
//         }
//     }
//     ((sum as f64 / string_length as f64) * 100.0).round() as u32
// }

fn percent_of_string_char_v2(string: &str, character: &char) -> usize {
    let match_count = string.chars().filter(|c| c == character).count();
    let string_length = string.chars().count();
    let mc_100 = 100 * match_count;
    let (div, remainder) = (mc_100 / string_length, mc_100 % string_length);
    if remainder * 2 >= string_length {
        div + 1
    } else {
        div
    }
}

fn main() {
    let tests = vec![
        ("perl", 'e'),
        ("java", 'a'),
        ("python", 'm'),
        ("ada", 'a'),
        ("ada", 'd'),
        ("ballerina", 'l'),
        ("analitik", 'k'),
        ("rust", 'r'),
    ];

    for val in tests.iter() {
        let (string, character) = val;
        let percent = percent_of_string_char_v2(string, &character);
        println!("{string} :: {character} => {percent}");
    }
}