Solved day 6 part 1. Part 2 looks scarier
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
4a266a3dc1
commit
906acdbe62
3 changed files with 282 additions and 0 deletions
10
inputs/day06.example.txt
Normal file
10
inputs/day06.example.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
||||
130
inputs/day06.txt
Normal file
130
inputs/day06.txt
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
.......................#...................#....#..#......#.................#.#..#........................#.#..............#.....#
|
||||
................#.#.......#..#.......#.................................................................................#.##.......
|
||||
............#..............#......................#...#.....#...#..........##.........#.....#.....................................
|
||||
..#...#......................................#............................#..................#..........#..#......................
|
||||
....#........#.#....................#..........#.....#.............#..#............................#..................#......#....
|
||||
..........................................................#................#............................................#.........
|
||||
..#............................#.....#...........................#...........#........##...........................#..#...........
|
||||
.....................#...........................#.#..............#......................................#.........#....#.....#...
|
||||
.#...#.#.................#....................#...............................................................#.#..........#......
|
||||
....#....................................#...........................................#.....#..........#...........................
|
||||
.......................#..........#..............#......#....#.......#........................................#.#.................
|
||||
......#...........................................................#...#............#.................#............................
|
||||
.......#.................#..#.....................#...............................................................................
|
||||
..............#....................#.#..........#........#......#................#.................#..........#...................
|
||||
#.#.......................................#.........................#...................................#.........................
|
||||
...#.........................................................................................#................#..................#
|
||||
#.....#....#............................................................#.........................#..................#.#..........
|
||||
.#.....#.#.......#.#..................#.#......................#.......#.....#..#..................##.....#.......#...#...........
|
||||
....#.........#.................................#..........#........#...............#................#...................#....#...
|
||||
.................#...............#...#.................#.................................................#........................
|
||||
....#...#...............................#..................................................#..........#................#.....#....
|
||||
...........#........#....#.......#...#..........#...............#.....#.....#.....#..........#....................................
|
||||
............#.........#.................#................#.................#.#..................................................#.
|
||||
............#......................................#...................................................................#..........
|
||||
...........#....#.....................................................................................#............#..........#...
|
||||
..........#........................................#.............#.................#........................#..#.......#........#.
|
||||
......#.............................#.................##..................................#.....................#.................
|
||||
.#.................................#.............................................#.................##.....#..............#......#.
|
||||
.........................#..............................#..........#...........#....#................#......................#.....
|
||||
.......#...................#......##........................#.........#...........................................................
|
||||
......................................................................##...........#................#.............................
|
||||
....#...................................##...............................................#........................................
|
||||
...##.....#..#........#.................#..............................................................#..........................
|
||||
........##......#....................#..............................#......................#...................#..................
|
||||
.........................................................#.......................................................#.#..............
|
||||
..........#.............................#.........#...............#................#.#.........#..........................#.#.....
|
||||
....................#...................#..#.......................................................#..........#...............#...
|
||||
...........................................................#........................#.........#........#..........................
|
||||
.......#..............#......#.................................#...................##...........................#.........#.......
|
||||
#...#...............................................................................................................#.............
|
||||
................................#..#....#............#...........#..................#.............................#...............
|
||||
....................#..............#.........#.................................#.............#..##................................
|
||||
#...#..................................................................................#.....#...........#........................
|
||||
........#...........#........#...#..................#.....#....#.........#.........................#...........................#..
|
||||
.............#...#...................................................................#...........#................................
|
||||
.............#........................................#...#.............#..............................#..#.........#.............
|
||||
...#.................................................................................#.............#..........................##..
|
||||
...#..............................................................................................................................
|
||||
................#.........#..................................#...................#................................................
|
||||
...#................#...#.#.....................#...........#..................................#........#....#......#.............
|
||||
..........................#.....................#..#...................................##........................................#
|
||||
#........................#...............................................#........#..#..........#...........................#.....
|
||||
.#............#.#..............................................................#...........#......................................
|
||||
......#..................................................................#.......#..............................#...#....#........
|
||||
........#........................#.........#.............#.....#..................................................................
|
||||
...............................................................................#...........................................#......
|
||||
........................#..................................#.....................................................#................
|
||||
............................................................#..........................#.................#.......................#
|
||||
.....................#..#.........................#..............#.............................#........#..............##......#..
|
||||
.....................#.................................................#.......#............#........................#.......#....
|
||||
......................#.....................................................#......#............................#.................
|
||||
................................................................#...#..##..#.....................................#...............#
|
||||
..............#..............................................................................................#....................
|
||||
............................................#......#..........#...............................................................#...
|
||||
....#.................................#..................................................................#..........##..#.........
|
||||
............#.....#................................................................................#..........#.........#.........
|
||||
.....................#......................................#.........#....................................................#....#.
|
||||
.........................#...............................#...............................#....................#...................
|
||||
.#.....................#.#.......................................#....#...........#.......................#.......................
|
||||
.....................................................#.#..#......................................................................#
|
||||
#..........#..........................#............................#.............#..................#.............#...........#...
|
||||
........#.........................................................................................................................
|
||||
..........#.............#.........................................#................................................#..............
|
||||
...........#................................#.................#...........................#.............................#.........
|
||||
..................#.........................................#.#..................#...#...........#.......#..#.....................
|
||||
........................................................#...#.......................................................#.............
|
||||
.........................................................................#.......#..#.....#.......................................
|
||||
............#..............................................................#.........#..............#.............#...............
|
||||
#...#..........................................#...........#.....#.....................................#...............#..........
|
||||
...........................#............#.........................................................................................
|
||||
...#..........................................#.......................................................................#...........
|
||||
..............#......#.....#.....................#..........................#.....................................................
|
||||
.........................#....#...................#...#.......#..............................#........................#...........
|
||||
.............................#............^.#................................................#......#..#.#...........#............
|
||||
....................................................................................#...#.#...................................#...
|
||||
.......................#..............................##..............................................#...........................
|
||||
......................#...................................................#..........................................#............
|
||||
......#........................................................................#.....................................#............
|
||||
.......................#.............................#........................#...........#...........#............#...........#..
|
||||
....#...............#..#......#....#..................#.............#.......#...............#.......................#.............
|
||||
............#...#..................#..............................................................................................
|
||||
....#.......#.................#.......................................................#..#......#.................................
|
||||
.........#......#..........#......................#.....................#..................#.#....................................
|
||||
...............##.......................................................#...#.............................#.......#...............
|
||||
........................................................##...................#...#............#......#............................
|
||||
...........#...#..............#.............................................................#...................#............#....
|
||||
...............................................#.....#.....#......................................................................
|
||||
.#....................#...#........#....................#.#.........#..........#................................#................#
|
||||
.............#.....#..#....................................#.#...........#.................................................#..#.#.
|
||||
......#.....................................#....................................................................#................
|
||||
............................................................##......#.....................#.......#.....................#...#.....
|
||||
.#.......#......................#.................................................................................................
|
||||
................#....#......................#.........#...................#........#.......##.....#...............................
|
||||
..#....#....................#............................................................#.#......#............#.....#.#....#.....
|
||||
.................................#.................................................#.......#......................................
|
||||
..................#...........#....#.....................#......#...............#..................#....................##........
|
||||
.##...............................................#............#...........................#......................................
|
||||
.............#...........#...........................#..#.......#...#..........#......................#..........#................
|
||||
.......#...................................#.................#....#..............................................................#
|
||||
........#....................................................#.................#.....#.........#.#................................
|
||||
................#.................................#.....................#.....#.....#............................##...............
|
||||
..............................................##.................#..##........#...........#............#..........................
|
||||
....#......................................#...............................................................................#......
|
||||
..#..............#.#................#..#..............#.......................................#.#.......#..............#......#..#
|
||||
.....#..............................................................................................................#.......#.....
|
||||
..#.......#.#..........#.......#..................................#..........#.......#.................#...........#...........#..
|
||||
...............#.....#................#............#................#............#.....#.#........#...............................
|
||||
....#.....................#................#.....................................#......................#.#.......#....#..........
|
||||
........#...............#...#.....................................................#........#.........#.........#..................
|
||||
...#......#..........................#.....#..........................##.......#....#.............................................
|
||||
.............#................................#............................#.....#.......#......#................................#
|
||||
.......................#............#..........................#..................................................................
|
||||
.................................................#..............#...#...........................#.................................
|
||||
......#...................#..............................................................................................#....#..#
|
||||
....................................#......#.....................#..............#.......#...................#.....................
|
||||
............#...................................#...........#........#........#...........................................##......
|
||||
#...........#..........................#....................................#.........#................................#..........
|
||||
......##..#...............................................................#...............................#.........#.............
|
||||
.......................#.....#.........................#...#.........................#.....#..........#.#...#.....................
|
||||
.......................#..#.....#.....#..........................#.........#.....#....................#.....#....................#
|
||||
142
src/day06.zig
Normal file
142
src/day06.zig
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
const std = @import("std");
|
||||
const fmt = std.fmt;
|
||||
const print = std.debug.print;
|
||||
const args = @import("lib/args.zig");
|
||||
const files = @import("lib/files.zig");
|
||||
|
||||
const Tile = enum {
|
||||
Unvisited,
|
||||
Visited,
|
||||
Obstacle,
|
||||
};
|
||||
|
||||
const Direction = enum(u2) {
|
||||
Up,
|
||||
Right,
|
||||
Down,
|
||||
Left,
|
||||
};
|
||||
|
||||
const Guard = struct {
|
||||
direction: Direction = .Up,
|
||||
x: usize,
|
||||
y: usize,
|
||||
|
||||
fn rotate(self: *Guard) void {
|
||||
self.direction = @enumFromInt(@addWithOverflow(1, @intFromEnum(self.direction))[0]);
|
||||
}
|
||||
|
||||
fn walk(self: *Guard, map: *[130][130]Tile, size: usize) ?bool {
|
||||
var new_x = self.x;
|
||||
var new_y = self.y;
|
||||
switch (self.direction) {
|
||||
.Up => {
|
||||
if (self.y == 0) {
|
||||
return null;
|
||||
}
|
||||
new_y -= 1;
|
||||
},
|
||||
.Right => {
|
||||
if (self.x == size - 1) {
|
||||
return null;
|
||||
}
|
||||
new_x += 1;
|
||||
},
|
||||
.Down => {
|
||||
if (self.y == size - 1) {
|
||||
return null;
|
||||
}
|
||||
new_y += 1;
|
||||
},
|
||||
.Left => {
|
||||
if (self.x == 0) {
|
||||
return null;
|
||||
}
|
||||
new_x -= 1;
|
||||
},
|
||||
}
|
||||
|
||||
switch (map[new_y][new_x]) {
|
||||
.Unvisited => {
|
||||
self.x = new_x;
|
||||
self.y = new_y;
|
||||
map[new_y][new_x] = .Visited;
|
||||
return true;
|
||||
},
|
||||
.Visited => {
|
||||
self.x = new_x;
|
||||
self.y = new_y;
|
||||
return false;
|
||||
},
|
||||
.Obstacle => {
|
||||
// This will overflow the stack if the guard is surrounded
|
||||
// by obstacles, should not happen for the inputs we have.
|
||||
self.rotate();
|
||||
return self.walk(map, size);
|
||||
},
|
||||
}
|
||||
unreachable;
|
||||
}
|
||||
};
|
||||
|
||||
fn printMap(map: [130][130]Tile, size: usize) void {
|
||||
for (0..size) |y| {
|
||||
for (0..size) |x| {
|
||||
const print_char: u8 = switch (map[y][x]) {
|
||||
.Visited => 'X',
|
||||
.Unvisited => '.',
|
||||
.Obstacle => '#',
|
||||
};
|
||||
print("{c}", .{print_char});
|
||||
}
|
||||
print("\n", .{});
|
||||
}
|
||||
}
|
||||
|
||||
// walkMap walks the guard along the map until they exit, and returns
|
||||
// the number of unique, unvisited tiles they walked along.
|
||||
fn walkMap(map: *[130][130]Tile, size: usize, guard: *Guard) usize {
|
||||
var unique_visited_tiles: usize = 0;
|
||||
while (guard.walk(map, size)) |new_tile| {
|
||||
if (new_tile) {
|
||||
unique_visited_tiles += 1;
|
||||
}
|
||||
}
|
||||
return unique_visited_tiles;
|
||||
}
|
||||
|
||||
pub fn main() !void {
|
||||
const input_path = args.getFirstArg();
|
||||
const input = try files.openForReading(input_path);
|
||||
|
||||
var map: [130][130]Tile = .{.{.Unvisited} ** 130} ** 130;
|
||||
var map_size: usize = undefined;
|
||||
|
||||
var line_buf: [131]u8 = undefined;
|
||||
var guard = Guard{
|
||||
.x = undefined,
|
||||
.y = undefined,
|
||||
};
|
||||
var y: usize = 0;
|
||||
var visited_tiles: usize = 0;
|
||||
while (files.readLine(input, &line_buf)) |line| {
|
||||
defer y += 1;
|
||||
map_size = line.len;
|
||||
for (line, 0..) |tile, x| {
|
||||
if (tile == '^') {
|
||||
guard.x = x;
|
||||
guard.y = y;
|
||||
map[y][x] = .Visited;
|
||||
visited_tiles += 1;
|
||||
} else if (tile == '#') {
|
||||
map[y][x] = .Obstacle;
|
||||
}
|
||||
}
|
||||
} else |err| {
|
||||
print("Done reading input with error: {any}\n", .{err});
|
||||
}
|
||||
|
||||
visited_tiles += walkMap(&map, map_size, &guard);
|
||||
printMap(map, map_size);
|
||||
print("Visited tiles: {d}\n", .{visited_tiles});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue