master
Raw Download raw file
 1const std = @import("std");
 2const io = std.io;
 3const fmt = std.fmt;
 4
 5pub fn main() !void {
 6    const allocator = std.heap.page_allocator;
 7
 8    // Read from stdin, line by line, into ArrayList of u16s
 9    var buf: [1024]u8 = undefined;
10    const stdin = io.getStdIn().reader();
11    var depthReport = std.ArrayList(u16).init(allocator);
12    defer depthReport.deinit();
13    while (try stdin.readUntilDelimiterOrEof(&buf, '\n')) |line| {
14        const depth = fmt.parseUnsigned(u16, line, 10) catch {
15            std.debug.print("PARSE ERR: {s}\n", .{line});
16            continue;
17        };
18        try depthReport.append(depth);
19    }
20
21    // Create derivative 3 sweep array
22    var depth3 = std.ArrayList(u16).init(allocator);
23    defer depth3.deinit();
24    const dR = depthReport.items;
25    for (dR) |_,i| {
26        if (i > 1) {
27            const sweep = dR[i-2] + dR[i-1] + dR[i];
28            try depth3.append(sweep);
29        }
30    }
31
32    // Count number of increases in depth3 list
33    var inc: u16 = 0;
34    const d3 = depth3.items;
35    for (d3) |d,i| {
36        if (i > 0) {
37            const prev = d3[i-1];
38            if (prev < d){
39                inc += 1;
40            }
41        }
42    }
43    std.debug.print("{d}\n", .{inc});
44}