day6
This commit is contained in:
parent
8db7b93c25
commit
4763191ea6
1 changed files with 52 additions and 0 deletions
52
6/6.py
Executable file
52
6/6.py
Executable file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
# run with '2' argument for part2 result.
|
||||
part2 = (len(sys.argv) == 2 and sys.argv[1] == '2')
|
||||
|
||||
objects = {}
|
||||
orbits = {}
|
||||
|
||||
for line in sys.stdin:
|
||||
line = line.rstrip()
|
||||
bodies = line.split(')')
|
||||
objects[bodies[0]] = 1
|
||||
objects[bodies[1]] = 1
|
||||
orbits[bodies[1]] = bodies[0]
|
||||
|
||||
traces = {}
|
||||
|
||||
count = 0
|
||||
for object in objects:
|
||||
trace = []
|
||||
if object == "COM":
|
||||
continue
|
||||
n = orbits[object]
|
||||
ocount = 1
|
||||
trace.append(object)
|
||||
trace.append(n)
|
||||
while n != "COM":
|
||||
n = orbits[n]
|
||||
trace.append(n)
|
||||
ocount += 1
|
||||
count += ocount
|
||||
traces[object] = trace
|
||||
|
||||
print(count)
|
||||
|
||||
want1='YOU'
|
||||
want2='SAN'
|
||||
if want1 in traces and want2 in traces:
|
||||
pos = -1
|
||||
t1 = traces[want1][pos]
|
||||
t2 = traces[want2][pos]
|
||||
# work from COM (array[-1]) towards each planet, until we find the point they diverge
|
||||
while t1 == t2:
|
||||
pos -= 1
|
||||
t1 = traces[want1][pos]
|
||||
t2 = traces[want2][pos]
|
||||
# then return the remaining length of each branch
|
||||
len1 = len(traces[want1]) + pos
|
||||
len2 = len(traces[want2]) + pos
|
||||
print(len1+len2)
|
Loading…
Add table
Add a link
Reference in a new issue