-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path03_code.py
More file actions
52 lines (45 loc) · 1.96 KB
/
Copy path03_code.py
File metadata and controls
52 lines (45 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import math
def spiral_memory(square):
bottom_right_steps = int(math.ceil(math.sqrt(square)))
bottom_right_steps = bottom_right_steps if bottom_right_steps % 2 != 0 else bottom_right_steps + 1
steps = bottom_right_steps - (pow(bottom_right_steps, 2) - square) % (bottom_right_steps - 1) - 1
min_steps = bottom_right_steps / 2
if steps < min_steps:
steps = min_steps + abs(steps - min_steps)
print steps
def part_2(square):
n = 100
start =[[0 for i in range(n)] for j in range(n)]
start[n / 2][n / 2] = 1
origin = n / 2
i = 0
while i < n:
width = 8 * (i + 1) / 4
for side in range(4):
for position in range(width):
sum = 0
if side == 0:
sum = sum_of_adjacent_blocks(origin + i - position, origin + i + 1, start)
start[origin + i - position][origin + i + 1] = sum
elif side == 1:
sum = sum_of_adjacent_blocks(origin - i - 1, origin + i - position, start)
start[origin - i - 1][origin + i - position] = sum
elif side == 2:
sum = sum_of_adjacent_blocks(origin - i + position, origin - i - 1, start)
start[origin - i + position][origin - i - 1] = sum
elif side == 3:
sum = sum_of_adjacent_blocks(origin + i + 1, origin - i + position, start)
start[origin + i + 1][origin - i + position] = sum
if sum > square:
return sum
i += 1
def sum_of_adjacent_blocks(row, col, start):
return (start[row + 1][col - 1] + start[row + 1][col] + start[row + 1][col + 1] +
start[row][col - 1] + start[row][col + 1] +
start[row - 1][col - 1] + start[row - 1][col] + start[row - 1][col + 1])
f = open('03_input.txt', 'r')
square = int(f.readline().strip())
# Part 1
# spiral_memory(square)
# Part 2
# print(part_2(square))