summary refs log tree commit diff homepage
path: root/src/bin/day03.rs
blob: 76b5aa58e3ce06643d69bb5cd4dda8a47825be00 (plain) (blame)
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
53
54
55
56
57
58
59
60
61
62
use std::io::{self, Read};
use std::str::FromStr;

struct Triangle(u32, u32, u32);

impl Triangle {
    fn valid(&self) -> bool {
        self.0 + self.1 > self.2
            && self.1 + self.2 > self.0
            && self.0 + self.2 > self.1
    }
}

impl FromStr for Triangle {
    type Err = ();
    fn from_str(s: &str) -> Result<Self, ()> {
        let mut iter = s.split_whitespace().map(str::parse);
        match (iter.next(), iter.next(), iter.next()) {
            (Some(Ok(a)), Some(Ok(b)), Some(Ok(c))) => Ok(Triangle(a, b, c)),
            _ => Err(()),
        }
    }
}

fn solve1(input: &str) -> usize {
    input.lines()
        .map(str::parse)
        .map(Result::unwrap)
        .filter(Triangle::valid)
        .count()
}

fn solve2(input: &str) -> usize {
    let triangles: Vec<Triangle> = input.lines()
        .map(str::parse)
        .map(Result::unwrap)
        .collect();

    triangles.chunks(3)
        .flat_map(|triple| {
            vec![
                Triangle(triple[0].0, triple[1].0, triple[2].0),
                Triangle(triple[0].1, triple[1].1, triple[2].1),
                Triangle(triple[0].2, triple[1].2, triple[2].2),
            ]
        })
        .filter(Triangle::valid)
        .count()
}

fn main() {
    let mut input = String::new();
    io::stdin().read_to_string(&mut input).unwrap();

    println!("Part 1: {}", solve1(&input));
    println!("Part 2: {}", solve2(&input));
}

#[test]
fn part1() {
    assert_eq!(0, solve1("5 10 25"));
}
ef='/catgirl/commit/input.c?h=1.3&id=41e7105fecdb3516a1711003ba3fccdf9d3cfd3d&follow=1'>Remove extraneous slash from unrecognized commandJune McEnroe 2018-08-07Highlight and beep pingsJune McEnroe 2018-08-07Factor out allocating conversion between wcs and mbsJune McEnroe 2018-08-07Match commands case-insensitivelyJune McEnroe 2018-08-07Convert input to multibyte before handlingJune McEnroe 2018-08-07Populate tab-complete listJune McEnroe 2018-08-07Fix /me formatting side-effectsJune McEnroe 2018-08-07Define ui.c BUF_LEN with enumJune McEnroe 2018-08-07Hack clang into checking uiFmt format stringsJune McEnroe 2018-08-07Handle PART and QUIT without messagesJune McEnroe 2018-08-07Make safe filling the who bufferJune McEnroe 2018-08-07Add reverse and reset IRC formatting codesJune McEnroe 2018-08-06Rewrite line editing again, add formattingJune McEnroe 2018-08-06Fix allocation size in vaswprintfJune McEnroe 2018-08-06Implement word wrappingJune McEnroe 2018-08-06Use wchar_t strings for all of UIJune McEnroe 2018-08-06Rename line editing functionsJune McEnroe 2018-08-05Initialize all possible color pairsJune McEnroe 2018-08-05Refactor color initializationJune McEnroe 2018-08-05Add ^L redrawJune McEnroe 2018-08-05Use 16 colors if availableJune McEnroe 2018-08-05Limit parsed colors to number of mIRC colorsJune McEnroe 2018-08-04Show source link on exitJune McEnroe 2018-08-04Implement line editing, scrollingJune McEnroe 2018-08-04Handle /topicJune McEnroeterbox.c?h=1.6&id=08456da07fadec93973eb28d059d9382149f3d75&follow=1'>Include <>/-/* around nicks in coloringJune McEnroe 2020-02-22Use (almost) the full range of IRC colors for nicksJune McEnroe-31 18:55:09 -0400'>2020-03-31Update unscoop catgirl matchersJune McEnroe I'm not concerned about keeping the old matchers since I'm almost entirely certain I was the only one who ever used the old version of catgirl, and I already imported those logs. 2020-03-31Fix writing verbose to stderrJune McEnroe 2020-03-02Include <>/-/* around nicks in scoop coloring 1.1June McEnroe 2020-03-02Replace .mk files with configure scriptJune McEnroe 2020-02-28Implement the causal.agency/consumer capabilityJune McEnroe 2020-02-22Include <>/-/* around nicks in coloringJune McEnroe 2020-02-22Use (almost) the full range of IRC colors for nicksJune McEnroe