Skip to content

Commit e0c50c7

Browse files
committed
2017 day 3
1 parent 295f089 commit e0c50c7

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

2017/3/sol.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/usr/bin/python3
2+
import argparse
3+
from collections import defaultdict
4+
5+
parser = argparse.ArgumentParser()
6+
parser.add_argument("n", help="your number", type=int)
7+
parser.add_argument("-p", "--part", help="part number", type=int, default=1)
8+
args = parser.parse_args()
9+
10+
if args.part == 1:
11+
12+
n = args.n
13+
m = 1
14+
r = 0
15+
16+
while m < n:
17+
r += 1
18+
m += 8*r
19+
20+
x, y = r, -r
21+
22+
if n <= m - 2*r:
23+
m -= 2*r
24+
x -= 2*r
25+
if n <= m - 2*r:
26+
m -= 2*r
27+
y += 2*r
28+
if n <= m - 2*r:
29+
m -= 2*r
30+
x += 2*r
31+
y -= m - n
32+
else:
33+
x += m - n
34+
else:
35+
y += m - n
36+
else:
37+
x -= m - n
38+
39+
print(abs(x) + abs(y))
40+
41+
elif args.part == 2:
42+
43+
n = args.n
44+
x, y = 1, 0
45+
res = 1
46+
val = {(0,0):1, (1,0):1}
47+
val = defaultdict(lambda:0, val)
48+
while res < n:
49+
if y < 0 and x >= y and x <= -y:
50+
x += 1
51+
elif x > 0 and y < x:
52+
y += 1
53+
elif y > 0 and x > -y:
54+
x -= 1
55+
elif x < 0 and y > x:
56+
y -= 1
57+
58+
res = val[(x-1, y+1)] \
59+
+ val[(x , y+1)] \
60+
+ val[(x+1, y+1)] \
61+
+ val[(x-1, y )] \
62+
+ val[(x+1, y )] \
63+
+ val[(x-1, y-1)] \
64+
+ val[(x , y-1)] \
65+
+ val[(x+1, y-1)]
66+
67+
val[(x,y)] = res
68+
#print(res)
69+
70+
print(res)
71+

0 commit comments

Comments
 (0)