day9, day10

master
Tom Weber 2 years ago
parent d10eb5cc6c
commit 92455e38b3

1
.gitignore vendored

@ -0,0 +1 @@
.idea

@ -0,0 +1,146 @@
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop

@ -0,0 +1,6 @@
noop
addx 3
addx -5
noop
noop
noop

@ -0,0 +1,26 @@
lines = open('input.txt', "r").read().splitlines()
cycle = 0
x = 1
signals = [20, 60, 100, 140, 180, 220]
strengths = []
for line in lines:
cmd = line.split(" ")
if len(signals) == 0:
signals.append(9999999)
elif cycle == signals[0]:
strengths.append(x *cycle)
signals.pop(0)
elif cycle + 1 == signals[0]:
strengths.append(x * (cycle+1))
signals.pop(0)
elif cycle + 2 == signals[0]:
strengths.append(x * (cycle+2))
signals.pop(0)
if cmd[0] == "noop":
cycle += 1
else:
cycle += 2
x += int(cmd[1])
print(sum(strengths))

@ -0,0 +1,29 @@
lines = open('input.txt', "r").read().splitlines()
cycle = 0
x = 1
end = [40, 80, 120, 160, 200, 240]
registers = [999999 for y in range(240)]
for line in lines:
cmd = line.split(" ")
registers[cycle] = x
if cmd[0] == "noop":
cycle += 1
else:
registers[cycle+1] = x
cycle += 2
x += int(cmd[1])
pixel_pos = 0
screen = ""
for r in range(len(registers)):
if r in end:
screen += "\n"
pixel_pos = 0
if pixel_pos in [registers[r]-1, registers[r], registers[r]+1]:
screen += "#"
else:
screen += "."
pixel_pos += 1
print(screen)

@ -0,0 +1,146 @@
noop
addx 5
addx -2
noop
noop
addx 7
addx 15
addx -14
addx 2
addx 7
noop
addx -2
noop
addx 3
addx 4
noop
noop
addx 5
noop
noop
addx 1
addx 2
addx 5
addx -40
noop
addx 5
addx 2
addx 15
noop
addx -10
addx 3
noop
addx 2
addx -15
addx 20
addx -2
addx 2
addx 5
addx 3
addx -2
noop
noop
noop
addx 5
addx 2
addx 5
addx -38
addx 3
noop
addx 2
addx 5
noop
noop
addx -2
addx 5
addx 2
addx -2
noop
addx 7
noop
addx 10
addx -5
noop
noop
noop
addx -15
addx 22
addx 3
noop
noop
addx 2
addx -37
noop
noop
addx 13
addx -10
noop
addx -5
addx 10
addx 5
addx 2
addx -6
addx 11
addx -2
addx 2
addx 5
addx 3
noop
addx 3
addx -2
noop
addx 6
addx -22
addx 23
addx -38
noop
addx 7
noop
addx 5
noop
noop
noop
addx 9
addx -8
addx 2
addx 7
noop
noop
addx 2
addx -4
addx 5
addx 5
addx 2
addx -26
addx 31
noop
addx 3
noop
addx -40
addx 7
noop
noop
noop
noop
addx 2
addx 4
noop
addx -1
addx 5
noop
addx 1
noop
addx 2
addx 5
addx 2
noop
noop
noop
addx 5
addx 1
noop
addx 4
addx 3
noop
addx -24
noop

@ -0,0 +1,8 @@
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

@ -0,0 +1,8 @@
R 5
U 8
L 8
D 3
R 17
D 10
L 25
U 20

@ -0,0 +1,64 @@
lines = open("input.txt", "r").read().splitlines()
class Knots:
def __init__(self):
self.x = 0
self.y = 0
self.pos = []
def visited(self):
return len(set(self.pos))
t= Knots()
h = Knots()
def move(h, t):
if abs(h.x - t.x) <= 1 and abs(h.y - t.y) <= 1:
pass
elif abs(h.x - t.x) > 1 and abs(h.y - t.y) == 0:
if h.x > t.x:
t.x += 1
else:
t.x -= 1
elif abs(h.x - t.x) == 0 and abs(h.y - t.y) > 1:
if h.y > t.y:
t.y += 1
else:
t.y -= 1
else:
if h.x > t.x and h.y > t.y :
t.x += 1
t.y += 1
elif h.x > t.x and h.y < t.y:
t.x += 1
t.y -= 1
elif h.x < t.x and h.y < t.y:
t.x -= 1
t.y -= 1
else:
t.x -= 1
t.y += 1
t.pos.append((t.x,t.y))
t.pos.append((0,0))
for line in lines:
cmd = line.split(" ")
if cmd[0] == "R":
for i in range(int(cmd[1])):
h.x = h.x + 1
move(h, t)
if cmd[0] == "L":
for i in range(int(cmd[1])):
h.x = h.x - 1
move(h, t)
if cmd[0] == "U":
for i in range(int(cmd[1])):
h.y = h.y + 1
move(h, t)
if cmd[0] == "D":
for i in range(int(cmd[1])):
h.y = h.y - 1
move(h, t)
print(t.visited())

@ -0,0 +1,69 @@
lines = open("input.txt", "r").read().splitlines()
class Knots:
def __init__(self):
self.x = 0
self.y = 0
self.pos = []
def visited(self):
return len(set(self.pos))
k = []
for i in range(10):
k.append(Knots())
k[i].pos.append((0,0))
def move(h, t):
if abs(h.x - t.x) <= 1 and abs(h.y - t.y) <= 1:
pass
elif abs(h.x - t.x) > 1 and abs(h.y - t.y) == 0:
if h.x > t.x:
t.x += 1
else:
t.x -= 1
elif abs(h.x - t.x) == 0 and abs(h.y - t.y) > 1:
if h.y > t.y:
t.y += 1
else:
t.y -= 1
else:
if h.x > t.x and h.y > t.y :
t.x += 1
t.y += 1
elif h.x > t.x and h.y < t.y:
t.x += 1
t.y -= 1
elif h.x < t.x and h.y < t.y:
t.x -= 1
t.y -= 1
else:
t.x -= 1
t.y += 1
t.pos.append((t.x,t.y))
for line in lines:
cmd = line.split(" ")
if cmd[0] == "R":
for _ in range(int(cmd[1])):
k[0].x = k[0].x + 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "L":
for _ in range(int(cmd[1])):
k[0].x = k[0].x - 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "U":
for _ in range(int(cmd[1])):
k[0].y = k[0].y + 1
for i in range(1, 10):
move(k[i-1], k[i])
if cmd[0] == "D":
for _ in range(int(cmd[1])):
k[0].y = k[0].y - 1
for i in range(1, 10):
move(k[i-1], k[i])
print(k[-1].visited())

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save