[ADD] main: Added day 6 solution
This commit is contained in:
parent
a5e32e9995
commit
a1983d9493
3 changed files with 361 additions and 0 deletions
130
06/input.txt
Normal file
130
06/input.txt
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
.......................#....#....................#....#..##.##.........................................#...........#...........#..
|
||||||
|
.............#........................................#....................#............#.......................#............#....
|
||||||
|
.........#.............#..#....#..........................#.......#.#.......#...............................................##....
|
||||||
|
..........#....#....................................................#....................#...........#....#.......................
|
||||||
|
.............#...#....................#...........#.........#...........................#............#............................
|
||||||
|
..........................................................................................#.....#.......#...................##....
|
||||||
|
...............................................#.#......#..............#...#...................##...........#....#..#...#.........
|
||||||
|
..#.................#......#........#......................#.......#...............................#..............................
|
||||||
|
.........................#...............#.....................................#....#..#..#............................#..........
|
||||||
|
......................#.................................................................#..........#..............#...#......#....
|
||||||
|
............................#.....##..........#.....................#..........#..#.......#.......................................
|
||||||
|
......#...###...........#.................................................................#.......................................
|
||||||
|
......................#.#..#................#..........#................#...........#............#..............#...#.........#...
|
||||||
|
....#.........................#..#...............................................#....#.............#.............................
|
||||||
|
..#............#...#............#..........#...............#.....#....##.........................#........#.......................
|
||||||
|
..................#............#..............#..........................................................#..#..#........#.........
|
||||||
|
.......#...#............#..........................................................#..............................#.............#.
|
||||||
|
..#................#....................#.#...#.................................#.........#....................#.........#........
|
||||||
|
...................................#..#..........................#........#.....#.........................................#.......
|
||||||
|
...........##.................##............#................#...#..................................##...#........................
|
||||||
|
..............#..................#....................................................................#...........................
|
||||||
|
.#...#....#..........##..................................#.............................................................#......#...
|
||||||
|
......#.....#................................#...............................................................#......#.............
|
||||||
|
..........#.............................................#............................##....#.........................#............
|
||||||
|
..........#......#.................#...#........#...........#.#..........#........#....................................#..........
|
||||||
|
.#..................#.#............................#.......................#.........#.......#....................................
|
||||||
|
.....................#....#..................#..................................................##..#................#............
|
||||||
|
......#......................#..#..............##.......#..................................................#..............#.......
|
||||||
|
..........................................................................#........#...#..............#.................#.........
|
||||||
|
....................##....#.......................#........#...................#.............##.......#...........................
|
||||||
|
.........#............#..................................................................................#........................
|
||||||
|
........................................................................#................#........................#.............#.
|
||||||
|
............#.......#.................................#............#..............................................................
|
||||||
|
.#.............#...............................................#....#.........#....#..................................#.#.........
|
||||||
|
.......................................#.....................................................................................#....
|
||||||
|
........#........................................#...............#........................................................#.......
|
||||||
|
...............................#.........#........#...........#.......................................................#.........#.
|
||||||
|
.....................##...#....................................................#............#..................#..#..........##...
|
||||||
|
................#..........#...#............................................................#...##................................
|
||||||
|
...................#........#...............................#.................#.........#.........................................
|
||||||
|
.................................................................................................................#................
|
||||||
|
............................#......................................................#.....................................#......#.
|
||||||
|
......#................#............................#.............................................................................
|
||||||
|
..#...........#.....#.........#....#................#............................................#................................
|
||||||
|
..................................#.......#.......#...........#.........#................#.....................................#.#
|
||||||
|
...............................................#............................................#.#.....................#.......##....
|
||||||
|
..............................#...............#..............................#...#...#.............................#...........#..
|
||||||
|
.......#...........#..........................................................#........#..#.........#.....#.....#...#.............
|
||||||
|
......................................................#.#............#.........#.#...........#........##.....#....................
|
||||||
|
...........................................................................#..........#.........................#.........#.......
|
||||||
|
....#.........................#.....................................................................................#...#......#..
|
||||||
|
...#.......#............................................................#...............................#....................##.#.
|
||||||
|
.................................#.....#................................................................#.........................
|
||||||
|
.....................................#........................#....................................#..............................
|
||||||
|
..............#.......................................................................#.......#....................#..........#...
|
||||||
|
................................#..........................................#.................................#.....#..............
|
||||||
|
...........#.......................................................#...............#.....................#..............#......#..
|
||||||
|
..................................#..........................#.................................................................#..
|
||||||
|
.............##......#....................................................#......#...............................................#
|
||||||
|
#.......#...................#..........#...................#.................#..................................................#.
|
||||||
|
.......#..........#.....##...........#.......................#............#..............................#.............#..........
|
||||||
|
.............#...................##......................................................................................#........
|
||||||
|
#.............................#...................................................................#...............................
|
||||||
|
.#...................................#....##..................................................................................#...
|
||||||
|
.................................#.#..................#..#..#..........................#.......#..................................
|
||||||
|
..................#....#....#....................................................#....................................#........#..
|
||||||
|
..........................................#...#.....#...........#.........#............#............#..........................#..
|
||||||
|
...............................................................................#..............................................#...
|
||||||
|
.............................#......#....................#....#....................................................#.#.#..........
|
||||||
|
................##......#........#........#...........#..........................#......................#..............#..........
|
||||||
|
.....................#.....#..#.............................................................................................#.....
|
||||||
|
.......#..#...........#................................................................#..........................................
|
||||||
|
#.......................................................................................................#...#.....................
|
||||||
|
.#..........................................................#.....................................................#...............
|
||||||
|
#.....#...#...............#..#......#........#..#...................#...................#.................#.......................
|
||||||
|
..#.................................................................................#.#......................#....................
|
||||||
|
.......................#.............#..........#.......................#...................................#.....................
|
||||||
|
.................#......#......#...#.#.#.............................#.......................................................#....
|
||||||
|
..#...........................................................................................................#...................
|
||||||
|
.................................#..................#.....#........#.........................................................#....
|
||||||
|
.............#......................#...............................................#...#.............................#...#....#..
|
||||||
|
.#............................#..........................#.#...........................#..........................#.#.............
|
||||||
|
.............................#.........#.................##............................#...................#......................
|
||||||
|
.........#......#....#.........#..............................................................................................#..#
|
||||||
|
.....................#......#.................#..#..........................#..................#..............................#.#.
|
||||||
|
........................................................#......................#............#.......#......#......................
|
||||||
|
........................................#....##.#........#......#..............................#..........#..........#.##.........
|
||||||
|
.............#.......#.......#......................#..........................................#.........#............#...#...#.#.
|
||||||
|
..................#........................................................#...............................#.....#.....#..........
|
||||||
|
.........#.................#........#..............^..............#.................##......#...................................#.
|
||||||
|
....#...................#.#.................................#...#.................................................#...............
|
||||||
|
.................#.............................................#................#.....#......#.......#...................#........
|
||||||
|
...............#...............................................................................#..#...............#...............
|
||||||
|
........................................##..........................................................................##............
|
||||||
|
............................................#...................#........#...#...#....#.........#...................#.............
|
||||||
|
.....#...#...................#....................................#......#...........#...............#............................
|
||||||
|
........................#..................#.....................#.................................................#......##......
|
||||||
|
...#.................#....................#..................................#.#.........................#.......#................
|
||||||
|
....................#............#..................................#...#......#....................#...............#.............
|
||||||
|
.....#...............#.......###........#............#......................#.......#....#........................................
|
||||||
|
....................#........#...........#..................................#..#................#.............#...................
|
||||||
|
.....#..................#...................#.#..................................#.......#..#.....................................
|
||||||
|
..#..#.......#........................................#.................................................................#.........
|
||||||
|
.......#............#...#....#.......................#.#...................................#.........................#..#.#.......
|
||||||
|
..............#......................................................................................................#............
|
||||||
|
............#....................#........................#.........#...#.........................................................
|
||||||
|
...................................#..............................#.........................................................#.....
|
||||||
|
......##...........#.#........................#.........................................................................#.........
|
||||||
|
..........................#.....................................................#..............................#..............#...
|
||||||
|
.........................#...#.....................#..#................#................................................#....#....
|
||||||
|
...#.................................#...#.......#...............................................................#................
|
||||||
|
..................................#....................................#...........................##..#.#.....................#..
|
||||||
|
.#.............#.....#...............................................................#...............#...............#..#.........
|
||||||
|
.........#.............................#........................#.............#......................#........#............#......
|
||||||
|
...................................#..#...#.....................................#.................................................
|
||||||
|
........................................##..........#..............................................#.....................#........
|
||||||
|
......#...........................................#....#.....................#...................#..#.........#...................
|
||||||
|
.#....#.....#........##..................................#......#................................................#....#..##.......
|
||||||
|
..........#....................................................................##.........................#...........#...........
|
||||||
|
...........#.#......#.......#..................#............#...............................................#...#..............#..
|
||||||
|
.................................................................#.......#.........#.....#........#....##....#..........#.........
|
||||||
|
.............................#......................................................#.....#...#...#....#...........#..........#.#.
|
||||||
|
.....................#........#.........................#......................................#................#...............#.
|
||||||
|
.........................................................................#...................................................#....
|
||||||
|
..............#...#..#................#....................................#.......#....#.#...............#.........#.............
|
||||||
|
.......#......#.#............................................#.......#............................................................
|
||||||
|
##......................................................#..#.................................##...................#..#...........#
|
||||||
|
...........#.#...#........#............#..............................#........................#.........................#..#.....
|
||||||
|
................................................##.........................................#.................#....................
|
||||||
|
............................#....................................................#...#........................#.#......#........#.
|
||||||
221
06/main.go
Normal file
221
06/main.go
Normal file
|
|
@ -0,0 +1,221 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
const FILE_PATH = "./input.txt"
|
||||||
|
|
||||||
|
//const FILE_PATH = "./sample.txt"
|
||||||
|
|
||||||
|
func LoadInput(filename string) ([]string, error) {
|
||||||
|
file, err := os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
var lines []string
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
for scanner.Scan() {
|
||||||
|
lines = append(lines, scanner.Text())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := scanner.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return lines, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Vector2 struct {
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
type structuredInput = [][]byte
|
||||||
|
|
||||||
|
func TransformInput(lines []string) structuredInput {
|
||||||
|
var result = make([][]byte, 0)
|
||||||
|
|
||||||
|
for _, line := range lines {
|
||||||
|
result = append(result, []byte(line))
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
UP = iota
|
||||||
|
RIGHT = iota
|
||||||
|
DOWN = iota
|
||||||
|
LEFT = iota
|
||||||
|
)
|
||||||
|
|
||||||
|
var MOVEMENTS = []Vector2{
|
||||||
|
Vector2{0, -1},
|
||||||
|
Vector2{1, 0},
|
||||||
|
Vector2{0, 1},
|
||||||
|
Vector2{-1, 0},
|
||||||
|
}
|
||||||
|
|
||||||
|
func addVectors(a Vector2, b Vector2) Vector2 {
|
||||||
|
return Vector2{a.x + b.x, a.y + b.y}
|
||||||
|
}
|
||||||
|
|
||||||
|
func inBounds(point Vector2, limit Vector2) bool {
|
||||||
|
return point.x >= 0 && point.x < limit.x && point.y >= 0 && point.y < limit.y
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part1(input structuredInput) int {
|
||||||
|
var result = 0
|
||||||
|
|
||||||
|
var guard Vector2 = Vector2{}
|
||||||
|
var direction int = UP
|
||||||
|
var bounds Vector2 = Vector2{len(input[0]), len(input)}
|
||||||
|
var visited [][]bool = make([][]bool, len(input))
|
||||||
|
var next Vector2
|
||||||
|
|
||||||
|
for i := range visited {
|
||||||
|
visited[i] = make([]bool, len(input[i]))
|
||||||
|
}
|
||||||
|
|
||||||
|
for y := 0; y < len(input); y++ {
|
||||||
|
for x := 0; x < len(input[y]); x++ {
|
||||||
|
if input[y][x] == '^' {
|
||||||
|
guard.x = x
|
||||||
|
guard.y = y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visited[guard.y][guard.x] = true
|
||||||
|
|
||||||
|
for inBounds(addVectors(guard, MOVEMENTS[direction]), bounds) {
|
||||||
|
next = addVectors(guard, MOVEMENTS[direction])
|
||||||
|
|
||||||
|
if input[next.y][next.x] == '#' {
|
||||||
|
direction = (direction + 1) % 4
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
guard = next
|
||||||
|
visited[guard.y][guard.x] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range visited {
|
||||||
|
for j := range visited[i] {
|
||||||
|
if visited[i][j] {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
var visited [][][]bool
|
||||||
|
|
||||||
|
func generateVisited(bounds Vector2) {
|
||||||
|
visited = make([][][]bool, 4)
|
||||||
|
for i := range visited {
|
||||||
|
visited[i] = make([][]bool, bounds.y)
|
||||||
|
for j := range visited[i] {
|
||||||
|
visited[i][j] = make([]bool, bounds.x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func resetVisited() {
|
||||||
|
for i := range visited {
|
||||||
|
for j := range visited[i] {
|
||||||
|
for m := range visited[i][j] {
|
||||||
|
visited[i][j][m] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setPositionAsVisited(position Vector2, direction int) {
|
||||||
|
visited[direction][position.y][position.x] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasVisited(position Vector2, direction int) bool {
|
||||||
|
return visited[direction][position.y][position.x]
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkForLoop(field [][]byte, startPosition Vector2, bounds Vector2) bool {
|
||||||
|
var guard Vector2 = Vector2{startPosition.x, startPosition.y}
|
||||||
|
var direction = UP
|
||||||
|
var next Vector2
|
||||||
|
|
||||||
|
resetVisited()
|
||||||
|
|
||||||
|
setPositionAsVisited(guard, direction)
|
||||||
|
|
||||||
|
for inBounds(addVectors(guard, MOVEMENTS[direction]), bounds) {
|
||||||
|
next = addVectors(guard, MOVEMENTS[direction])
|
||||||
|
|
||||||
|
if field[next.y][next.x] == '#' {
|
||||||
|
direction = (direction + 1) % 4
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
guard = next
|
||||||
|
|
||||||
|
if hasVisited(guard, direction) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
setPositionAsVisited(guard, direction)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input structuredInput) int {
|
||||||
|
var result = 0
|
||||||
|
var guard Vector2 = Vector2{}
|
||||||
|
var bounds Vector2 = Vector2{len(input[0]), len(input)}
|
||||||
|
|
||||||
|
generateVisited(bounds)
|
||||||
|
|
||||||
|
for y := 0; y < len(input); y++ {
|
||||||
|
for x := 0; x < len(input[y]); x++ {
|
||||||
|
if input[y][x] == '^' {
|
||||||
|
guard.x = x
|
||||||
|
guard.y = y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for y := 0; y < len(input); y++ {
|
||||||
|
for x := 0; x < len(input[y]); x++ {
|
||||||
|
if input[y][x] == '.' {
|
||||||
|
input[y][x] = '#'
|
||||||
|
if checkForLoop(input, guard, bounds) {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
input[y][x] = '.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
input, err := LoadInput(FILE_PATH)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error loading input:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
structuredInput := TransformInput(input)
|
||||||
|
fmt.Println("Structured Input:", structuredInput)
|
||||||
|
|
||||||
|
fmt.Println("Solution Part 1: ", Part1(structuredInput))
|
||||||
|
fmt.Println("Solution Part 2: ", Part2(structuredInput))
|
||||||
|
}
|
||||||
10
06/sample.txt
Normal file
10
06/sample.txt
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
Loading…
Reference in a new issue