Rename folders

This commit is contained in:
Javier-Orestis MANTZIOS
2025-01-08 14:00:10 +02:00
parent fa11582a25
commit 89ca6f60df
31 changed files with 0 additions and 0 deletions

160
06/main.go Normal file
View 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))
}