diff options
| author | omagdy <omar.professional8777@gmail.com> | 2024-12-12 18:31:50 +0200 |
|---|---|---|
| committer | omagdy <omar.professional8777@gmail.com> | 2024-12-12 18:31:50 +0200 |
| commit | 0cb12b95ef11fe283731e862e3953f27eeea8757 (patch) | |
| tree | 66d54e44b821073ddf6381bf9b3d9d55b3d86c31 /2024/go/src/day8 | |
| parent | 93cc02c058f39d370472dfe7d667ae7a2f6396b3 (diff) | |
| download | aoc-0cb12b95ef11fe283731e862e3953f27eeea8757.tar.xz aoc-0cb12b95ef11fe283731e862e3953f27eeea8757.zip | |
Day 11 done.
Diffstat (limited to '2024/go/src/day8')
| -rw-r--r-- | 2024/go/src/day8/main.go | 139 |
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)) -} |
