|
@@ -90,6 +90,27 @@ func tiltPlatform(platform [][]byte, direction func([][]byte, int, int, int, int
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func tiltPlatformFromBottom(platform [][]byte, direction func([][]byte, int, int, int, int), height int, width int) {
|
|
|
+ y := height - 1
|
|
|
+ for ; y >= 0; y-- {
|
|
|
+ for x := range platform[y] {
|
|
|
+ if platform[y][x] == 'O' {
|
|
|
+ direction(platform, y, x, height, width)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func tiltPlatformFromRight(platform [][]byte, direction func([][]byte, int, int, int, int), height int, width int) {
|
|
|
+ for y := range platform {
|
|
|
+ for x := width - 1; x >= 0; x-- {
|
|
|
+ if platform[y][x] == 'O' {
|
|
|
+ direction(platform, y, x, height, width)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func calculate(platform [][]byte, height int) int {
|
|
|
var result int
|
|
|
for y := range platform {
|
|
@@ -111,6 +132,37 @@ func part1(platform [][]byte) int {
|
|
|
return calculate(platform, height)
|
|
|
}
|
|
|
|
|
|
+func copyPlatform(platform [][]byte) [][]byte {
|
|
|
+ var newPlatform [][]byte
|
|
|
+ for y := range platform {
|
|
|
+ newPlatform = append(newPlatform, platform[y])
|
|
|
+ }
|
|
|
+
|
|
|
+ return newPlatform
|
|
|
+}
|
|
|
+
|
|
|
+func printPlatform(platform [][]byte) {
|
|
|
+ for y := range platform {
|
|
|
+ fmt.Println(string(platform[y]))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func part2(platform [][]byte, cycles int) int {
|
|
|
+ height := len(platform)
|
|
|
+ width := len(platform[0])
|
|
|
+ var result int
|
|
|
+ for i := 0; i < cycles; i++ {
|
|
|
+ tiltPlatform(platform, tiltNorth, height, width)
|
|
|
+ tiltPlatform(platform, tiltWest, height, width)
|
|
|
+ tiltPlatformFromBottom(platform, tiltSouth, height, width)
|
|
|
+ tiltPlatformFromRight(platform, tiltEast, height, width)
|
|
|
+ fmt.Println(i + 1)
|
|
|
+ printPlatform(platform)
|
|
|
+ }
|
|
|
+
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
func main() {
|
|
|
if len(os.Args) < 2 {
|
|
|
log.Fatal("You need to specify a file!")
|
|
@@ -124,5 +176,7 @@ func main() {
|
|
|
}
|
|
|
|
|
|
platform := readInput(file)
|
|
|
+ platformCopy := copyPlatform(platform)
|
|
|
fmt.Println("Part1:", part1(platform))
|
|
|
+ fmt.Println("Part2:", part2(platformCopy, 4))
|
|
|
}
|