You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB
Zig

const input = @embedFile("input2");
const std = @import("std");
pub fn main() !void{
var horizontal: usize = 0;
var depth: usize = 0;
var aim: usize = 0;
var iter = std.mem.tokenize(u8, input, "\n "); // You can split on 2 delimeters, by adding them to the string
while(iter.next())|direction|{
var value = try std.fmt.parseInt(usize, iter.next().?, 10);
if(std.mem.eql(u8, direction, "up")){ aim -= value; }
if(std.mem.eql(u8, direction, "down")){ aim += value; }
if(std.mem.eql(u8, direction, "forward")){
horizontal += value;
depth += (aim * value);
}
}
std.debug.print("result: {}", .{depth * horizontal});
}
test "Part 1"{
var horizontal: usize = 0;
var depth: usize = 0;
var iter = std.mem.tokenize(u8, input, "\n "); // You can split on 2 delimeters, by adding them to the string
while(iter.next())|direction|{
var value = try std.fmt.parseInt(usize, iter.next().?, 10);
if(std.mem.eql(u8, direction, "forward")){ horizontal += value; }
if(std.mem.eql(u8, direction, "up")){ depth -= value; }
if(std.mem.eql(u8, direction, "down")){ depth += value; }
}
std.testing.expect(1762050 == (depth * horizontal));
}
test "part 2"{
var horizontal: usize = 0;
var depth: usize = 0;
var aim: usize = 0;
var iter = std.mem.tokenize(u8, input, "\n "); // You can split on 2 delimeters, by adding them to the string
//First token is the direction
while(iter.next())|direction|{
var value = try std.fmt.parseInt(usize, iter.next().?, 10);
if(std.mem.eql(u8, direction, "up")){ aim -= value; }
if(std.mem.eql(u8, direction, "down")){ aim += value; }
if(std.mem.eql(u8, direction, "forward")){
horizontal += value;
depth += (aim * value);
}
}
std.testing.expect(1855892637 == (depth * horizontal));
}