Progress on 2018.11
This commit is contained in:
parent
18d07e81db
commit
0cff916625
@ -23,26 +23,25 @@ func main() {
|
|||||||
serial: Atoi(os.Args[1]),
|
serial: Atoi(os.Args[1]),
|
||||||
fuelLevels: make(map[string]int),
|
fuelLevels: make(map[string]int),
|
||||||
}
|
}
|
||||||
fmt.Println(timeMachine.calcSquareFuelLevel(90, 269, 16))
|
fmt.Println(timeMachine.getSquareFuelLevel(283, 169, 13))
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
|
|
||||||
highest := MinInt
|
highest := MinInt
|
||||||
highestX, highestY := 0, 0
|
highestX, highestY, highestSize := 0, 0, 1
|
||||||
highestSize := 1
|
for size := 1; size <= 13; size++ {
|
||||||
for size := 1; size <= 20; size++ {
|
fmt.Println("=", size, "=")
|
||||||
fmt.Println(size)
|
|
||||||
for i := 0; i < 300-size; i++ {
|
for i := 0; i < 300-size; i++ {
|
||||||
for j := 0; j < 300-size; j++ {
|
for j := 0; j < 300-size; j++ {
|
||||||
w := timeMachine.getSquareLevel(i, j, size)
|
w := timeMachine.getSquareFuelLevel(i, j, size)
|
||||||
if w > highest {
|
if w > highest {
|
||||||
highestX, highestY = i, j
|
highestX, highestY = i, j
|
||||||
highest = w
|
|
||||||
highestSize = size
|
highestSize = size
|
||||||
|
highest = w
|
||||||
|
fmt.Printf("New Highest: %d,%d,%d : %d\n", highestX, highestY, highestSize, highest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Print(highestX, ",", highestY, ",", highestSize, " : ", highest, "\n")
|
fmt.Printf("Highest: %d,%d,%d : %d\n", highestX, highestY, highestSize, highest)
|
||||||
}
|
}
|
||||||
|
|
||||||
type TimeMachine struct {
|
type TimeMachine struct {
|
||||||
@ -57,34 +56,30 @@ func (t *TimeMachine) getKeyForSquare(x, y, size int) string {
|
|||||||
return bx + "," + by + "," + bs
|
return bx + "," + by + "," + bs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TimeMachine) setSquareLevel(x, y, size, val int) {
|
func (t *TimeMachine) getSquareFuelLevel(x, y, size int) int {
|
||||||
t.fuelLevels[t.getKeyForSquare(x, y, size)] = val
|
k := t.getKeyForSquare(x, y, size)
|
||||||
}
|
if v, ok := t.fuelLevels[k]; ok {
|
||||||
|
return v
|
||||||
func (t *TimeMachine) getSquareLevel(x, y, size int) int {
|
|
||||||
key := t.getKeyForSquare(x, y, size)
|
|
||||||
if ret, ok := t.fuelLevels[key]; !ok {
|
|
||||||
t.fuelLevels[key] = t.calcSquareLevel(x, y, size)
|
|
||||||
return t.fuelLevels[key]
|
|
||||||
} else {
|
|
||||||
return ret
|
|
||||||
}
|
}
|
||||||
}
|
var ret int
|
||||||
|
|
||||||
func (t *TimeMachine) calcSquareLevel(x, y, size int) int {
|
|
||||||
if size == 1 {
|
if size == 1 {
|
||||||
return t.calcFuelLevel(x, y)
|
ret = t.calcFuelLevel(x, y)
|
||||||
|
} else {
|
||||||
|
ret = t.getSquareFuelLevel(x, y, size-1)
|
||||||
|
// Add the right-most cells
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
ret += t.calcFuelLevel(x+(size-1), y+i)
|
||||||
}
|
}
|
||||||
ret := t.getSquareLevel(x, y, size-1)
|
// Add the bottom cells
|
||||||
for wx := x; wx < wx+size; wx++ {
|
for i := 0; i < size-1; i++ {
|
||||||
ret += t.getSquareLevel(wx, y+size-1, 1)
|
ret += t.calcFuelLevel(x+i, y+(size-1))
|
||||||
}
|
}
|
||||||
for wy := y; wy < wy+size-1; wy++ {
|
|
||||||
ret += t.getSquareLevel(x+size-1, wy, 1)
|
|
||||||
}
|
}
|
||||||
|
t.fuelLevels[k] = ret
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calcFuelLevel calculates one cells fuel level
|
||||||
func (t *TimeMachine) calcFuelLevel(x, y int) int {
|
func (t *TimeMachine) calcFuelLevel(x, y int) int {
|
||||||
rackId := x + 10
|
rackId := x + 10
|
||||||
startingLevel := rackId * y
|
startingLevel := rackId * y
|
||||||
@ -99,11 +94,12 @@ func (t *TimeMachine) calcFuelLevel(x, y int) int {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calcSquareFuelLevel calculates all cells from x, y -> x+size, y+size
|
||||||
func (t *TimeMachine) calcSquareFuelLevel(x, y, size int) int {
|
func (t *TimeMachine) calcSquareFuelLevel(x, y, size int) int {
|
||||||
var ret int
|
var ret int
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
for j := 0; j < size; j++ {
|
for j := 0; j < size; j++ {
|
||||||
ret += t.calcFuelLevel(i, j)
|
ret += t.calcFuelLevel(x+i, y+j)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
|
Loading…
Reference in New Issue
Block a user