Do days 5 and 6.
This commit is contained in:
57
d6.py
Normal file
57
d6.py
Normal file
@@ -0,0 +1,57 @@
|
||||
EXAMPLE = """
|
||||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
||||
"""
|
||||
|
||||
def str_to_int_lst(s):
|
||||
return list(map(int, s.split()))
|
||||
|
||||
def clean(text: str) -> list[str]:
|
||||
return list(filter(lambda l: l.strip() != "", text.splitlines()))
|
||||
|
||||
def solve(lines: list[str]):
|
||||
res = 1
|
||||
t = []
|
||||
for (_, line) in enumerate(lines):
|
||||
numbers = str_to_int_lst(line.replace("Time:", "").replace("Distance:", "").strip())
|
||||
t.append(numbers)
|
||||
|
||||
t = list(zip(*t))
|
||||
for time, dist in t:
|
||||
opt = 0
|
||||
for press_time in range(1, time):
|
||||
dist_trav = press_time * (time - press_time)
|
||||
if dist_trav > dist:
|
||||
opt += 1
|
||||
res *= opt
|
||||
return res
|
||||
|
||||
def solve2(lines: list[str]):
|
||||
t = []
|
||||
for (_, line) in enumerate(lines):
|
||||
numbers = str_to_int_lst(line.replace("Time:", "").replace("Distance:", "").replace(" ", "").strip())
|
||||
t.append(numbers[0])
|
||||
time, dist = t
|
||||
opt = 0
|
||||
for press_time in range(1, time):
|
||||
dist_trav = press_time * (time - press_time)
|
||||
if dist_trav > dist:
|
||||
opt += 1
|
||||
return opt
|
||||
|
||||
def main():
|
||||
example = clean(EXAMPLE)
|
||||
print("Example 1:", solve(example))
|
||||
|
||||
data = clean(open("i6.txt").read())
|
||||
print("Solution 1:", solve(data))
|
||||
|
||||
example = clean(EXAMPLE)
|
||||
print("Example 2:", solve2(example))
|
||||
|
||||
data = clean(open("i6.txt").read())
|
||||
print("Solution 2:", solve2(data))
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user