summaryrefslogtreecommitdiff
path: root/2024/go/src/day8
diff options
context:
space:
mode:
authoromagdy <omar.professional8777@gmail.com>2024-12-12 18:31:50 +0200
committeromagdy <omar.professional8777@gmail.com>2024-12-12 18:31:50 +0200
commit0cb12b95ef11fe283731e862e3953f27eeea8757 (patch)
tree66d54e44b821073ddf6381bf9b3d9d55b3d86c31 /2024/go/src/day8
parent93cc02c058f39d370472dfe7d667ae7a2f6396b3 (diff)
downloadaoc-0cb12b95ef11fe283731e862e3953f27eeea8757.tar.xz
aoc-0cb12b95ef11fe283731e862e3953f27eeea8757.zip
Day 11 done.
Diffstat (limited to '2024/go/src/day8')
-rw-r--r--2024/go/src/day8/main.go139
1 files changed, 0 insertions, 139 deletions
diff --git a/2024/go/src/day8/main.go b/2024/go/src/day8/main.go
deleted file mode 100644
index e801340..0000000
--- a/2024/go/src/day8/main.go
+++ /dev/null
@@ -1,139 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
- "strings"
-)
-
-func FileRead(path string) string {
- file, err := os.ReadFile(path)
- if err != nil {
- fmt.Println("Couldn't Read file: ", err)
- }
- return string(file)
-
-}
-
-type Grid = [][]rune
-
-func printGrid(grid [][]rune) {
- for _, row := range grid {
- for _, cell := range row {
- fmt.Print(string(cell))
- }
- fmt.Println()
- }
-}
-
-func parseInput(data string) Grid {
- lines := strings.Split(data, "\n")
-
- var grid Grid
-
- for _, line := range lines {
- if len(line) > 0 {
- runes := []rune(line)
- grid = append(grid, runes)
- }
- }
- return grid
-}
-
-func inBounds(x, y, n, m int) bool {
- return x >= 0 && x < n && y >= 0 && y < m
-}
-
-type Point = [2]int
-type Points = [][2]int
-
-func getPosMap(grid *Grid) map[rune]Points {
- n, m := len(*grid), len((*grid)[0])
- antinodes := make(map[rune]Points)
- for i := 0; i < n; i++ {
- for j := 0; j < m; j++ {
- curPos := Point{i, j}
- curRune := (*grid)[i][j]
- if curRune != '.' {
- antinodes[curRune] = append(antinodes[curRune], curPos)
- }
- }
- }
- return antinodes
-}
-
-func isValidAntenna(grid *Grid, i, j int) bool {
- n, m := len(*grid), len((*grid)[0])
- if inBounds(i, j, n, m) {
- return true
- }
- return false
-}
-
-func solve_part_one(data string) int {
- grid := parseInput(data)
- antennas := getPosMap(&grid)
- antinodes := make(map[Point]struct{})
- for _, val := range antennas {
- for i := 0; i < len(val); i++ {
- curPosI := val[i]
- for j := i + 1; j < len(val); j++ {
- curPosJ := val[j]
- diffOne := [2]int{curPosI[0] - curPosJ[0], curPosI[1] - curPosJ[1]}
- diffTwo := [2]int{curPosJ[0] - curPosI[0], curPosJ[1] - curPosI[1]}
- firstAntennaPos := [2]int{curPosI[0] + diffOne[0], curPosI[1] + diffOne[1]}
- secondAntennaPos := [2]int{curPosJ[0] + diffTwo[0], curPosJ[1] + diffTwo[1]}
- if isValidAntenna(&grid, firstAntennaPos[0], firstAntennaPos[1]) {
- antinodes[firstAntennaPos] = struct{}{}
- }
- if isValidAntenna(&grid, secondAntennaPos[0], secondAntennaPos[1]) {
- antinodes[secondAntennaPos] = struct{}{}
- }
- }
- }
- }
- return len(antinodes)
-}
-
-func solve_part_two(data string) int {
- grid := parseInput(data)
- antennas := getPosMap(&grid)
- cnt := 0
- for _, val := range antennas {
- for i := 0; i < len(val); i++ {
- curPosI := val[i]
- for j := i + 1; j < len(val); j++ {
- curPosJ := val[j]
- diffOne := [2]int{curPosI[0] - curPosJ[0], curPosI[1] - curPosJ[1]}
- diffTwo := [2]int{curPosJ[0] - curPosI[0], curPosJ[1] - curPosI[1]}
- firstAntennaPos := [2]int{curPosI[0] + diffOne[0], curPosI[1] + diffOne[1]}
- secondAntennaPos := [2]int{curPosJ[0] + diffTwo[0], curPosJ[1] + diffTwo[1]}
- for isValidAntenna(&grid, firstAntennaPos[0], firstAntennaPos[1]) {
- grid[firstAntennaPos[0]][firstAntennaPos[1]] = '#'
- firstAntennaPos = [2]int{firstAntennaPos[0] + diffOne[0], firstAntennaPos[1] + diffOne[1]}
- }
- for isValidAntenna(&grid, secondAntennaPos[0], secondAntennaPos[1]) {
- grid[secondAntennaPos[0]][secondAntennaPos[1]] = '#'
- secondAntennaPos = [2]int{secondAntennaPos[0] + diffTwo[0], secondAntennaPos[1] + diffTwo[1]}
- }
- }
- }
- }
- for i := 0; i < len(grid); i++ {
- for j := 0; j < len(grid); j++ {
- if grid[i][j] != '.' {
- cnt++
- }
- }
- }
- return cnt
-}
-
-func main() {
- test := FileRead("../input/day8.test")
- prod := FileRead("../input/day8.prod")
- fmt.Println("Part_1 test: ", solve_part_one(test))
- fmt.Println("Part_1 prod: ", solve_part_one(prod))
- fmt.Println("Part_2 test: ", solve_part_two(test))
- fmt.Println("Part_2 prod: ", solve_part_two(prod))
-}