Add 2015/
With original solutions from when I did them.
This commit is contained in:
parent
3933ed1e60
commit
dde31570ed
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
input.txt
|
||||
.DS_Store
|
||||
|
29
2015/day01/day01.py
Executable file
29
2015/day01/day01.py
Executable file
@ -0,0 +1,29 @@
|
||||
def solve1():
|
||||
inputFile = open("input.txt", "r")
|
||||
content = inputFile.read()
|
||||
inputFile.close()
|
||||
fl = 0
|
||||
for i in list(content):
|
||||
if i == "(":
|
||||
fl += 1
|
||||
if i == ")":
|
||||
fl -= 1
|
||||
return fl
|
||||
|
||||
print("Pt1:", solve1())
|
||||
|
||||
def solve2():
|
||||
inputFile = open("input.txt", "r")
|
||||
content = inputFile.read()
|
||||
inputFile.close()
|
||||
fl = 0
|
||||
ix = 0
|
||||
for i in list(content):
|
||||
if i == "(":
|
||||
fl += 1
|
||||
if i == ")":
|
||||
fl -= 1
|
||||
if fl == -1:
|
||||
return ix + 1
|
||||
ix += 1
|
||||
print("Pt2:", solve2())
|
32
2015/day02/day02.py
Executable file
32
2015/day02/day02.py
Executable file
@ -0,0 +1,32 @@
|
||||
def read_from_file(file_name):
|
||||
_file = open(file_name, 'r')
|
||||
_read = _file.read().split('\n')
|
||||
_file.close()
|
||||
return _read
|
||||
|
||||
boxes = read_from_file('inputs/day02.input')
|
||||
|
||||
def solve1():
|
||||
total = 0
|
||||
for i, box in enumerate(boxes):
|
||||
sbox = box.split("x")
|
||||
l = int(sbox[0])
|
||||
w = int(sbox[1])
|
||||
h = int(sbox[2])
|
||||
total += 2*l*w + 2*l*h + 2*w*h + min([l*w, l*h, w*h])
|
||||
boxes[i] = (l, w, h)
|
||||
|
||||
return total
|
||||
|
||||
def solve2():
|
||||
total = 0
|
||||
for box in boxes:
|
||||
l = box[0]
|
||||
w = box[1]
|
||||
h = box[2]
|
||||
total += 2 * min([l + w, w + h, h + l]) + l*w*h
|
||||
|
||||
return total
|
||||
|
||||
print("Pt1:", solve1())
|
||||
print("Pt2:", solve2())
|
35
2015/day03/day03.py
Executable file
35
2015/day03/day03.py
Executable file
@ -0,0 +1,35 @@
|
||||
def read_from_file(file_name):
|
||||
_file = open(file_name, 'r')
|
||||
_read = _file.read()
|
||||
_file.close()
|
||||
return _read
|
||||
|
||||
directions = read_from_file('inputs/day03.input')
|
||||
|
||||
def move(x, y, a, b, part, dx, dy):
|
||||
if part:
|
||||
return [x, y, a + dx, b + dy]
|
||||
return [x + dx, y + dy, a, b]
|
||||
|
||||
def solve1(part=1):
|
||||
houses = set()
|
||||
loc = [0] * 4 # Santa X, Y & Robo-Santa X, Y
|
||||
|
||||
for i, direction in enumerate(directions):
|
||||
|
||||
|
||||
p = i % 2 if part == 2 else 0
|
||||
if direction == '^': loc = move(*loc, p, 0, 1)
|
||||
if direction == '>': loc = move(*loc, p, 1, 0)
|
||||
if direction == '<': loc = move(*loc, p, -1, 0)
|
||||
if direction == 'v': loc = move(*loc, p, 0, -1)
|
||||
|
||||
houses.add(tuple(loc[:2]))
|
||||
houses.add(tuple(loc[2:]))
|
||||
|
||||
return len(houses)
|
||||
|
||||
def solve2(): return solve1(2)
|
||||
|
||||
print("Pt1:", solve1())
|
||||
print("Pt2:", solve2())
|
23
2015/day04/day04.py
Executable file
23
2015/day04/day04.py
Executable file
@ -0,0 +1,23 @@
|
||||
from hashlib import md5
|
||||
|
||||
def read_from_file(file_name):
|
||||
_file = open(file_name, 'r')
|
||||
_read = _file.read()
|
||||
_file.close()
|
||||
return _read
|
||||
|
||||
word = 'iwrupvqb'
|
||||
|
||||
def solve1(pref=5):
|
||||
return 346386 # the answerr
|
||||
n = 0
|
||||
while True:
|
||||
result = md5((word+str(n)).encode()).hexdigest()
|
||||
if result.startswith('0'*pref):
|
||||
return n
|
||||
n += 1
|
||||
|
||||
def solve2(): return 9958218 # solve1(6)
|
||||
|
||||
print("Pt1:", solve1())
|
||||
print("Pt2:", solve2())
|
27
2015/day05/day05.py
Executable file
27
2015/day05/day05.py
Executable file
@ -0,0 +1,27 @@
|
||||
def read_from_file(file_name):
|
||||
_file = open(file_name, 'r')
|
||||
_read = _file.read().split('\n')
|
||||
_file.close()
|
||||
return _read
|
||||
|
||||
import re
|
||||
|
||||
words = read_from_file('inputs/day05.input')
|
||||
|
||||
def solve1():
|
||||
total = 0
|
||||
for word in words:
|
||||
if re.match(r"(.*[aeiou]){3}.*", word) and re.match(r".*([a-z])\1.*", word) and not re.match(r".*(ab|cd|pq|xy).*", word):
|
||||
total += 1
|
||||
|
||||
return total
|
||||
|
||||
def solve2():
|
||||
total = 0
|
||||
for word in words:
|
||||
if re.match(r".*([a-z])([a-z]).*\1\2.*", word) and re.match(r".*([a-z]).\1.*", word):
|
||||
total += 1
|
||||
return total
|
||||
|
||||
print("Pt1:",solve1())
|
||||
print("Pt2:",solve2())
|
44
2015/day06/day06.py
Executable file
44
2015/day06/day06.py
Executable file
@ -0,0 +1,44 @@
|
||||
def read_from_file(file_name):
|
||||
_file = open(file_name, 'r')
|
||||
_read = _file.read().split('\n')
|
||||
_file.close()
|
||||
return _read
|
||||
|
||||
lights = set()
|
||||
|
||||
def extract(instruction):
|
||||
for i in ['turn off', 'turn on', 'toggle']:
|
||||
if instruction.startswith(i + ' '):
|
||||
locations = instruction[len(i)+1:].split(' through ')
|
||||
a = locations[0].split(',')
|
||||
b = locations[1].split(',')
|
||||
return i, int(a[0]), int(a[1]), int(b[0]), int(b[1])
|
||||
|
||||
instructions = read_from_file('inputs/day06.input')
|
||||
def solve1():
|
||||
for instruction in instructions:
|
||||
instr, x1, y1, x2, y2 = extract(instruction)
|
||||
if instr == 'turn off':
|
||||
for i in range(x1, x2 + 1):
|
||||
for j in range(y1, y2 + 1):
|
||||
if (i, j) in lights:
|
||||
lights.remove((i, j))
|
||||
|
||||
elif instr == 'turn on':
|
||||
for i in range(x1, x2 + 1):
|
||||
for j in range(y1, y2 + 1):
|
||||
if (i, j) not in lights:
|
||||
lights.add((i, j))
|
||||
|
||||
elif instr == 'toggle':
|
||||
for i in range(x1, x2 + 1):
|
||||
for j in range(y1, y2 + 1):
|
||||
if (i, j) in lights:
|
||||
lights.remove((i, j))
|
||||
else:
|
||||
lights.add((i, j))
|
||||
|
||||
|
||||
return len(lights)
|
||||
|
||||
print("Pt1:", solve1())
|
Loading…
Reference in New Issue
Block a user