Cleaned up 2015

This commit is contained in:
FrederikBaerentsen 2024-12-14 22:46:07 +01:00
parent feed239050
commit d97ebb0f6b
16 changed files with 176 additions and 1189 deletions

View File

@ -22,13 +22,19 @@ For example:
to make an MD5 hash starting with five zeroes is `1048970`; that is, to make an MD5 hash starting with five zeroes is `1048970`; that is,
the MD5 hash of `pqrstuv1048970` looks like `000006136ef...`. the MD5 hash of `pqrstuv1048970` looks like `000006136ef...`.
Your puzzle answer was `254575`.
## \-\-- Part Two \-\-- {#part2} ## \-\-- Part Two \-\-- {#part2}
Now find one that starts with *six zeroes*. Now find one that starts with *six zeroes*.
Your puzzle answer was `1038736`.
Both parts of this puzzle are complete! They provide two gold stars: Both parts of this puzzle are complete! They provide two gold stars:
\*\* \*\*
At this point, you should [return to your Advent calendar](/2015) and At this point, you should [return to your Advent calendar](/2015) and
try another puzzle. try another puzzle.
Your puzzle input was `bgvyzdsv`{.puzzle-input}.

View File

@ -6,7 +6,7 @@ from fred import list2int
input_f = 'input' input_f = 'input'
part = 2 part = 1
######################################### #########################################
# # # #
# Part 1 # # Part 1 #

75
2015/06/6.md Normal file
View File

@ -0,0 +1,75 @@
## \-\-- Day 6: Probably a Fire Hazard \-\--
Because your neighbors keep defeating you in the holiday house
decorating contest year after year, you\'ve decided to deploy one
million lights in a [1000x1000
grid]{title="Hey, be glad I'm not asking for the resistance between two points!"}.
Furthermore, because you\'ve been especially nice this year, Santa has
mailed you instructions on how to display the ideal lighting
configuration.
Lights in your grid are numbered from 0 to 999 in each direction; the
lights at each corner are at `0,0`, `0,999`, `999,999`, and `999,0`. The
instructions include whether to `turn on`, `turn off`, or `toggle`
various inclusive ranges given as coordinate pairs. Each coordinate pair
represents opposite corners of a rectangle, inclusive; a coordinate pair
like `0,0 through 2,2` therefore refers to 9 lights in a 3x3 square. The
lights all start turned off.
To defeat your neighbors this year, all you have to do is set up your
lights by doing the instructions Santa sent you in order.
For example:
- `turn on 0,0 through 999,999` would turn on (or leave on) every
light.
- `toggle 0,0 through 999,0` would toggle the first line of 1000
lights, turning off the ones that were on, and turning on the ones
that were off.
- `turn off 499,499 through 500,500` would turn off (or leave off) the
middle four lights.
After following the instructions, *how many lights are lit*?
Your puzzle answer was `377891`.
## \-\-- Part Two \-\-- {#part2}
You just finish implementing your winning light pattern when you realize
you mistranslated Santa\'s message from Ancient Nordic Elvish.
The light grid you bought actually has individual brightness controls;
each light can have a brightness of zero or more. The lights all start
at zero.
The phrase `turn on` actually means that you should increase the
brightness of those lights by `1`.
The phrase `turn off` actually means that you should decrease the
brightness of those lights by `1`, to a minimum of zero.
The phrase `toggle` actually means that you should increase the
brightness of those lights by `2`.
What is the *total brightness* of all lights combined after following
Santa\'s instructions?
For example:
- `turn on 0,0 through 0,0` would increase the total brightness by
`1`.
- `toggle 0,0 through 999,999` would increase the total brightness by
`2000000`.
Your puzzle answer was `14110788`.
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](6/input).

90
2015/06/solution.py Normal file
View File

@ -0,0 +1,90 @@
#!/bin/python3
import sys,time,re
from pprint import pprint
from collections import defaultdict
from itertools import product
sys.path.insert(0, '../../')
from fred import list2int,get_re,nprint,lprint,loadFile
start_time = time.time()
input_f = 'input'
#########################################
# #
# Part 1 #
# #
#########################################
def part1():
instructions = []
with open(input_f) as file:
tmp = []
for line in file:
tmp = [re.match(r'.+?(?=\d)',line).group().strip()]
tmp += [int(i) for i in re.findall(r'\d+',line)]
instructions.append(tmp)
size = 1000
maps = defaultdict(bool)
for i in instructions:
for x in product(range(i[1],i[3]+1),range(i[2],i[4]+1)):
if i[0] == 'turn off':
maps[x] = False
elif i[0] == 'turn on':
maps[x] = True
else:
if maps[x] == True:
maps[x] = False
else:
maps[x] = True
count = 0
for i in product(range(0,size),range(0,size)):
if maps[i] == True:
count += 1
return count
start_time = time.time()
print('Part 1:',part1(), '\t\t', round((time.time() - start_time)*1000), 'ms')
#########################################
# #
# Part 2 #
# #
#########################################
def part2():
instructions = []
with open(input_f) as file:
tmp = []
for line in file:
tmp = [re.match(r'.+?(?=\d)',line).group().strip()]
tmp += [int(i) for i in re.findall(r'\d+',line)]
instructions.append(tmp)
size = 1000
maps = defaultdict(int)
for i in instructions:
for x in product(range(i[1],i[3]+1),range(i[2],i[4]+1)):
if i[0] == 'turn off':
if maps[x] != 0:
maps[x] -= 1
elif i[0] == 'turn on':
maps[x] += 1
else:
maps[x] += 2
count = 0
for i in product(range(0,size),range(0,size)):
count += maps[i]
return count
start_time = time.time()
print('Part 2:',part2(), '\t', round((time.time() - start_time)*1000), 'ms')

View File

@ -1 +0,0 @@
bgvyzdsv

View File

@ -1,31 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
import hashlib
input_f = sys.argv[1]
result = 0
count = 0
found = False
with open(input_f) as file:
for line in file:
tmp = line.rstrip()
while found == False:
m = hashlib.md5()
text = tmp + str(count)
#print(text)
m.update(text.encode('UTF-8'))
nr = m.hexdigest()
#print(nr)
if nr[0:5] == '00000':
print(count)
print(text)
print(nr)
found = True
else:
count += 1
#print(nr[ 0 : 5 ])
found = False

View File

@ -1,31 +0,0 @@
#!/bin/python3
import sys
from pprint import pprint
import hashlib
input_f = sys.argv[1]
result = 0
count = 0
found = False
with open(input_f) as file:
for line in file:
tmp = line.rstrip()
while found == False:
m = hashlib.md5()
text = tmp + str(count)
#print(text)
m.update(text.encode('UTF-8'))
nr = m.hexdigest()
#print(nr)
if nr[0:6] == '000000':
print(count)
print(text)
print(nr)
found = True
else:
count += 1
#print(nr[ 0 : 5 ])
found = False

View File

@ -1,2 +0,0 @@
abcdef
pqrstuv

File diff suppressed because it is too large Load Diff

View File

@ -1,40 +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()
print(tmp)
vowel_count = 0
t = ['ab','cd','pq','xy']
first = False
second = False
for i in t:
if tmp.find(i) != -1:
print(" is naughty because it contains " + i)
first = True
break
f = 'aeiou'
for idx,i in enumerate(tmp):
if idx+1 < len(tmp) and first == False:
#print(idx,idx+1,len(tmp))
if i == tmp[idx+1]:
second = True
if second == False and first == False:
print("naughte cus no double")
for idx,i in enumerate(tmp):
if f.find(i) != -1 and second == True and first == False:
vowel_count += 1
if vowel_count == 3:
print(" is nice because it contains " + str(vowel_count) + " vowels and double letters")
result += 1
if second == True and vowel_count < 3:
print("naughty cus " + str(vowel_count) + " vowels")
print()
print(result)

View File

@ -1,40 +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()
print(tmp)
vowel_count = 0
t = ['ab','cd','pq','xy']
first = False
second = False
for i in t:
if tmp.find(i) != -1:
print(" is naughty because it contains " + i)
first = True
break
f = 'aeiou'
for idx,i in enumerate(tmp):
if idx+1 < len(tmp) and first == False:
#print(idx,idx+1,len(tmp))
if i == tmp[idx+1]:
second = True
if second == False and first == False:
print("naughte cus no double")
for idx,i in enumerate(tmp):
if f.find(i) != -1 and second == True and first == False:
vowel_count += 1
if vowel_count == 3:
print(" is nice because it contains " + str(vowel_count) + " vowels and double letters")
result += 1
if second == True and vowel_count < 3:
print("naughty cus " + str(vowel_count) + " vowels")
print()
print(result)

View File

@ -1,5 +0,0 @@
ugknbfddgicrmopn
aaa
jchzalrnumimnmhp
haegwjzuvuyypxyu
dvszwmarrgswjxmb

View File

@ -1,3 +0,0 @@
turn on 2,3 through 4,4
turn off 1,2 through 3,2
toggle 5,0 through 7,3

View File

@ -13,6 +13,7 @@ with open(sys.argv[1]) as file:
tmp += [int(i) for i in re.findall(r'\d+',line)] tmp += [int(i) for i in re.findall(r'\d+',line)]
instructions.append(tmp) instructions.append(tmp)
print(instructions)
size = 1000 size = 1000
maps = defaultdict(bool) maps = defaultdict(bool)

View File

@ -1,35 +0,0 @@
import sys
from pprint import pprint
import re
from itertools import product
from collections import defaultdict
instructions = []
with open(sys.argv[1]) as file:
tmp = []
for line in file:
tmp = [re.match(r'.+?(?=\d)',line).group().strip()]
tmp += [int(i) for i in re.findall(r'\d+',line)]
instructions.append(tmp)
size = 1000
maps = defaultdict(int)
for i in instructions:
for x in product(range(i[1],i[3]+1),range(i[2],i[4]+1)):
if i[0] == 'turn off':
if maps[x] != 0:
maps[x] -= 1
elif i[0] == 'turn on':
maps[x] += 1
else:
maps[x] += 2
count = 0
for i in product(range(0,size),range(0,size)):
count += maps[i]
print(count)

View File

@ -66,6 +66,9 @@
... ..|\..'' 5 ** ... ..|\..'' 5 **
. . . . . : 6 * . . . . . : 6 *
## 2020
## 2019
## 2018 ## 2018