add 2019
This commit is contained in:
parent
856852f4ce
commit
fc8320bdd0
16 changed files with 2072 additions and 0 deletions
6
2019/00/00.py
Normal file
6
2019/00/00.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
with open("input.txt","r") as f:
|
||||
input = f.read().split('\n')
|
||||
|
||||
part1 = 0
|
||||
part2 = 0
|
||||
print(part1, part2)
|
0
2019/00/input.txt
Normal file
0
2019/00/input.txt
Normal file
15
2019/01/01.py
Normal file
15
2019/01/01.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
with open("input.txt","r") as f:
|
||||
masses = [int(x) for x in f.read().split('\n')]
|
||||
|
||||
def fuel_required(mass):
|
||||
return mass // 3 - 2
|
||||
|
||||
def fuel_required_recursive(mass):
|
||||
fuel = mass // 3 - 2
|
||||
if fuel <= 0:
|
||||
return 0
|
||||
return fuel + fuel_required_recursive(fuel)
|
||||
|
||||
part1 = sum([fuel_required(mass) for mass in masses])
|
||||
part2 = sum([fuel_required_recursive(mass) for mass in masses])
|
||||
print(part1, part2)
|
100
2019/01/input.txt
Normal file
100
2019/01/input.txt
Normal file
|
@ -0,0 +1,100 @@
|
|||
147077
|
||||
148686
|
||||
71851
|
||||
98056
|
||||
65024
|
||||
87254
|
||||
146003
|
||||
128542
|
||||
136657
|
||||
91885
|
||||
91904
|
||||
78806
|
||||
58210
|
||||
67520
|
||||
118393
|
||||
68344
|
||||
69593
|
||||
135370
|
||||
111892
|
||||
84153
|
||||
105683
|
||||
76166
|
||||
112780
|
||||
145179
|
||||
83811
|
||||
61481
|
||||
118277
|
||||
59732
|
||||
72222
|
||||
64606
|
||||
55645
|
||||
82168
|
||||
97590
|
||||
122479
|
||||
120365
|
||||
103057
|
||||
76225
|
||||
148099
|
||||
100610
|
||||
75592
|
||||
148678
|
||||
132756
|
||||
55335
|
||||
77094
|
||||
73992
|
||||
95097
|
||||
92382
|
||||
78885
|
||||
93657
|
||||
121709
|
||||
114261
|
||||
90565
|
||||
110043
|
||||
145497
|
||||
92066
|
||||
109833
|
||||
76107
|
||||
143941
|
||||
67084
|
||||
139407
|
||||
56730
|
||||
131457
|
||||
110026
|
||||
85632
|
||||
74239
|
||||
116964
|
||||
129806
|
||||
75030
|
||||
76317
|
||||
99523
|
||||
78069
|
||||
75685
|
||||
81279
|
||||
58287
|
||||
148135
|
||||
89313
|
||||
139141
|
||||
136066
|
||||
94046
|
||||
50430
|
||||
55242
|
||||
123494
|
||||
68410
|
||||
83716
|
||||
122608
|
||||
79343
|
||||
88826
|
||||
95968
|
||||
98603
|
||||
104895
|
||||
128814
|
||||
120473
|
||||
97504
|
||||
60990
|
||||
98132
|
||||
58895
|
||||
92987
|
||||
136301
|
||||
131747
|
||||
137498
|
31
2019/02/02.py
Normal file
31
2019/02/02.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
def process(program):
|
||||
i = 0
|
||||
while True:
|
||||
opcode = program[i]
|
||||
if opcode == 99:
|
||||
break
|
||||
elif opcode == 1:
|
||||
program[program[i+3]] = program[program[i+1]] + program[program[i+2]]
|
||||
elif opcode == 2:
|
||||
program[program[i+3]] = program[program[i+1]] * program[program[i+2]]
|
||||
else:
|
||||
break
|
||||
i += 4
|
||||
return program[0]
|
||||
|
||||
def alarm(noun, verb):
|
||||
with open("input.txt","r") as f:
|
||||
program = [int(x) for x in f.read().split(',')]
|
||||
program[1] = noun
|
||||
program[2] = verb
|
||||
return process(program)
|
||||
|
||||
def part2():
|
||||
for noun in range(100):
|
||||
for verb in range(1,100):
|
||||
if alarm(noun, verb) == 19690720:
|
||||
return 100 * noun + verb
|
||||
|
||||
part1 = alarm(12,2)
|
||||
part2 = part2()
|
||||
print(part1, part2)
|
1
2019/02/input.txt
Normal file
1
2019/02/input.txt
Normal file
|
@ -0,0 +1 @@
|
|||
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,10,1,19,1,6,19,23,1,23,13,27,2,6,27,31,1,5,31,35,2,10,35,39,1,6,39,43,1,13,43,47,2,47,6,51,1,51,5,55,1,55,6,59,2,59,10,63,1,63,6,67,2,67,10,71,1,71,9,75,2,75,10,79,1,79,5,83,2,10,83,87,1,87,6,91,2,9,91,95,1,95,5,99,1,5,99,103,1,103,10,107,1,9,107,111,1,6,111,115,1,115,5,119,1,10,119,123,2,6,123,127,2,127,6,131,1,131,2,135,1,10,135,0,99,2,0,14,0
|
1
2019/02/input_sample.txt
Normal file
1
2019/02/input_sample.txt
Normal file
|
@ -0,0 +1 @@
|
|||
1,9,10,3,2,3,11,0,99,30,40,50
|
1
2019/02/input_sample2.txt
Normal file
1
2019/02/input_sample2.txt
Normal file
|
@ -0,0 +1 @@
|
|||
1,0,0,0,99
|
27
2019/04/04.py
Normal file
27
2019/04/04.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
passwords = [str(p) for p in range(172851,675869+1)]
|
||||
|
||||
def monotonic(password):
|
||||
digits = list(password)
|
||||
if digits == sorted(digits):
|
||||
return True
|
||||
return False
|
||||
|
||||
def at_least_two_adjacent(password):
|
||||
digits = list(password)
|
||||
for i, digit in enumerate(digits):
|
||||
if i+1 == len(digits):
|
||||
return False
|
||||
if digits[i+1] == digit:
|
||||
return True
|
||||
|
||||
def exactly_two_adjacent(password):
|
||||
if not at_least_two_adjacent(password):
|
||||
return False
|
||||
digits = list(password)
|
||||
for digit in digits:
|
||||
if password.count(digit) == 2:
|
||||
return True
|
||||
|
||||
part1 = [p for p in passwords if monotonic(p) and at_least_two_adjacent(p)]
|
||||
part2 = [p for p in passwords if monotonic(p) and exactly_two_adjacent(p)]
|
||||
print(len(part1), len(part2))
|
1
2019/04/input.txt
Normal file
1
2019/04/input.txt
Normal file
|
@ -0,0 +1 @@
|
|||
172851-675869
|
33
2019/06/06.py
Normal file
33
2019/06/06.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
with open("input.txt","r") as f:
|
||||
lines = f.read().split('\n')
|
||||
orbits = {}
|
||||
for line in lines:
|
||||
parent, child = line.split(')')
|
||||
orbits[child] = parent
|
||||
|
||||
def depth(node, graph):
|
||||
depth = 1
|
||||
parent = graph[node]
|
||||
while parent != "COM":
|
||||
depth += 1
|
||||
parent = graph[parent]
|
||||
return depth
|
||||
|
||||
def parents(node, graph):
|
||||
path = []
|
||||
parent = graph[node]
|
||||
while parent != "COM":
|
||||
path.append(parent)
|
||||
parent = graph[parent]
|
||||
return path
|
||||
|
||||
def orbital_transfers(start, end, graph):
|
||||
path1 = parents(start, graph)
|
||||
path2 = parents(end, graph)
|
||||
set1 = set(path1)
|
||||
set2 = set(path2)
|
||||
return len((set1 - set2) | (set2 - set1)) # union of differences
|
||||
|
||||
part1 = sum([depth(x, orbits) for x in orbits.keys()])
|
||||
part2 = orbital_transfers("YOU", "SAN", orbits)
|
||||
print(part1, part2)
|
1799
2019/06/input.txt
Normal file
1799
2019/06/input.txt
Normal file
File diff suppressed because it is too large
Load diff
11
2019/06/input_sample.txt
Normal file
11
2019/06/input_sample.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
COM)B
|
||||
B)C
|
||||
C)D
|
||||
D)E
|
||||
E)F
|
||||
B)G
|
||||
G)H
|
||||
D)I
|
||||
E)J
|
||||
J)K
|
||||
K)L
|
13
2019/06/input_sample2.txt
Normal file
13
2019/06/input_sample2.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
COM)B
|
||||
B)C
|
||||
C)D
|
||||
D)E
|
||||
E)F
|
||||
B)G
|
||||
G)H
|
||||
D)I
|
||||
E)J
|
||||
J)K
|
||||
K)L
|
||||
K)YOU
|
||||
I)SAN
|
32
2019/08/08.py
Normal file
32
2019/08/08.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
from textwrap import wrap
|
||||
with open("input.txt","r") as f:
|
||||
width = 25
|
||||
height = 6
|
||||
layersize = width * height
|
||||
data = f.read()
|
||||
|
||||
layers = wrap(data, layersize)
|
||||
zeros = [layer.count("0") for layer in layers]
|
||||
i = zeros.index(min(zeros))
|
||||
part1 = layers[i].count("1") * layers[i].count("2")
|
||||
print(part1)
|
||||
|
||||
top = []
|
||||
for i, pixel in enumerate(layers[0]):
|
||||
n = 0
|
||||
while pixel == "2":
|
||||
pixel = layers[n][i]
|
||||
n += 1
|
||||
top.append(pixel)
|
||||
|
||||
def print_image(layer, width, height):
|
||||
output = ''
|
||||
for x in layer:
|
||||
output += x
|
||||
output = output.replace("0","⠀")
|
||||
output = output.replace("1","█")
|
||||
output = wrap(output, width)
|
||||
for line in output:
|
||||
print(line)
|
||||
|
||||
print_image(top, width, height)
|
1
2019/08/input.txt
Normal file
1
2019/08/input.txt
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue