about summary refs log tree commit diff
path: root/aoc/2021/09/part-one.zig
blob: 8e3ae15e388992b4dc221688557711edceb72075 (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
const print = std.debug.print;
const std = @import("std");

const input = @embedFile("input");

inline fn get(x: i8, y: i8) u8 {
    return switch (x) {
        0...99 => switch (y) {
            0...99 => input[@intCast(usize, x) + @intCast(usize, y) * 101],
            else => ':',
        },
        else => ':',
    };
}

pub fn main() void {
    var sum: usize = 0;
    defer print("{}\n", .{ sum });

    var row: i8 = 0;
    while (row < 100) : (row += 1) {
        var col: i8 = 0;
        while (col < 100) : (col += 1) {
            const height = get(col, row);
            sum += @boolToInt(@reduce(.And, @Vector(4, u8){
                get(col + 1, row),
                get(col, row + 1),
                get(col - 1, row),
                get(col, row - 1),
            } > @splat(4, height))) * (height - '/');
        }
    }
}