Updated 2015/01,02,03

This commit is contained in:
FrederikBaerentsen 2024-11-28 19:48:55 +01:00
parent 6edd15b0e1
commit 58f56e33c7
20 changed files with 331 additions and 1204 deletions

View File

@ -1,17 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
with open(input_f) as file:
for line in file:
for idx,i in enumerate(line):
if i == '(':
result += 1
if i == ')':
result -= 1
print(result)

46
2015/01/solution.py Normal file
View File

@ -0,0 +1,46 @@
#!/bin/python3
import sys,re
from pprint import pprint
sys.path.insert(0, '../../')
from fred import list2int
input_f = 'input'
part = 2
#########################################
# #
# Part 1 #
# #
#########################################
result = 0
if part == 1:
with open(input_f) as file:
for line in file:
for idx,i in enumerate(line):
if i == '(':
result += 1
if i == ')':
result -= 1
print(result)
#########################################
# #
# Part 2 #
# #
#########################################
result = 0
if part == 2:
with open(input_f) as file:
for line in file:
for idx,i in enumerate(line):
if i == '(':
result += 1
if i == ')':
result -= 1
if result == -1:
print(idx+1)
break

63
2015/02/2.md Normal file
View File

@ -0,0 +1,63 @@
## \-\-- Day 2: I Was Told There Would Be No Math \-\--
The elves are running low on wrapping paper, and so they need to submit
an order for more. They have a list of the dimensions (length `l`, width
`w`, and height `h`) of each present, and only want to order exactly as
much as they need.
Fortunately, every present is a box (a perfect [right rectangular
prism](https://en.wikipedia.org/wiki/Cuboid#Rectangular_cuboid)), which
makes calculating the required wrapping paper for each gift a little
easier: find the surface area of the box, which is
`2*l*w + 2*w*h + 2*h*l`. The elves also need a little extra paper for
each present: the area of the smallest side.
For example:
- A present with dimensions `2x3x4` requires `2*6 + 2*12 + 2*8 = 52`
square feet of wrapping paper plus `6` square feet of slack, for a
total of `58` square feet.
- A present with dimensions `1x1x10` requires `2*1 + 2*10 + 2*10 = 42`
square feet of wrapping paper plus `1` square foot of slack, for a
total of `43` square feet.
All numbers in the elves\' list are in
feet.
How many total *square feet of wrapping paper* should they order?
Your puzzle answer was `1588178`.
## \-\-- Part Two \-\-- {#part2}
The elves are also running low on ribbon. Ribbon is all the same width,
so they only have to worry about the length they need to order, which
they would again like to be exact.
The ribbon required to wrap a present is the shortest distance around
its sides, or the smallest perimeter of any one face. Each present also
requires a bow made out of ribbon as well; the feet of ribbon required
for the perfect bow is equal to the cubic feet of volume of the present.
Don\'t ask how they tie the bow, though; they\'ll never tell.
For example:
- A present with dimensions `2x3x4` requires `2+2+3+3 = 10` feet of
ribbon to wrap the present plus `2*3*4 = 24` feet of ribbon for the
bow, for a total of `34` feet.
- A present with dimensions `1x1x10` requires `1+1+1+1 = 4` feet of
ribbon to wrap the present plus `1*1*10 = 10` feet of ribbon for the
bow, for a total of `14` feet.
How many total *feet of ribbon* should they order?
Your puzzle answer was `3783758`.
Both parts of this puzzle are complete! They provide two gold stars:
\*\*
At this point, you should [return to your Advent calendar](/2015) and
try another puzzle.
If you still want to see it, you can [get your puzzle
input](2/input).

52
2015/02/solution.py Normal file
View File

@ -0,0 +1,52 @@
#!/bin/python3
import sys,re
from pprint import pprint
sys.path.insert(0, '../../')
from fred import list2int
input_f = 'input'
part = 2
#########################################
# #
# Part 1 #
# #
#########################################
result = 0
if part == 1:
with open(input_f) as file:
for line in file:
tmp = line.rstrip().split('x')
tmp = list(map(int,tmp))
first = tmp[0] * tmp[1]
second = tmp[1] * tmp[2]
third = tmp[2] * tmp[0]
smallest = min(first,second,third)
result = result + (2*first) + (2*second) + (2*third) + smallest
print(result)
#########################################
# #
# Part 2 #
# #
#########################################
result = 0
if part == 2:
with open(input_f) as file:
for line in file:
tmp = line.rstrip().split('x')
tmp = list(map(int,tmp))
first = tmp[0] * tmp[1]
second = tmp[1] * tmp[2]
third = tmp[2] * tmp[0]
#2*l*w + 2*w*h + 2*h*l
smallest = min(first,second,third)
tmp.sort()
rib = tmp[0]+tmp[0]+tmp[1]+tmp[1]
bow = tmp[0]*tmp[1]*tmp[2]
result = result + rib + bow
print(result)

60
2015/03/3.md Normal file
View File

@ -0,0 +1,60 @@
## \-\-- Day 3: Perfectly Spherical Houses in a Vacuum \-\--
Santa is delivering presents to an infinite two-dimensional grid of
houses.
He begins by delivering a present to the house at his starting location,
and then an elf at the North Pole calls him via radio and tells him
where to move next. Moves are always exactly one house to the north
(`^`), south (`v`), east (`>`), or west (`<`). After each move, he
delivers another present to the house at his new location.
However, the elf back at the north pole has had a little too much
eggnog, and so his directions are a little off, and Santa ends up
visiting some houses more than once. How many houses receive *at least
one present*?
For example:
- `>` delivers presents to `2` houses: one at the starting location,
and one to the east.
- `^>v<` delivers presents to `4` houses in a square, including twice
to the house at his starting/ending location.
- `^v^v^v^v^v` delivers a bunch of presents to some very lucky
children at only `2` houses.
Your puzzle answer was `2081`.
## \-\-- Part Two \-\-- {#part2}
The next year, to speed up the process, Santa creates a robot version of
himself, *Robo-Santa*, to deliver presents with him.
Santa and Robo-Santa start at the same location (delivering two presents
to the same starting house), then take turns moving based on
instructions from the elf, who is
eggnoggedly
reading from the same script as the previous year.
This year, how many houses receive *at least one present*?
For example:
- `^v` delivers presents to `3` houses, because Santa goes north, and
then Robo-Santa goes south.
- `^>v<` now delivers presents to `3` houses, and Santa and Robo-Santa
end up back where they started.
- `^v^v^v^v^v` now delivers presents to `11` houses, with Santa going
one direction and Robo-Santa going the other.
Your puzzle answer was `2341`.
Both parts of this puzzle are complete! They provide two gold stars:
\*\*
At this point, you should [return to your Advent calendar](/2015) and
try another puzzle.
If you still want to see it, you can [get your puzzle
input](3/input).

110
2015/03/solution.py Normal file
View File

@ -0,0 +1,110 @@
#!/bin/python3
import sys,re
from pprint import pprint
sys.path.insert(0, '../../')
from fred import list2int
input_f = 'input'
part = 2
#########################################
# #
# Part 1 #
# #
#########################################
if part == 1:
result = 0
arr = []
l = 101
for i in range(0,l):
arr.append([])
for j in range(0,l):
arr[i].append('O')
start=int((l-1)/2)
X = start
Y = start
with open(input_f) as file:
for line in file:
tmp = list(line.rstrip())
arr[X][Y] = 'X'
for idx,i in enumerate(tmp):
if i == '^':
Y -= 1
if i == '>':
X += 1
if i == '<':
X -= 1
if i == 'v':
Y += 1
arr[X][Y] = 'X'
for idx,i in enumerate(arr):
for jdx,j in enumerate(i):
if arr[idx][jdx] == 'X':
result += 1
print(result)
#########################################
# #
# Part 2 #
# #
#########################################
if part == 2:
result = 0
arr = []
l = 101
for i in range(0,l):
arr.append([])
for j in range(0,l):
arr[i].append('O')
start=int((l-1)/2)
X = start
Y = start
rX = start
rY = start
with open(input_f) as file:
for line in file:
tmp = list(line.rstrip())
arr[X][Y] = 'X'
arr[rX][rY] = 'X'
for idx,i in enumerate(tmp):
if idx % 2 == 0:
if i == '^':
Y -= 1
if i == '>':
X += 1
if i == '<':
X -= 1
if i == 'v':
Y += 1
else:
if i == '^':
rY -= 1
if i == '>':
rX += 1
if i == '<':
rX -= 1
if i == 'v':
rY += 1
arr[X][Y] = 'X'
arr[rX][rY] = 'X'
for idx,i in enumerate(arr):
for jdx,j in enumerate(i):
if arr[idx][jdx] == 'X':
result += 1
print(result)

File diff suppressed because one or more lines are too long

View File

@ -1,17 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
with open(input_f) as file:
for line in file:
for idx,i in enumerate(line):
if i == '(':
result += 1
if i == ')':
result -= 1
print(result)

View File

@ -1,20 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
with open(input_f) as file:
for line in file:
for idx,i in enumerate(line):
if i == '(':
result += 1
if i == ')':
result -= 1
if result == -1:
print(idx+1)
break
print(result)

View File

@ -1 +0,0 @@
))(((((

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
with open(input_f) as file:
for line in file:
tmp = line.rstrip().split('x')
tmp = list(map(int,tmp))
first = tmp[0] * tmp[1]
second = tmp[1] * tmp[2]
third = tmp[2] * tmp[0]
#2*l*w + 2*w*h + 2*h*l
smallest = min(first,second,third)
#print(first,second, third, smallest)
result = result + (2*first) + (2*second) + (2*third) + smallest
print(result)

View File

@ -1,24 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
with open(input_f) as file:
for line in file:
tmp = line.rstrip().split('x')
tmp = list(map(int,tmp))
first = tmp[0] * tmp[1]
second = tmp[1] * tmp[2]
third = tmp[2] * tmp[0]
#2*l*w + 2*w*h + 2*h*l
smallest = min(first,second,third)
#print(first,second, third, smallest)
tmp.sort()
rib = tmp[0]+tmp[0]+tmp[1]+tmp[1]
bow = tmp[0]*tmp[1]*tmp[2]
result = result + rib + bow
print(result)

View File

@ -1,2 +0,0 @@
2x3x4
1x1x10

File diff suppressed because one or more lines are too long

View File

@ -1,41 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
arr = []
l = 101
for i in range(0,l):
arr.append([])
for j in range(0,l):
arr[i].append('O')
start=int((l-1)/2)
X = start
Y = start
with open(input_f) as file:
for line in file:
tmp = list(line.rstrip())
arr[X][Y] = 'X'
for idx,i in enumerate(tmp):
if i == '^':
Y -= 1
if i == '>':
X += 1
if i == '<':
X -= 1
if i == 'v':
Y += 1
arr[X][Y] = 'X'
for idx,i in enumerate(arr):
for jdx,j in enumerate(i):
if arr[idx][jdx] == 'X':
result += 1
print(result)

View File

@ -1,56 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
input_f = sys.argv[1]
result = 0
arr = []
l = 101
for i in range(0,l):
arr.append([])
for j in range(0,l):
arr[i].append('O')
start=int((l-1)/2)
X = start
Y = start
rX = start
rY = start
with open(input_f) as file:
for line in file:
tmp = list(line.rstrip())
arr[X][Y] = 'X'
arr[rX][rY] = 'X'
for idx,i in enumerate(tmp):
if idx % 2 == 0:
if i == '^':
Y -= 1
if i == '>':
X += 1
if i == '<':
X -= 1
if i == 'v':
Y += 1
else:
if i == '^':
rY -= 1
if i == '>':
rX += 1
if i == '<':
rX -= 1
if i == 'v':
rY += 1
arr[X][Y] = 'X'
arr[rX][rY] = 'X'
for idx,i in enumerate(arr):
for jdx,j in enumerate(i):
if arr[idx][jdx] == 'X':
result += 1
print(result)

View File

@ -1 +0,0 @@
^v

View File

@ -1 +0,0 @@
^>v<

View File

@ -1 +0,0 @@
^v^v^v^v^v