diff --git a/2018/11/solve.py b/2018/11/solve.py new file mode 100644 index 0000000..8f75ba2 --- /dev/null +++ b/2018/11/solve.py @@ -0,0 +1,79 @@ +import sys + +# PART 1 + +def nth_digit(num, pos): + # nth_digit(1234, 0) = 123[4] = 4 + # nth_digit(1234, 2) = 1[2]34 = 2 + # nth_digit(1234, 4) = [0]1234 = 0 + + pos += 1 + s = ("{:0" + str(pos) + "}").format(num) # UGLY! + n = s[-pos] + return int(n) + +def power_level(number, x, y): + rack_id = x + 10 + level = rack_id * y + level += number + level *= rack_id + level = nth_digit(level, 2) # 100-er digit + level -= 5 + return level + +def init_grid(number): + grid = {} + for x in range(1, 300 + 1): + for y in range(1, 300 + 1): + grid[(x, y)] = power_level(number, x, y) + return grid + +def power_of_square(grid, x, y): + power = 0 + for dx in range(3): + for dy in range(3): + power += grid[(x+dx, y+dy)] + return power + +def find_max_power(grid): + max_power = 0 + max_coords = None + + for x in range(1, 300 - 2 + 1): + for y in range(1, 300 - 2 + 1): + power = power_of_square(grid, x, y) + if power > max_power: + max_power = power + max_coords = (x, y) + + return max_coords + +# PART 2 + +def square_power(grid, x, y, size): + pass + +def max_square(grid): + max_power = 0 + max_coords = None + max_size = None + + for size in range(1, 300 + 1): + for x in range(1, 300 + 1 - (size - 1)): + for y in range(1, 300 + 1 - (size - 1)): + pass + +def main(number): + print(f"Solutions for {number}") + grid = init_grid(number) + x, y = find_max_power(grid) + print(f"Part 1: {x},{y}") + print(f"Part 2: NYI") + +if __name__ == "__main__": + print(power_level( 8, 3, 5)) + print(power_level(57, 122, 79)) + print(power_level(39, 217, 196)) + print(power_level(71, 101, 153)) + + main(5153)