initialise
This commit is contained in:
130
6/input
Normal file
130
6/input
Normal file
@@ -0,0 +1,130 @@
|
||||
......#...........#..............................#..............................#...........................##...............#....
|
||||
.............#..............#........#......##...................................................#............##...#..........#...
|
||||
...#..................#..............#.........#...#.........................................................................#..#.
|
||||
.....#..........#...................#.....................#..........#...........#......#..#...................#..................
|
||||
...#...............................................##..................#............#.....#...................#...................
|
||||
.#.#..#...................#.##.................#..........#................................#......#.........##..................#.
|
||||
....................#...................#....#.........#....................#....................................................#
|
||||
..........#......#...................................................................................................#....#.......
|
||||
.#...............#.........#...........#...............#...................#......#...............................................
|
||||
............#...........#........#..##.......#........#.....#................................##...................................
|
||||
...................#.#.............###.................##.................#.......................#.....#..............##.........
|
||||
.........................#...#............................#......#.......................#........................................
|
||||
.....................#..............................................#.......#......##......................................#......
|
||||
............................#.#............................................................................#.................#....
|
||||
.#.....#.......................................................#..........#.......................................................
|
||||
..............#..............................#.....#....#........#....................#....#.#...........#.#..................#...
|
||||
........................#...#...##......#...........................#.............#............................#..................
|
||||
...#........................................................#...#...........................#...#...............#........#........
|
||||
.........#..#..........#.....................................#..................................................................#.
|
||||
...........................................#.........#....#........................................#..#...........#...............
|
||||
..#..........#...........................................................................................#..............#.........
|
||||
...#.......#......................................#...............#...............................................................
|
||||
.#........#......#.#....................................#...#...........#..........#........#.#.......#.......................#...
|
||||
......................#...........#......##....................#..................#......#..............................#.......#.
|
||||
..............#......................#..............#...#.#............................................................#.#........
|
||||
..............#..................#...#..................#...#.....#...#...............#...........................................
|
||||
.............#............................##..#...#...............................................................##..............
|
||||
..#............................#.......#.#....................................#...................................................
|
||||
.......#.....#..........#......#.....#...................................#...........................#......#....#..............#.
|
||||
.#.................#.............................................#................#.............#.....#....................#......
|
||||
..............#.........#..#.....#...........#..............................#.................................#............#......
|
||||
....#.#............#............................................................#..........#......................................
|
||||
.........................................#.......#......#....................................#.....................#...#......#...
|
||||
....#.............................#....................................#..........#................................#..............
|
||||
.........#..#......#..............................................................#....................#..........................
|
||||
.......................................................##...#........#......................................................#.#..#
|
||||
..........................#.......##..##................................................................................#.........
|
||||
..................................##..................................................................#..........................#
|
||||
.#..................................................#..............#.....................#.....#..................................
|
||||
.......##........................#......................................................#..........#..............................
|
||||
.........#....#....#.........#.#........................#...#.....................................................#.....#.........
|
||||
....#.............................#....#....................#.....................#.....#......#.....................#..........#.
|
||||
............................................................................................#..........#......#...................
|
||||
..................................................................................#..........................#.#.....#.........#..
|
||||
..................................................#...................................................#......#.....#............#.
|
||||
..........................................^#................................................................................#.....
|
||||
...............#..........#.............................................#.....#....#...................#................#.........
|
||||
#..#....#........#........#.........#.......#.................#.......................#.#.............#...................#.......
|
||||
..#................................................................#......................................#.......................
|
||||
........#......................#.....................##.#..........#.............................#.............................#..
|
||||
....#..........#........................#.........................................................................................
|
||||
......#...#.#.#.........#.................#.....#.....#...#......#..................................................##........#...
|
||||
...#....#....................#...................................................................#......#...............#.........
|
||||
..#.......#.........................#..........#........#............................#......#....................#................
|
||||
.................................#.......................................#....................................................#..#
|
||||
......................#...#........................#.......................#.............#........................................
|
||||
......#.......#...................................................................................................#...............
|
||||
.............#............#......#............................#...........................................##......................
|
||||
..........................#.....................................................................................#.................
|
||||
....#..............................#......................#........................................#....#...........#.............
|
||||
................#.......#.........................................................................................................
|
||||
.............#............#........#.....#.........#.#.#............................#..........#..............#....#.......#.....#
|
||||
..#.....#...............................................................................................#...............#.........
|
||||
.......#...........#............#................#.......................................#..........................#......#......
|
||||
..........#........................................#......................#............#....................................#..#..
|
||||
.......#......#..............................#........................................................#.#.................#.......
|
||||
.#.................#..#.....................................................................................#...........##........
|
||||
#...................................#........................................#..............#.##........#..#.#.............#......
|
||||
......#...............#........#....#.........#.........#...#.......................#...........................#............#....
|
||||
...#...................................................................................#.......................................#..
|
||||
.....#.......................................#................#...............................................................#...
|
||||
.#................................................##................................#....................#...............#........
|
||||
.................................................#..#..................#.......#........................#...............#.....#...
|
||||
.....##.#.............................#.....................#................................................................#...#
|
||||
...........#....................#...........#...............#.................................................#.......#.......#..#
|
||||
........#....................................................#.....#....#.........................................#.....#.#.......
|
||||
...............#..........................#............#.#.................................................#......................
|
||||
...........#......#.....................#...................................................................#.#..............#....
|
||||
......#...#.........................#..........................................................#..................................
|
||||
.....................#................................................#..#........................................................
|
||||
..............#.................#............#....................#.#.......................................#............#........
|
||||
............#.....................#................#......#..........................#.#.........#............#...................
|
||||
........................................................................#.....................#...................................
|
||||
.............................#....................................................................................................
|
||||
.........................#...#..........................................#............................................#............
|
||||
..#...............................#.....#.....#.............#.......#..#.................##.#.......................#.........#.#.
|
||||
......................................#...........................................................................................
|
||||
...........#.....................................#................#...#.........................#........................#........
|
||||
..#...#..#..........................#.......#....#......................................................#................#........
|
||||
.....................................#...#.#........#...............#..#......#.....................................#...#.........
|
||||
.#..............#..............................................................#.........................##......................#
|
||||
..........#..................................#....#.........#...#.#..........#...#...................................##...........
|
||||
...............#.....................................................................................................#............
|
||||
.#.......#....................#...#..........................#.#...............#......................#........#.................#
|
||||
.............#....................#........................#..................#......#....#....#..................................
|
||||
........#..............................................................#.....................#....................................
|
||||
.......................#..............#.............#......#.........................................#.........................#..
|
||||
.......#.......#.#........#.......................#..#.......................................................#.#..................
|
||||
...............#..#....#.......................#.....#..............................#..................#.....................#....
|
||||
......#..............#...........................#............................##...........................#......................
|
||||
.......................................#........#................................#..........................#.....................
|
||||
.#.....................................#............#.............................................................#..#............
|
||||
..................#..................#.........................#............#..........#.........................#...#............
|
||||
.......................................................#..............#..........................................................#
|
||||
...#....#..#...#..#...................##....................#.....................#...................#.....#..........#..........
|
||||
.......................#........#....................##.................#.......................................................#.
|
||||
........#.......#.......................#.#......##...##........#..##.........................................#...............##..
|
||||
....#..........................#.........##..#......#...........................#........#........#...#...........................
|
||||
...#..........................#.....#.....................................#.......................................................
|
||||
....................................##.......#..............................#.............#...#......#.............#..............
|
||||
.#..............................#...............................................................................................#.
|
||||
.....#................................................................................##.....#..............#.#...................
|
||||
...........................................................................................#....#................#................
|
||||
...#..#...................................................#....#.......#.......#.................................#........#.......
|
||||
.#....#....................#..............................................................................#.............#.......#.
|
||||
.........#.................#.......................................#...........#......#.......#............#............#.........
|
||||
........................................#...............................#.........................................................
|
||||
..............#....#......................#..........#........#.....................................#...........#..........#......
|
||||
......##....#.............#..........#......................#.........................................##..........................
|
||||
....................#.............................#.....................##.#..........#..#......................###.........#.....
|
||||
.#.......................................##........................#.....#.....#..#...............................................
|
||||
..............................#............................#.......................................................##.............
|
||||
.........#.............................#..............#......#.....#..............#.#............................#........#....#..
|
||||
............#..............#.............................#..........................#.............................#...............
|
||||
.................#...........#..............#.....#..............................#.............#................#.....#...........
|
||||
........#.....................#........#.....................................#..........................#......#.#................
|
||||
.....................................................#..#........................#.##..#.........#................................
|
||||
......#..............................................#..........................#...............................#..........#......
|
||||
.................................................#.................##.......................#...................................#.
|
||||
....................#.....#.......#.............#................................#..........#...#.................................
|
||||
160
6/main.go
Normal file
160
6/main.go
Normal file
@@ -0,0 +1,160 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func findPosition(layout [][]string) []int {
|
||||
position := []int{}
|
||||
for i := range layout {
|
||||
for j := range layout[i] {
|
||||
if layout[i][j] == "^" {
|
||||
position = append(position, i, j)
|
||||
}
|
||||
}
|
||||
}
|
||||
return position
|
||||
}
|
||||
|
||||
func findObstacles(layout [][]string) [][]int {
|
||||
positions := [][]int{}
|
||||
for i := range layout {
|
||||
for j := range layout[i] {
|
||||
if layout[i][j] == "#" {
|
||||
positions = append(positions, []int{i,j})
|
||||
}
|
||||
}
|
||||
}
|
||||
return positions
|
||||
}
|
||||
|
||||
func calcPath(layout [][]string) ([][]int, bool) {
|
||||
circle := false
|
||||
direction := "up"
|
||||
guardPosition:=findPosition(layout)
|
||||
inBound := true
|
||||
currentPosition := guardPosition
|
||||
path := [][]int{currentPosition}
|
||||
for inBound && !circle {
|
||||
if direction == "up" {
|
||||
if currentPosition[0] == 0 {
|
||||
inBound = false
|
||||
break
|
||||
} else if layout[currentPosition[0]-1][currentPosition[1]] == "#" {
|
||||
direction = "right"
|
||||
continue
|
||||
} else {
|
||||
currentPosition = []int{currentPosition[0]-1, currentPosition[1]}
|
||||
if checkCircle(path, currentPosition) {
|
||||
circle = true
|
||||
} else {
|
||||
path = append(path, currentPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
if direction == "right" {
|
||||
if currentPosition[1] == len(layout)-1 {
|
||||
inBound = false
|
||||
break
|
||||
} else if layout[currentPosition[0]][currentPosition[1]+1] == "#" {
|
||||
direction = "down"
|
||||
continue
|
||||
} else {
|
||||
currentPosition = []int{currentPosition[0], currentPosition[1]+1}
|
||||
if checkCircle(path, currentPosition) {
|
||||
circle = true
|
||||
} else {
|
||||
path = append(path, currentPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
if direction == "down" {
|
||||
if currentPosition[0] == len(layout)-1 {
|
||||
inBound = false
|
||||
break
|
||||
} else if layout[currentPosition[0]+1][currentPosition[1]] == "#" {
|
||||
direction = "left"
|
||||
continue
|
||||
} else {
|
||||
currentPosition = []int{currentPosition[0]+1, currentPosition[1]}
|
||||
if checkCircle(path, currentPosition) {
|
||||
circle = true
|
||||
} else {
|
||||
path = append(path, currentPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
if direction == "left" {
|
||||
if currentPosition[1] == 0 {
|
||||
inBound = false
|
||||
break
|
||||
} else if layout[currentPosition[0]][currentPosition[1]-1] == "#" {
|
||||
direction = "up"
|
||||
continue
|
||||
} else {
|
||||
currentPosition = []int{currentPosition[0], currentPosition[1]-1}
|
||||
if checkCircle(path, currentPosition) {
|
||||
circle = true
|
||||
} else {
|
||||
path = append(path, currentPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return path, circle
|
||||
}
|
||||
|
||||
func checkCircle(path [][]int, position []int) bool {
|
||||
result := false
|
||||
for i:=1;i<len(path);i++ {
|
||||
if path[i][0] == position[0] && path[i][1] == position[1] {
|
||||
if i < len(path)-1 && path[i-1][0] == path[len(path)-1][0] && path[i-1][1] == path[len(path)-1][1] {
|
||||
result = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func main() {
|
||||
file, _ := os.Open("input")
|
||||
defer file.Close()
|
||||
scanner := bufio.NewScanner(file)
|
||||
layout := [][]string{}
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
layout = append(layout, strings.Split(line, ""))
|
||||
}
|
||||
// fmt.Println(path)
|
||||
// fmt.Println(len(path))
|
||||
path, _ := calcPath(layout)
|
||||
pathOccurances := make(map[[2]int]int)
|
||||
for _, tuple := range path {
|
||||
key := [2]int{tuple[0],tuple[1]}
|
||||
pathOccurances[key]++
|
||||
}
|
||||
fmt.Println(len(pathOccurances))
|
||||
circleSpots := [][]int{}
|
||||
for i:=1;i<len(path);i++ {
|
||||
if path[i][0] == path[0][0] && path[i][1] == path[0][1] {
|
||||
continue
|
||||
} else {
|
||||
tempValue := layout[path[i][0]][path[i][1]]
|
||||
layout[path[i][0]][path[i][1]] = "#"
|
||||
_, circle := calcPath(layout)
|
||||
if circle {
|
||||
circleSpots = append(circleSpots, path[i])
|
||||
}
|
||||
layout[path[i][0]][path[i][1]] = tempValue
|
||||
}
|
||||
}
|
||||
uniqueCircles := make(map[[2]int]int)
|
||||
for _, tuple := range circleSpots {
|
||||
key := [2]int{tuple[0],tuple[1]}
|
||||
uniqueCircles[key]++
|
||||
}
|
||||
fmt.Println(len(uniqueCircles))
|
||||
}
|
||||
Reference in New Issue
Block a user