From 0fc5acbc43ef754cc23e9cfb54fe456ee26f75c2 Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Sun, 13 Dec 2020 20:51:36 -0800 Subject: [PATCH] 2020 Day 13 Part 1 --- 2020/13/Makefile | 34 +++++++++++++++++++++++++ 2020/13/input-full.txt | 2 ++ 2020/13/input-sample.txt | 2 ++ 2020/13/main.py | 55 ++++++++++++++++++++++++++++++++++++++++ 2020/13/pyproject.toml | 3 +++ 5 files changed, 96 insertions(+) create mode 100644 2020/13/Makefile create mode 100644 2020/13/input-full.txt create mode 100644 2020/13/input-sample.txt create mode 100644 2020/13/main.py create mode 100644 2020/13/pyproject.toml diff --git a/2020/13/Makefile b/2020/13/Makefile new file mode 100644 index 0000000..7a74a91 --- /dev/null +++ b/2020/13/Makefile @@ -0,0 +1,34 @@ +.PHONY: all +all: full + +.PHONY: full +full: + @python main.py input-full.txt + +.PHONY: full-debug +full-debug: + @python main.py --debug input-full.txt + +.PHONY: sample +sample: + @python main.py input-sample.txt + +.PHONY: sample-debug +sample-debug: + @python main.py --debug input-sample.txt + +.PHONY: format +format: + @black . + +.PHONY: lint +lint: + @black --check . + +.PHONY: type-check +type-check: + @mypy . + +.PHONY: test +test: + @pytest . diff --git a/2020/13/input-full.txt b/2020/13/input-full.txt new file mode 100644 index 0000000..1ccfd8b --- /dev/null +++ b/2020/13/input-full.txt @@ -0,0 +1,2 @@ +1000509 +17,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,739,x,29,x,x,x,x,x,x,x,x,x,x,13,x,x,x,x,x,x,x,x,x,23,x,x,x,x,x,x,x,971,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,19 diff --git a/2020/13/input-sample.txt b/2020/13/input-sample.txt new file mode 100644 index 0000000..d76f619 --- /dev/null +++ b/2020/13/input-sample.txt @@ -0,0 +1,2 @@ +939 +7,13,x,x,59,x,31,19 diff --git a/2020/13/main.py b/2020/13/main.py new file mode 100644 index 0000000..dbfb093 --- /dev/null +++ b/2020/13/main.py @@ -0,0 +1,55 @@ +import argparse +from math import gcd +from typing import List + +parser = argparse.ArgumentParser(description='Run an Advent of Code program') +parser.add_argument( + 'input_file', type=str, help='the file containing input data' +) +parser.add_argument( + '--debug', action='store_true', help='print debug messages' +) +args = parser.parse_args() + + +def debug(log): + if args.debug: + print(log) + + +input_data: List = [] +with open(args.input_file) as f: + input_data = [line for line in f.read().splitlines()] + +earliest_ts = int(input_data[0]) +numbered_buses = [ + int(bus_id) for bus_id in input_data[1].split(',') if bus_id != 'x' +] + +debug(f'{earliest_ts}: {numbered_buses}') + +earliest_bus = 0 +least_wait_time = 99999999999 +for bus in numbered_buses: + wait_time = bus - (earliest_ts % bus) + debug(f'{bus}: {wait_time}') + if wait_time < least_wait_time: + earliest_bus = bus + least_wait_time = wait_time + +print(f'Part 1: {earliest_bus * least_wait_time}') + +all_buses = [ + (index, int(bus_id)) + for index, bus_id in enumerate(input_data[1].split(',')) + if bus_id != 'x' +] + + +def lcm(a, b): + return abs(a * b) // gcd(a, b) + + +debug(all_buses) +debug(gcd(13, 7)) +debug(lcm(13, 7)) diff --git a/2020/13/pyproject.toml b/2020/13/pyproject.toml new file mode 100644 index 0000000..d3728ba --- /dev/null +++ b/2020/13/pyproject.toml @@ -0,0 +1,3 @@ +[tool.black] +line-length = 79 +skip-string-normalization = true