master
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}