Skip to content

Commit 301825d

Browse files
committed
Take input from stdin or argv[1], avoid utils lib
1 parent 8b5f3ef commit 301825d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+626
-643
lines changed

2018/solutions/day01.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44

5-
advent.setup(2018, 1)
6-
fin = advent.get_input()
5+
# Open the first argument as input or use stdin if no arguments were given
6+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
77

88
deltas = list(map(int, fin.readlines()))
99
done = False
@@ -19,7 +19,7 @@
1919

2020
seen.add(freq)
2121

22-
advent.print_answer(1, freq)
22+
print('Part 1:', freq)
2323

2424
while not done:
2525
for d in deltas:
@@ -31,4 +31,4 @@
3131

3232
seen.add(freq)
3333

34-
advent.print_answer(2, freq)
34+
print('Part 2:', freq)

2018/solutions/day02.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
4-
from string import ascii_letters
3+
import sys
54
from collections import Counter
65

7-
advent.setup(2018, 2)
8-
fin = advent.get_input()
6+
# Open the first argument as input or use stdin if no arguments were given
7+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
98

109
ids = list(map(str.rstrip, fin))
1110
counts = list(map(Counter, ids))
@@ -14,7 +13,7 @@
1413
three_letters = sum(3 in c.values() for c in counts)
1514

1615
ans = two_letters * three_letters
17-
advent.print_answer(1, ans)
16+
print('Part 1:', ans)
1817

1918

2019
l = len(ids[0])
@@ -37,4 +36,4 @@
3736
if done:
3837
break
3938

40-
advent.print_answer(2, s)
39+
print('Part 2:', s)

2018/solutions/day03.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
from collections import defaultdict
55

6-
advent.setup(2018, 3)
7-
fin = advent.get_input()
6+
# Open the first argument as input or use stdin if no arguments were given
7+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
88

99
canvas = defaultdict(set)
1010
claim_ids = set()
@@ -24,7 +24,7 @@
2424
claim_ids.add(cid)
2525

2626
overlapping = sum(map(lambda x: len(x) > 1, canvas.values()))
27-
advent.print_answer(1, overlapping)
27+
print('Part 1:', overlapping)
2828

2929

3030
for c in filter(lambda x: len(x) > 1, canvas.values()):
@@ -33,4 +33,4 @@
3333
assert len(claim_ids) == 1
3434

3535
good = claim_ids.pop()
36-
advent.print_answer(2, good)
36+
print('Part 2:', good)

2018/solutions/day04.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
from collections import defaultdict
55

66
def get_hour(event):
@@ -16,8 +16,8 @@ def times_slept(guard_id, minute):
1616
return sum(a <= minute < b for a, b in guards[guard_id])
1717

1818

19-
advent.setup(2018, 4)
20-
fin = advent.get_input()
19+
# Open the first argument as input or use stdin if no arguments were given
20+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
2121

2222
events = list(map(str.split, sorted(fin.readlines())))
2323
assert 'begins' in events[0]
@@ -38,11 +38,11 @@ def times_slept(guard_id, minute):
3838
worst_guard_min = max(range(60), key=lambda m: times_slept(worst_guard, m))
3939
ans = worst_guard * worst_guard_min
4040

41-
advent.print_answer(1, ans)
41+
print('Part 1:', ans)
4242

4343

4444
worst_guard = max(guards, key=lambda g: max(times_slept(g, m) for m in range(60)))
4545
worst_guard_min = max(range(60), key=lambda m: times_slept(worst_guard, m))
4646
ans2 = worst_guard * worst_guard_min
4747

48-
advent.print_answer(2, ans2)
48+
print('Part 2:', ans2)

2018/solutions/day05.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
4-
from string import ascii_lowercase, ascii_uppercase
3+
import sys
54
from collections import deque
5+
from string import ascii_lowercase, ascii_uppercase
66

77
def react_fast(p, ignore=set()):
88
l = deque()
@@ -22,14 +22,14 @@ def react_fast(p, ignore=set()):
2222
return l
2323

2424

25-
advent.setup(2018, 5)
26-
fin = advent.get_input(mode='rb')
25+
# Open the first argument as input or use stdin if no arguments were given
26+
fin = open(sys.argv[1], 'rb') if len(sys.argv) > 1 else sys.stdin.buffer
2727

2828
polymer = fin.read().rstrip()
2929
trimmed = react_fast(polymer)
3030
reacted_len = len(trimmed)
3131

32-
advent.print_answer(1, reacted_len)
32+
print('Part 1:', reacted_len)
3333

3434

3535
best_reacted_len = reacted_len
@@ -40,4 +40,4 @@ def react_fast(p, ignore=set()):
4040
if reacted_len < best_reacted_len:
4141
best_reacted_len = reacted_len
4242

43-
advent.print_answer(2, best_reacted_len)
43+
print('Part 2:', best_reacted_len)

2018/solutions/day07.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
import copy
55
import heapq
66
from collections import defaultdict
@@ -51,8 +51,8 @@ def work(graph, queue, duration, max_workers):
5151
return total_time
5252

5353

54-
advent.setup(2018, 7)
55-
fin = advent.get_input()
54+
# Open the first argument as input or use stdin if no arguments were given
55+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
5656

5757
graph = defaultdict(lambda: [0, set()])
5858

@@ -68,12 +68,12 @@ def work(graph, queue, duration, max_workers):
6868
heapq.heappush(roots, letter)
6969

7070
order = lex_toposort(copy.deepcopy(graph), roots[:])
71-
advent.print_answer(1, order)
71+
print('Part 1:', order)
7272

7373

7474
durations = {}
7575
for c in graph:
7676
durations[c] = ord(c) - ord('A') + 61
7777

7878
total = work(graph, roots, durations, 5)
79-
advent.print_answer(2, total)
79+
print('Part 2:', total)

2018/solutions/day08.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
from collections import namedtuple
55

66
Node = namedtuple('Node', ['length', 'children', 'metadata'])
@@ -33,15 +33,15 @@ def node_value(node):
3333
return value
3434

3535

36-
advent.setup(2018, 8)
37-
fin = advent.get_input()
36+
# Open the first argument as input or use stdin if no arguments were given
37+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
3838

3939
nums = list(map(int, fin.read().split()))
4040
root = build_tree(nums)
4141
meta_sum = sum_meta(root)
4242

43-
advent.print_answer(1, meta_sum)
43+
print('Part 1:', meta_sum)
4444

4545

4646
value = node_value(root)
47-
advent.print_answer(2, value)
47+
print('Part 2:', value)

2018/solutions/day09.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
from collections import deque
55

66
def play(nplayers, max_marble):
@@ -19,14 +19,14 @@ def play(nplayers, max_marble):
1919
return max(scores)
2020

2121

22-
advent.setup(2018, 9)
23-
fin = advent.get_input()
22+
# Open the first argument as input or use stdin if no arguments were given
23+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
2424

2525
s = fin.read().split()
2626
nplayers, last_marble = int(s[0]), int(s[6])
2727

2828
winner1 = play(nplayers, last_marble)
29-
advent.print_answer(1, winner1)
29+
print('Part 1:', winner1)
3030

3131
winner2 = play(nplayers, last_marble * 100)
32-
advent.print_answer(2, winner2)
32+
print('Part 2:', winner2)

2018/solutions/day10.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
import re
55

66
def simulate(pts, t):
@@ -33,8 +33,9 @@ def search(pts):
3333

3434
return t1
3535

36-
advent.setup(2018, 10)
37-
fin = advent.get_input()
36+
37+
# Open the first argument as input or use stdin if no arguments were given
38+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
3839

3940
points = []
4041
for line in fin:
@@ -52,5 +53,5 @@ def search(pts):
5253
word += '\n'
5354

5455
# Can't really print this nicely, but whatever
55-
advent.print_answer(1, '\n' + word)
56-
advent.print_answer(2, t)
56+
print('Part 1:', '\n' + word)
57+
print('Part 2:', t)

2018/solutions/day12.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44

55
def simulate(first_gen, rules, days):
66
cur_gen = first_gen
@@ -38,8 +38,8 @@ def simulate(first_gen, rules, days):
3838
return idx_sum + alive * days_left
3939

4040

41-
advent.setup(2018, 12)
42-
fin = advent.get_input()
41+
# Open the first argument as input or use stdin if no arguments were given
42+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
4343

4444
plants = fin.readline().replace('initial state:', '').strip()
4545
fin.readline()
@@ -53,7 +53,7 @@ def simulate(first_gen, rules, days):
5353
rules.add(k)
5454

5555
ans = simulate(plants, rules, 20)
56-
advent.print_answer(1, ans)
56+
print('Part 1:', ans)
5757

5858
ans2 = simulate(plants, rules, 50*10**9)
59-
advent.print_answer(2, ans2)
59+
print('Part 2:', ans2)

2018/solutions/day16.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
import re
5+
56
import z3
67

78
def solve(ops):
@@ -19,6 +20,10 @@ def solve(ops):
1920

2021
return tuple(map(z3.IntNumRef.as_long, map(m.eval, variables)))
2122

23+
24+
# Open the first argument as input or use stdin if no arguments were given
25+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
26+
2227
opcodes = [
2328
lambda r,a,b: r[a] + r[b], # 0 addr
2429
lambda r,a,b: r[a] + b, # 1 addi
@@ -41,10 +46,6 @@ def solve(ops):
4146
opmap = list(set(range(16)) for i in range(16))
4247
rexp = re.compile(r'-?\d+')
4348

44-
45-
advent.setup(2018, 16)
46-
fin = advent.get_input()
47-
4849
data = fin.read().strip().split('\n\n\n\n')
4950
samples = [l.split('\n') for l in data[0].split('\n\n')]
5051
program = [tuple(map(int, l.split())) for l in data[1].split('\n')]
@@ -66,7 +67,7 @@ def solve(ops):
6667
if count >= 3:
6768
ans += 1
6869

69-
advent.print_answer(1, ans)
70+
print('Part 1:', ans)
7071

7172

7273
opmap = solve(opmap)
@@ -76,4 +77,4 @@ def solve(ops):
7677
regs[instr[3]] = opcodes[opmap[instr[0]]](regs, instr[1], instr[2])
7778

7879
ans2 = regs[0]
79-
advent.print_answer(2, ans2)
80+
print('Part 2:', ans2)

2018/solutions/day17.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from utils import advent
3+
import sys
44
import re
55

66
# This program assumes that a situation like
@@ -87,8 +87,8 @@ def fill(sx, sy):
8787

8888
SAND, WATER, MOVING_WATER, CLAY = range(4)
8989

90-
advent.setup(2018, 17)
91-
fin = advent.get_input()
90+
# Open the first argument as input or use stdin if no arguments were given
91+
fin = open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin
9292

9393
numexp = re.compile(r'-?\d+')
9494
minx, miny = +9999, +9999
@@ -145,7 +145,7 @@ def fill(sx, sy):
145145
grid = [[SAND] * gridw] + grid
146146

147147
filled = fill(500 - minx + padw, 0) - 1
148-
advent.print_answer(1, filled)
148+
print('Part 1:', filled)
149149

150150

151151
retained = filled
@@ -161,4 +161,4 @@ def fill(sx, sy):
161161
grid[y][x] = MOVING_WATER
162162
retained -= 1
163163

164-
advent.print_answer(2, retained)
164+
print('Part 2:', retained)

2018/solutions/utils

-1
This file was deleted.

0 commit comments

Comments
 (0)