2019 day 4 and 5
This commit is contained in:
parent
b0e2334427
commit
9718165d7b
70
2019/d4.py
Normal file
70
2019/d4.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
from lib import get_data, str_to_ints
|
||||||
|
|
||||||
|
|
||||||
|
def in_range_1(x):
|
||||||
|
contains_double = False
|
||||||
|
s = str(x)
|
||||||
|
for i in range(len(s) - 1):
|
||||||
|
if s[i] == s[i + 1]:
|
||||||
|
contains_double = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not contains_double:
|
||||||
|
return False
|
||||||
|
|
||||||
|
for i in range(len(s) - 1):
|
||||||
|
if ord(s[i]) > ord(s[i + 1]):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def in_range_2(x):
|
||||||
|
contains_double = False
|
||||||
|
s = str(x)
|
||||||
|
for i in range(len(s) - 1):
|
||||||
|
if s[i] == s[i + 1]:
|
||||||
|
if i + 2 < len(s):
|
||||||
|
if s[i + 2] == s[i + 1]:
|
||||||
|
continue
|
||||||
|
if i - 1 >= 0:
|
||||||
|
if s[i - 1] == s[i]:
|
||||||
|
continue
|
||||||
|
contains_double = True
|
||||||
|
|
||||||
|
if not contains_double:
|
||||||
|
return False
|
||||||
|
|
||||||
|
for i in range(len(s) - 1):
|
||||||
|
if ord(s[i]) > ord(s[i + 1]):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def part_1(data):
|
||||||
|
a, b = str_to_ints(data)
|
||||||
|
b = -b
|
||||||
|
r = 0
|
||||||
|
for x in range(a, b + 1):
|
||||||
|
if in_range_1(x):
|
||||||
|
r += 1
|
||||||
|
print(r)
|
||||||
|
|
||||||
|
|
||||||
|
def part_2(data):
|
||||||
|
a, b = str_to_ints(data)
|
||||||
|
b = -b
|
||||||
|
r = 0
|
||||||
|
for x in range(a, b + 1):
|
||||||
|
if in_range_2(x):
|
||||||
|
r += 1
|
||||||
|
print(r)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
data = get_data(__file__)
|
||||||
|
part_1(data)
|
||||||
|
part_2(data)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
123
2019/d5.py
Normal file
123
2019/d5.py
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
from lib import get_data, str_to_ints
|
||||||
|
|
||||||
|
|
||||||
|
def part_1(data):
|
||||||
|
xs = str_to_ints(data)
|
||||||
|
i = 0
|
||||||
|
while i < len(xs):
|
||||||
|
inst = str(xs[i])
|
||||||
|
inst = "0" * (5 - len(inst)) + inst
|
||||||
|
assert len(inst) == 5
|
||||||
|
op = int(inst[3:5])
|
||||||
|
mode_p1 = int(inst[2])
|
||||||
|
mode_p2 = int(inst[1])
|
||||||
|
mode_p3 = int(inst[0])
|
||||||
|
match op:
|
||||||
|
case 1:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
xs[xs[i + 3]] = p1 + p2
|
||||||
|
i += 4
|
||||||
|
case 2:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
xs[xs[i + 3]] = p1 * p2
|
||||||
|
i += 4
|
||||||
|
case 3:
|
||||||
|
print("input", i, 1)
|
||||||
|
assert mode_p1 == 0
|
||||||
|
xs[xs[i + 1]] = 1
|
||||||
|
i += 2
|
||||||
|
case 4:
|
||||||
|
if mode_p1 == 0:
|
||||||
|
v = xs[xs[i + 1]]
|
||||||
|
else:
|
||||||
|
v = xs[i + 1]
|
||||||
|
print("output", v)
|
||||||
|
i += 2
|
||||||
|
case 99:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def part_2(data):
|
||||||
|
xs = str_to_ints(data)
|
||||||
|
i = 0
|
||||||
|
while i < len(xs):
|
||||||
|
inst = str(xs[i])
|
||||||
|
inst = "0" * (5 - len(inst)) + inst
|
||||||
|
assert len(inst) == 5
|
||||||
|
op = int(inst[3:5])
|
||||||
|
mode_p1 = int(inst[2])
|
||||||
|
mode_p2 = int(inst[1])
|
||||||
|
mode_p3 = int(inst[0])
|
||||||
|
match op:
|
||||||
|
case 1:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
xs[xs[i + 3]] = p1 + p2
|
||||||
|
i += 4
|
||||||
|
case 2:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
xs[xs[i + 3]] = p1 * p2
|
||||||
|
i += 4
|
||||||
|
case 3:
|
||||||
|
print("input", i, 5)
|
||||||
|
assert mode_p1 == 0
|
||||||
|
xs[xs[i + 1]] = 5
|
||||||
|
i += 2
|
||||||
|
case 4:
|
||||||
|
if mode_p1 == 0:
|
||||||
|
v = xs[xs[i + 1]]
|
||||||
|
else:
|
||||||
|
v = xs[i + 1]
|
||||||
|
print("output", v)
|
||||||
|
i += 2
|
||||||
|
case 99:
|
||||||
|
break
|
||||||
|
case 5:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
if p1 != 0:
|
||||||
|
i = p2
|
||||||
|
else:
|
||||||
|
i += 3
|
||||||
|
case 6:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
if p1 == 0:
|
||||||
|
i = p2
|
||||||
|
else:
|
||||||
|
i += 3
|
||||||
|
case 7:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
if p1 < p2:
|
||||||
|
xs[xs[i + 3]] = 1
|
||||||
|
else:
|
||||||
|
xs[xs[i + 3]] = 0
|
||||||
|
i += 4
|
||||||
|
case 8:
|
||||||
|
p1 = xs[xs[i + 1]] if mode_p1 == 0 else xs[i + 1]
|
||||||
|
p2 = xs[xs[i + 2]] if mode_p2 == 0 else xs[i + 2]
|
||||||
|
assert mode_p3 == 0
|
||||||
|
if p1 == p2:
|
||||||
|
xs[xs[i + 3]] = 1
|
||||||
|
else:
|
||||||
|
xs[xs[i + 3]] = 0
|
||||||
|
i += 4
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
data = get_data(__file__)
|
||||||
|
part_1(data)
|
||||||
|
part_2(data)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
27
README.md
27
README.md
@ -1,9 +1,8 @@
|
|||||||
# aocpy
|
# aocpy
|
||||||
|
|
||||||
Solutions and accompanying utility scripts for Advent of Code challenges
|
Solutions and utility script for Advent of Code challenges in Python.
|
||||||
written in Python.
|
|
||||||
|
|
||||||
# 2015
|
## AoC 2015
|
||||||
|
|
||||||
- Day 1: 3:10
|
- Day 1: 3:10
|
||||||
- Day 2: 5:24 :/
|
- Day 2: 5:24 :/
|
||||||
@ -31,7 +30,7 @@ written in Python.
|
|||||||
- Day 24: 20:00 ugly - recursive solution would be more elegant
|
- Day 24: 20:00 ugly - recursive solution would be more elegant
|
||||||
- Day 25: 9:34
|
- Day 25: 9:34
|
||||||
|
|
||||||
# 2016
|
## AoC 2016
|
||||||
|
|
||||||
- Day 1: 29:00 That was emberassingly slow. Out of my rhythm?
|
- Day 1: 29:00 That was emberassingly slow. Out of my rhythm?
|
||||||
- Day 2: 13:24 Getting back into it but still slow af, obviously.
|
- Day 2: 13:24 Getting back into it but still slow af, obviously.
|
||||||
@ -59,7 +58,7 @@ written in Python.
|
|||||||
- Day 24: 48:00
|
- Day 24: 48:00
|
||||||
- Day 25: 6:45
|
- Day 25: 6:45
|
||||||
|
|
||||||
# 2017
|
## 2017
|
||||||
|
|
||||||
- Day 1: 7:30
|
- Day 1: 7:30
|
||||||
- Day 2: 6:15
|
- Day 2: 6:15
|
||||||
@ -87,7 +86,7 @@ written in Python.
|
|||||||
- Day 24: 15:45 (48th)
|
- Day 24: 15:45 (48th)
|
||||||
- Day 25: 41:00
|
- Day 25: 41:00
|
||||||
|
|
||||||
# 2018
|
## AoC 2018
|
||||||
|
|
||||||
- Day 1: 1:49 (2nd)
|
- Day 1: 1:49 (2nd)
|
||||||
- Day 2: 10:53
|
- Day 2: 10:53
|
||||||
@ -109,14 +108,16 @@ written in Python.
|
|||||||
- Day 18: 24:04
|
- Day 18: 24:04
|
||||||
- Day 19:
|
- Day 19:
|
||||||
|
|
||||||
# 2019
|
## AoC 2019
|
||||||
|
|
||||||
- Day 1: 4:25 (copy and paste error)
|
- Day 1: 4:25 (copy and paste error, no leaderboard)
|
||||||
- Day 2: 7:07
|
- Day 2: 7:07 (19th)
|
||||||
- Day 3: 10:46
|
- Day 3: 10:46 (37th)
|
||||||
- Day 4:
|
- Day 4: 8:48 (just too slow, no leaderboard)
|
||||||
|
- Day 5: 34:24 (that wasn't hard at all)
|
||||||
|
- Day 6:
|
||||||
|
|
||||||
# 2022
|
## AoC 2022
|
||||||
|
|
||||||
Done with this. Overall everything is solvable. It's more about consistency
|
Done with this. Overall everything is solvable. It's more about consistency
|
||||||
and focus. Of course, learning more algorithms and techniques helps.
|
and focus. Of course, learning more algorithms and techniques helps.
|
||||||
@ -164,7 +165,7 @@ Possible to-dos:
|
|||||||
if I would have been able to figure it out.
|
if I would have been able to figure it out.
|
||||||
|
|
||||||
|
|
||||||
# 2023
|
## AoC 2023
|
||||||
|
|
||||||
- Day 1: 40:00 (I don't know what I am doing.)
|
- Day 1: 40:00 (I don't know what I am doing.)
|
||||||
- Day 2: 14:15 (Okay, but far way from leaderboard.)
|
- Day 2: 14:15 (Okay, but far way from leaderboard.)
|
||||||
|
Loading…
Reference in New Issue
Block a user