Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2018-12-11 - Chronal Charge

(original .ipynb)
#     Find the fuel cell's rack ID, which is its X coordinate plus 10.
#     Begin with a power level of the rack ID times the Y coordinate.
#     Increase the power level by the value of the grid serial number (your puzzle input).
#     Set the power level to itself multiplied by the rack ID.
#     Keep only the hundreds digit of the power level (so 12345 becomes 3; numbers with no hundreds digit become 0).
#     Subtract 5 from the power level.
def power_level(x, y, serial_no):
    rack_id = x + 10
    power_level = rack_id * y
    power_level += serial_no
    power_level *=  rack_id
    
    return int(str(power_level)[-3]) - 5

assert(power_level(3, 5, 8) == 4)
# Fuel cell at  122,79, grid serial number 57: power level -5.
assert(power_level(122, 79, 57) == -5) # should be -5
# Fuel cell at 217,196, grid serial number 39: power level  0.
assert(power_level(217, 196, 39) == 0) # should be 0
# Fuel cell at 101,153, grid serial number 71: power level  4
assert(power_level(101, 153, 71) == 4) # should be 4

    
def build_grid():
    grid = []
    
    for x in range(300):
        grid.append([ 0 ] * 300)
        for y in range(300):
            grid[x][y] = power_level(x, y, 8199)
            
    return grid

grid = build_grid()

def power_level_at(start_x, start_y, square_size):
    power_level = 0
    
    for x in range(square_size):
        for y in range(square_size):
            power_level += grid[start_x + x][start_y + y]
    
    return power_level



largest_xy = None
largest_power_level = 0

# Part 1
for x in range(300 - 3):
    for y in range(300 - 3):
        power_level = power_level_at(x, y, 3)
        if power_level > largest_power_level:
            largest_power_level = power_level
            largest_xy = (x, y)
print(largest_xy)



# Part 2
largest_s = 0
for s in range(300):
    for x in range(300 - s):
        for y in range(300 - s):
            power_level = power_level_at(x, y, s)
            if power_level > largest_power_level:
                largest_power_level = power_level
                largest_xy = (x, y)
                largest_s = s
    print("largest at size", s, "is", largest_xy)

print(largest_xy, "with s = ", s)
(235, 87)
largest at size 0 is (235, 87)
largest at size 1 is (235, 87)
largest at size 2 is (235, 87)
largest at size 3 is (235, 87)
largest at size 4 is (21, 56)
largest at size 5 is (241, 45)
largest at size 6 is (240, 45)
largest at size 7 is (239, 43)
largest at size 8 is (239, 43)
largest at size 9 is (235, 277)
largest at size 10 is (235, 277)
largest at size 11 is (235, 275)
largest at size 12 is (235, 275)
largest at size 13 is (235, 271)
largest at size 14 is (235, 271)
largest at size 15 is (235, 271)
largest at size 16 is (235, 273)
largest at size 17 is (234, 272)
largest at size 18 is (234, 272)
largest at size 19 is (234, 272)
largest at size 20 is (234, 272)
largest at size 21 is (234, 272)
largest at size 22 is (234, 272)
largest at size 23 is (234, 272)
largest at size 24 is (234, 272)
largest at size 25 is (234, 272)
largest at size 26 is (234, 272)
largest at size 27 is (234, 272)
largest at size 28 is (234, 272)
largest at size 29 is (234, 272)
largest at size 30 is (234, 272)
largest at size 31 is (234, 272)
largest at size 32 is (234, 272)
largest at size 33 is (234, 272)
largest at size 34 is (234, 272)
largest at size 35 is (234, 272)
largest at size 36 is (234, 272)
largest at size 37 is (234, 272)
largest at size 38 is (234, 272)
largest at size 39 is (234, 272)
largest at size 40 is (234, 272)
largest at size 41 is (234, 272)
largest at size 42 is (234, 272)
largest at size 43 is (234, 272)
largest at size 44 is (234, 272)
largest at size 45 is (234, 272)
largest at size 46 is (234, 272)
largest at size 47 is (234, 272)
largest at size 48 is (234, 272)
largest at size 49 is (234, 272)
largest at size 50 is (234, 272)
largest at size 51 is (234, 272)
largest at size 52 is (234, 272)
largest at size 53 is (234, 272)
largest at size 54 is (234, 272)
largest at size 55 is (234, 272)
largest at size 56 is (234, 272)
largest at size 57 is (234, 272)
largest at size 58 is (234, 272)
largest at size 59 is (234, 272)
largest at size 60 is (234, 272)
largest at size 61 is (234, 272)
largest at size 62 is (234, 272)
largest at size 63 is (234, 272)
largest at size 64 is (234, 272)
largest at size 65 is (234, 272)
largest at size 66 is (234, 272)
largest at size 67 is (234, 272)
largest at size 68 is (234, 272)
largest at size 69 is (234, 272)
largest at size 70 is (234, 272)
largest at size 71 is (234, 272)
largest at size 72 is (234, 272)
largest at size 73 is (234, 272)
largest at size 74 is (234, 272)
largest at size 75 is (234, 272)
largest at size 76 is (234, 272)
largest at size 77 is (234, 272)
largest at size 78 is (234, 272)
largest at size 79 is (234, 272)
largest at size 80 is (234, 272)
largest at size 81 is (234, 272)
largest at size 82 is (234, 272)
largest at size 83 is (234, 272)
largest at size 84 is (234, 272)
largest at size 85 is (234, 272)
largest at size 86 is (234, 272)
largest at size 87 is (234, 272)