|
@@ -28,8 +28,7 @@ func readInput(file *os.File) [][]byte {
|
|
|
return platform
|
|
|
}
|
|
|
|
|
|
-func tiltNorth(platform [][]byte, y int, x int, height int, width int) bool {
|
|
|
- change := false
|
|
|
+func tiltNorth(platform [][]byte, y int, x int, height int, width int) {
|
|
|
for {
|
|
|
prevY := y - 1
|
|
|
if prevY < 0 || platform[prevY][x] == '#' || platform[prevY][x] == 'O' {
|
|
@@ -38,32 +37,60 @@ func tiltNorth(platform [][]byte, y int, x int, height int, width int) bool {
|
|
|
|
|
|
platform[y][x] = '.'
|
|
|
platform[prevY][x] = 'O'
|
|
|
- change = true
|
|
|
y--
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+func tiltSouth(platform [][]byte, y int, x int, height int, width int) {
|
|
|
+ for {
|
|
|
+ nextY := y + 1
|
|
|
+ if nextY >= height || platform[nextY][x] == '#' || platform[nextY][x] == 'O' {
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ platform[y][x] = '.'
|
|
|
+ platform[nextY][x] = 'O'
|
|
|
+ y++
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- return change
|
|
|
+func tiltEast(platform [][]byte, y int, x int, height int, width int) {
|
|
|
+ for {
|
|
|
+ nextX := x + 1
|
|
|
+ if nextX >= width || platform[y][nextX] == '#' || platform[y][nextX] == 'O' {
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ platform[y][x] = '.'
|
|
|
+ platform[y][nextX] = 'O'
|
|
|
+ x++
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-func tiltPlatform(platform [][]byte, direction func([][]byte, int, int, int, int) bool, height int, width int) bool {
|
|
|
- change := false
|
|
|
+func tiltWest(platform [][]byte, y int, x int, height int, width int) {
|
|
|
+ for {
|
|
|
+ nextX := x - 1
|
|
|
+ if nextX < 0 || platform[y][nextX] == '#' || platform[y][nextX] == 'O' {
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ platform[y][x] = '.'
|
|
|
+ platform[y][nextX] = 'O'
|
|
|
+ x--
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func tiltPlatform(platform [][]byte, direction func([][]byte, int, int, int, int), height int, width int) {
|
|
|
for y := range platform {
|
|
|
for x := range platform[y] {
|
|
|
if platform[y][x] == 'O' {
|
|
|
- if direction(platform, y, x, height, width) {
|
|
|
- change = true
|
|
|
- }
|
|
|
+ direction(platform, y, x, height, width)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- return change
|
|
|
}
|
|
|
|
|
|
-func part1(platform [][]byte) int {
|
|
|
- height := len(platform)
|
|
|
- width := len(platform[0])
|
|
|
- tiltPlatform(platform, tiltNorth, height, width)
|
|
|
+func calculate(platform [][]byte, height int) int {
|
|
|
var result int
|
|
|
for y := range platform {
|
|
|
for x := range platform[y] {
|
|
@@ -76,6 +103,14 @@ func part1(platform [][]byte) int {
|
|
|
return result
|
|
|
}
|
|
|
|
|
|
+func part1(platform [][]byte) int {
|
|
|
+ height := len(platform)
|
|
|
+ width := len(platform[0])
|
|
|
+ tiltPlatform(platform, tiltNorth, height, width)
|
|
|
+
|
|
|
+ return calculate(platform, height)
|
|
|
+}
|
|
|
+
|
|
|
func main() {
|
|
|
if len(os.Args) < 2 {
|
|
|
log.Fatal("You need to specify a file!")
|