Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2956b1b

Browse files
committed
Day 11 done. Awfully slow for part 2.
Without hard and stretchy assumptions i dont think you can optimize it. This always gives the best result.
1 parent 1909665 commit 2956b1b

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

‎2018/day11/eleven.go‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
SerialNumber := 5791
7+
grid := [300][300]int{}
8+
cellPower(&grid, SerialNumber)
9+
// partOne(grid)
10+
partTwo(grid)
11+
}
12+
13+
func partOne(grid [300][300]int) {
14+
maxPower := 0
15+
coords := ""
16+
for row := range grid {
17+
for cell := range grid[row] {
18+
power := calculatePower(grid, row, cell) // Calculate the power level on a 3x3 square starting here
19+
if power > maxPower {
20+
maxPower = power
21+
coords = fmt.Sprintf("%d,%d", cell+1, row+1)
22+
}
23+
}
24+
}
25+
fmt.Printf("Part 1 | Max at %s with power %d\n", coords, maxPower)
26+
}
27+
28+
func partTwo(grid [300][300]int) {
29+
maxPower := 0
30+
coords := ""
31+
size := 0
32+
for row := range grid {
33+
for cell := range grid[row] {
34+
maxSize := min(299-cell, 299-row) // Maximum size the square can have
35+
// fmt.Printf("%d,%d, max size %d\n", cell+1, row+1, maxSize)
36+
for s := range maxSize {
37+
power := calculatePowerWithSize(grid, row, cell, s) // Calculate the power level on a 3x3 square starting here
38+
if power > maxPower {
39+
maxPower = power
40+
coords = fmt.Sprintf("%d,%d", cell+1, row+1)
41+
size = s
42+
}
43+
}
44+
}
45+
}
46+
fmt.Printf("Part 2 | Max at %s with power %d and size %d\n", coords, maxPower, size)
47+
}
48+
49+
func cellPower(grid *[300][300]int, SerialNumber int) {
50+
// Remember the coordinates have to be +1, because arrays start at 0.
51+
for row := range grid {
52+
for cell := range grid[row] {
53+
rackID := (cell + 1) + 10
54+
powerLevel := rackID * (row + 1)
55+
add := powerLevel + SerialNumber
56+
value := add * rackID
57+
hundreds := (value / 100) % 10
58+
result := hundreds - 5
59+
grid[row][cell] = result
60+
}
61+
}
62+
}
63+
64+
func calculatePower(grid [300][300]int, row, cell int) int {
65+
s := 0
66+
// Bounds
67+
if (row+2 < 300) && (cell+2 < 300) {
68+
for y := 0; y < 3; y++ {
69+
for x := 0; x < 3; x++ {
70+
s += grid[row+y][cell+x]
71+
}
72+
}
73+
}
74+
return s
75+
}
76+
77+
func calculatePowerWithSize(grid [300][300]int, row, cell, size int) int {
78+
s := 0
79+
// Bounds
80+
for y := 0; y < size; y++ {
81+
for x := 0; x < size; x++ {
82+
s += grid[row+y][cell+x]
83+
}
84+
}
85+
return s
86+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /