day9,10,11
This commit is contained in:
146
2023/go/day11/day11.go
Normal file
146
2023/go/day11/day11.go
Normal file
@@ -0,0 +1,146 @@
|
||||
package day11
|
||||
|
||||
import (
|
||||
"adventofcode2023/utils"
|
||||
_ "fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Galaxy struct {
|
||||
x int
|
||||
y int
|
||||
}
|
||||
|
||||
func Part1(input string) int {
|
||||
galaxies := []Galaxy{}
|
||||
lines := strings.Split(input, "\n")
|
||||
var expand_rows []int
|
||||
var expand_cols []int
|
||||
for y,line := range lines {
|
||||
for x,char := range line {
|
||||
if char == '#' {
|
||||
galaxies = append(galaxies, Galaxy{x, y})
|
||||
}
|
||||
}
|
||||
}
|
||||
// fmt.Println(galaxies)
|
||||
for y,line := range lines {
|
||||
no_galaxy := true
|
||||
for _,char := range line {
|
||||
if char != '.' {
|
||||
no_galaxy = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if no_galaxy {
|
||||
expand_rows = append(expand_rows, y)
|
||||
}
|
||||
}
|
||||
for x:=0;x<len(lines[0]);x++ {
|
||||
no_galaxy := true
|
||||
for _,line := range lines {
|
||||
if line[x] != '.' {
|
||||
no_galaxy = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if no_galaxy {
|
||||
expand_cols = append(expand_cols, x)
|
||||
}
|
||||
}
|
||||
galaxies = expand_row(expand_rows, galaxies, true)
|
||||
galaxies = expand_col(expand_cols, galaxies, true)
|
||||
// fmt.Printf("r: %v c: %v\n%v\n", expand_rows, expand_cols, galaxies)
|
||||
dist := 0
|
||||
for i:=0;i<len(galaxies)-1;i++{
|
||||
g1 := galaxies[i]
|
||||
for _, g2 := range galaxies[i+1:] {
|
||||
dist = dist + distance(g1, g2)
|
||||
}
|
||||
}
|
||||
return dist
|
||||
}
|
||||
|
||||
func Part2(input string) int {
|
||||
galaxies := []Galaxy{}
|
||||
lines := strings.Split(input, "\n")
|
||||
var expand_rows []int
|
||||
var expand_cols []int
|
||||
for y,line := range lines {
|
||||
for x,char := range line {
|
||||
if char == '#' {
|
||||
galaxies = append(galaxies, Galaxy{x, y})
|
||||
}
|
||||
}
|
||||
}
|
||||
// fmt.Println(galaxies)
|
||||
for y,line := range lines {
|
||||
no_galaxy := true
|
||||
for _,char := range line {
|
||||
if char != '.' {
|
||||
no_galaxy = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if no_galaxy {
|
||||
expand_rows = append(expand_rows, y)
|
||||
}
|
||||
}
|
||||
for x:=0;x<len(lines[0]);x++ {
|
||||
no_galaxy := true
|
||||
for _,line := range lines {
|
||||
if line[x] != '.' {
|
||||
no_galaxy = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if no_galaxy {
|
||||
expand_cols = append(expand_cols, x)
|
||||
}
|
||||
}
|
||||
galaxies = expand_row(expand_rows, galaxies, false)
|
||||
galaxies = expand_col(expand_cols, galaxies, false)
|
||||
// fmt.Printf("r: %v c: %v\n%v\n", expand_rows, expand_cols, galaxies)
|
||||
dist := 0
|
||||
for i:=0;i<len(galaxies)-1;i++{
|
||||
g1 := galaxies[i]
|
||||
for _, g2 := range galaxies[i+1:] {
|
||||
dist = dist + distance(g1, g2)
|
||||
}
|
||||
}
|
||||
return dist
|
||||
}
|
||||
|
||||
func expand_row(rows []int, galaxies []Galaxy, partOne bool) []Galaxy {
|
||||
new := []Galaxy{}
|
||||
for _,galaxy := range galaxies {
|
||||
new = append(new, Galaxy{galaxy.x, galaxy.y + howMany(rows, galaxy.y, partOne)})
|
||||
}
|
||||
return new
|
||||
}
|
||||
|
||||
func expand_col(cols []int, galaxies []Galaxy, partOne bool) []Galaxy {
|
||||
new := []Galaxy{}
|
||||
for _,galaxy := range galaxies {
|
||||
new = append(new, Galaxy{galaxy.x + howMany(cols, galaxy.x, partOne), galaxy.y})
|
||||
}
|
||||
return new
|
||||
}
|
||||
|
||||
func howMany(xs []int, a int, partOne bool) int {
|
||||
count := 0
|
||||
incr := 1
|
||||
if !partOne { incr = 1000000 - 1 }
|
||||
for _,x := range xs {
|
||||
if x < a {
|
||||
count = count + incr
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func distance(g1 Galaxy, g2 Galaxy) int {
|
||||
val := utils.Abs(g1.x - g2.x) + utils.Abs(g1.y - g2.y)
|
||||
// fmt.Printf("%v - %v = %v\n", g1, g2, val)
|
||||
return val
|
||||
}
|
||||
38
2023/go/day11/day11_test.go
Normal file
38
2023/go/day11/day11_test.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package day11
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPart1(t *testing.T) {
|
||||
r := Part1(
|
||||
`...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....`)
|
||||
require.Equal(t, 374, r)
|
||||
}
|
||||
|
||||
func TestPart2(t *testing.T) {
|
||||
r := Part2(
|
||||
`...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....`)
|
||||
require.Equal(t, 8410, r)
|
||||
require.Equal(t, 0, r)
|
||||
}
|
||||
140
2023/go/day11/input.txt
Normal file
140
2023/go/day11/input.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
.......#...........................................................................#........................................................
|
||||
.............#...........#..................#.............................................................#..............#.......#..........
|
||||
..................................................................#.........#......................................#........................
|
||||
.................#...........................................................................................................#..............
|
||||
.............................................................#..............................................................................
|
||||
......................#.....................................................................#............................................#..
|
||||
.....#...........................................#..........................................................................................
|
||||
............................#..........................................#...............................#....................................
|
||||
...........#......................................................................................#......................#..................
|
||||
....................................................#.....#................................................#......................#.........
|
||||
#..................................................................#.............#...........................................#..............
|
||||
......................................#..................................................#...............................................#..
|
||||
.................................#..........................................................................................................
|
||||
...............#........#..............................................#...............................................#....................
|
||||
.......#....................................................................................................................................
|
||||
............................................................................#...................#..................#.......#.........#......
|
||||
...................#......................#......#.......#.......#..........................................................................
|
||||
............#...........................................................................#................#..................................
|
||||
.....................................................#..................#................................................................#..
|
||||
.............................#.....#..........................................................................#...................#.........
|
||||
...#.......................................................#...............................#................................................
|
||||
............................................#........................................................#......................................
|
||||
...................................................................#..................................................................#.....
|
||||
..........................................................................................................................#.................
|
||||
#.......................#............................#.......................................#..............................................
|
||||
..........................................#.................#.....................................#................................#........
|
||||
..................#............................................................#........................#..............#....................
|
||||
............................................................................................................................................
|
||||
......#........................................................................................#.............................#..............
|
||||
...............#........................#.........#.....#......#...................#..............................#.........................
|
||||
.........................#.....#..........................................#.................................................................
|
||||
.................................................................................................................................#..........
|
||||
...........................................................#..................................................#..........#............#.....
|
||||
.............#.................................................................#............................................................
|
||||
.....................#............#..............#.......................................#..................................................
|
||||
#..........................#...........................#..................................................#.................................
|
||||
.............................................................#....................................................................#.......#.
|
||||
......................................................................................................................#.....................
|
||||
............#..................#...........#........#...............................#..............#...........#............................
|
||||
.......#..............................#.....................................................................................................
|
||||
........................#...............................................................#..............#.................#.............#....
|
||||
.#..........................................................................................................#...............................
|
||||
.........................................................#.....................#.................................................#..........
|
||||
..........................................#..........................................#...........................#.........................#
|
||||
.....#..........................#.................#..........#........#.....................................................................
|
||||
..........#...........#.................................................................................#...................................
|
||||
.............................................................................................................................#.......#......
|
||||
..........................................................#.................#............#..................................................
|
||||
.....................................................#..........................................#...........#...............................
|
||||
.......................................#...............................#.............................#......................................
|
||||
..................................#...............................................#........................................#.............#..
|
||||
.......#.......#.......#..........................................#.........................................................................
|
||||
.............................................#...............#..............................................................................
|
||||
............................#................................................................#..............................................
|
||||
........................................................#..................#.............................#........................#.........
|
||||
...................................................................................................#..........#.............................
|
||||
......#............................................................................#....................................#..................#
|
||||
..................#.....#...............#.....#......#...................................#.....................................#............
|
||||
..................................................................#...........#.............................................................
|
||||
#.............#..........................................#...............#...................#.........#....................................
|
||||
........#.............................................................................................................#.............#.......
|
||||
......................#......................................#............................................................................#.
|
||||
..............................#....................................................#........................................................
|
||||
............................................................................................................................................
|
||||
...............#.............................................................................................#..............................
|
||||
........................#............#............................#................................................................#........
|
||||
...#.....................................................#................#..............#...................................#..............
|
||||
.............................................#..............................................................................................
|
||||
...........................#................................................................................................................
|
||||
.....................................................#......#....................................................#.....#....................
|
||||
.....#....................................#.....#...........................#...................#...........................................
|
||||
..............#.....................#...................................................................#...................................
|
||||
#........................................................................................#..................................................
|
||||
.....................#........................................................................................#.............................
|
||||
..........................#.......................#..................................................................................#......
|
||||
.........#................................................#.........#.......................................................#...............
|
||||
...............................#................................................................#.....#.....................................
|
||||
...................#..........................#.................#..................#..............................................#.........
|
||||
......#......#..............................................................................................................................
|
||||
............................#......................................................................#........#...............................
|
||||
....................................................................................................................#.......................
|
||||
................................................#...........#.................#........................#....................................
|
||||
.................#..........................................................................................................................
|
||||
..........................#......................................................................................#..........#..........#....
|
||||
#...............................................................................................#.....................#.....................
|
||||
............#......................#...................#.................................#.........................................#........
|
||||
............................................................................................................................................
|
||||
....................................................................#.......................................................................
|
||||
.....#........................................#...........................................................#...................#.............
|
||||
..........................................................#..................................#..............................................
|
||||
.............................#............................................#.................................................................
|
||||
......................#............................................................................................................#........
|
||||
..#.....................................................................................................................................#...
|
||||
...........#..........................#............................................................................#........................
|
||||
..............................................#.................#....................#...............#........#.............................
|
||||
...........................#...........................#......................................#...........................#.....#...........
|
||||
.........................................................................................................#..................................
|
||||
.........#......#................................................................................................#........................#.
|
||||
...#.....................................................................#..............#...................................................
|
||||
.............................#......#...............................#................................................#......................
|
||||
.........................................#............................................................................................#.....
|
||||
.....................#............................#............#.................#...........................#...............#..............
|
||||
.............#..........................................#...................................#...............................................
|
||||
..#.............................#...........................................#.....................#................#........................
|
||||
...........................................#...........................#.................................................#..............#...
|
||||
........#...........................#.......................#.......................#.......................................................
|
||||
...........................#.............................................................................#.......................#..........
|
||||
............................................................................................................................................
|
||||
...............#...............................................................................#..........................................#.
|
||||
............................................................................................................................................
|
||||
#...............................................#......#.......#...............#............................................................
|
||||
.........#.................................#...........................................................#....................................
|
||||
......................................#............................#...............................................#........................
|
||||
......................#.........#.............................................................................#.............................
|
||||
....................................................................................#............#..........................................
|
||||
..........................................................................#...............#.................................................
|
||||
...........#.....#................................#.........................................................................#...............
|
||||
..................................................................#.......................................#.........................#.......
|
||||
.........................#................................#........................................................#........................
|
||||
........#...................................................................................#......#....................................#...
|
||||
...............................................................#...............#............................................................
|
||||
.............................................#.........................#.....................................#..............................
|
||||
...................#...............#........................................................................................................
|
||||
..........................#..............................#....................................#..................................#..........
|
||||
...........#.....................................................................#.....#....................................................
|
||||
...#.................................................#...............................................#...........#...........#..............
|
||||
...............#........................#................................................................................................#..
|
||||
....................#..............................................#.....................................#..................................
|
||||
..................................#.....................#................................#..................................................
|
||||
............................................#...................................................#.............#.............................
|
||||
........................................................................................................................#.....#......#.....#
|
||||
...........................................................#..................#......................#......................................
|
||||
...................#.........#....................................#.........................#...............................................
|
||||
....................................................#...............................................................#.......................
|
||||
.............#........................#....................................................................................#................
|
||||
....................................................................................#...................................................#...
|
||||
.......#................................................#................#..................................................................
|
||||
.#.................................................................#..............................................................#.........
|
||||
...................#.....#...................................................................#.........#.........#..........................
|
||||
............................................#.....#............#..................................#.........#................#..............
|
||||
Reference in New Issue
Block a user