d4 just started, but not attempted, yet
This commit is contained in:
parent
b5569d4063
commit
0a7f2f288f
22
answer_cache.json
Normal file
22
answer_cache.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"2": {
|
||||||
|
"1": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": 7410
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": "cnjxoritzhvbosyewrmqhgkul"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"1": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": 121259
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": 239
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
aoc2018.nim
19
aoc2018.nim
@ -1,19 +0,0 @@
|
|||||||
import std/intsets
|
|
||||||
import std/sequtils
|
|
||||||
import tools/aoc
|
|
||||||
|
|
||||||
let test: AOCDay = initAOCDay(1)
|
|
||||||
echo test.getInputInt().foldl(a + b)
|
|
||||||
|
|
||||||
var seen: IntSet = initIntSet()
|
|
||||||
var freq: int = 0
|
|
||||||
var found: bool = false
|
|
||||||
while not found:
|
|
||||||
for x in test.getInputInt():
|
|
||||||
freq += x
|
|
||||||
if freq notin seen:
|
|
||||||
seen.incl(freq)
|
|
||||||
else:
|
|
||||||
echo freq
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
35
day01.py
Normal file
35
day01.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(522, "input1")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(73364, "input1")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
return sum(self.getInputListAsType(int))
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
seen = set()
|
||||||
|
freqs = self.getInputListAsType(int)
|
||||||
|
cur_freq = 0
|
||||||
|
while True:
|
||||||
|
for f in freqs:
|
||||||
|
cur_freq += f
|
||||||
|
if cur_freq in seen:
|
||||||
|
return cur_freq
|
||||||
|
else:
|
||||||
|
seen.add(cur_freq)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 1)
|
||||||
|
day.run(verbose=True)
|
||||||
53
day02.py
Normal file
53
day02.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from itertools import combinations
|
||||||
|
|
||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(12, "test_input2"),
|
||||||
|
(7410, "input2")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
("fgij", "test_input2_2"),
|
||||||
|
("cnjxoritzhvbosyewrmqhgkul", "input2")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
two_count = 0
|
||||||
|
three_count = 0
|
||||||
|
for box_id in self.getInput():
|
||||||
|
has_two = has_three = False
|
||||||
|
for c in box_id:
|
||||||
|
if box_id.count(c) == 2:
|
||||||
|
has_two = True
|
||||||
|
elif box_id.count(c) == 3:
|
||||||
|
has_three = True
|
||||||
|
|
||||||
|
two_count, three_count = two_count + has_two, three_count + has_three
|
||||||
|
|
||||||
|
return two_count * three_count
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
for a, b in combinations(self.getInput(), 2):
|
||||||
|
diff_count = 0
|
||||||
|
diff_index = 0
|
||||||
|
for i, c in enumerate(a):
|
||||||
|
if c != b[i]:
|
||||||
|
diff_count += 1
|
||||||
|
diff_index = i
|
||||||
|
if diff_count > 1:
|
||||||
|
break
|
||||||
|
|
||||||
|
if diff_count != 1:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return b[:diff_index] + b[diff_index + 1:]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 2)
|
||||||
|
day.run(verbose=True)
|
||||||
58
day03.py
Normal file
58
day03.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from tools.coordinate import Coordinate, Shape, Square
|
||||||
|
from tools.grid import Grid
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(4, "test_input3"),
|
||||||
|
(121259, "input3")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(3, "test_input3"),
|
||||||
|
(239, "input3")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def getClaims(self) -> (int, int, int, int, int): # claim_id, x, y, width, height
|
||||||
|
for claim in self.getInput():
|
||||||
|
v = claim.split()
|
||||||
|
claim_id = int(v[0][1:])
|
||||||
|
x, y = map(int, v[2][:-1].split(","))
|
||||||
|
wx, wy = map(int, v[3].split("x"))
|
||||||
|
|
||||||
|
yield claim_id, x, y, wx, wy
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
grid = Grid(0)
|
||||||
|
for _, x, y, wx, wy in self.getClaims():
|
||||||
|
for dx in range(wx):
|
||||||
|
for dy in range(wy):
|
||||||
|
grid.add(Coordinate(x + dx, y + dy))
|
||||||
|
|
||||||
|
return len(list(x for x in grid.getActiveCells() if grid.get(x) > 1))
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
claims = []
|
||||||
|
for claim_id, x, y, wx, wy in self.getClaims():
|
||||||
|
claims.append((claim_id, Square(Coordinate(x, y), Coordinate(x + wx - 1, y + wy - 1))))
|
||||||
|
|
||||||
|
for claim_id, claim in enumerate(claims):
|
||||||
|
intersect = False
|
||||||
|
for sub_claim_id, sub_claim in claims:
|
||||||
|
if sub_claim_id == claim_id:
|
||||||
|
continue
|
||||||
|
if claim & sub_claim:
|
||||||
|
intersect = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not intersect:
|
||||||
|
return claim_id
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 3)
|
||||||
|
day.run(verbose=True)
|
||||||
25
day04.py
Normal file
25
day04.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(240, "test_input4"),
|
||||||
|
(None, "input4")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(None, "input4")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 4)
|
||||||
|
day.run(verbose=True)
|
||||||
250
inputs/input2
Normal file
250
inputs/input2
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
cnjxpritdzhubeseewfmqagkul
|
||||||
|
cwyxpgitdzhvbosyewfmqagkul
|
||||||
|
cnfxpritdzhebosywwfmqagkul
|
||||||
|
cnjxpritdzgvbosyawfiqagkul
|
||||||
|
cnkxpritdzhvbosyewfmgagkuh
|
||||||
|
gnjxprhtdzhebosyewfmqagkul
|
||||||
|
cnjxpriedzevbosyewfjqagkul
|
||||||
|
cnjxpritdzhpyosyewfsqagkul
|
||||||
|
cnjxprltdzhvbosyewfmhagkzl
|
||||||
|
cnjxfritdjhvbosyewfmiagkul
|
||||||
|
xnjxpritdzhvbosyewfmqagkgn
|
||||||
|
cnjxpritdzmvzosyewfhqagkul
|
||||||
|
cljxxritdzhvbosyewfmragkul
|
||||||
|
cnjxjritdzhvbovyewfmvagkul
|
||||||
|
cnjxprdtdzhpbosyewvmqagkul
|
||||||
|
cojxprdtdzhzbosyewfmqagkul
|
||||||
|
cnjxpritgzhvfgsyewfmqagkul
|
||||||
|
knjxprptdzhvbosyecfmqagkul
|
||||||
|
cnjxpritdzhvbvsyeyfmqagkuc
|
||||||
|
cnjxpritdzhvbosvewfmoagjul
|
||||||
|
cnjxpritdzhvbosyfwfmbagkjl
|
||||||
|
cnjxpjitazhvbosfewfmqagkul
|
||||||
|
cnjtpfitdzhvbosyewfmiagkul
|
||||||
|
ckjxpritdzhvbysyewfmqagoul
|
||||||
|
cnjxvritdzhvbfsyewfmqalkul
|
||||||
|
cnjipqitdzhvbosyewfeqagkul
|
||||||
|
cnjhpritdzhvbosyewymqjgkul
|
||||||
|
cnjxprrtdzhvbosyewfmlkgkul
|
||||||
|
cnjxnritdzhvbopyewfmqaskul
|
||||||
|
cxjxpritdzhvtosyewjmqagkul
|
||||||
|
cnjxpritdzhvbjsyewfrqagkwl
|
||||||
|
cnjxhritdzhubosyewfmqagvul
|
||||||
|
cnjxpritdzhvbosyyyfmeagkul
|
||||||
|
cnjxkritdzhvaoeyewfmqagkul
|
||||||
|
cnjxpritdzhvtotyewfmqazkul
|
||||||
|
cnjxoriadzhvbosyewfmqcgkul
|
||||||
|
cnjxpritdzhcbosyewfmkapkul
|
||||||
|
fnjxprtddzhvbosyewfmqagkul
|
||||||
|
cnjxmvitdzhvbosyewfmqagrul
|
||||||
|
cnjxpyitdzhibosyewfmqagktl
|
||||||
|
cyjxprxtdzhvbosyewbmqagkul
|
||||||
|
onjxpditdzhvbosyeofmqagkul
|
||||||
|
cnjxprixdzhvbosuewftqagkul
|
||||||
|
cnjxpritdrhvaosyewymqagkul
|
||||||
|
cnjxpritdzhhbokyewfvqagkul
|
||||||
|
cnjxpritczhvbosyewfmqwgxul
|
||||||
|
cnjxpribdzqvbnsyewfmqagkul
|
||||||
|
ynpxpritdzhvbvsyewfmqagkul
|
||||||
|
cnjxprirdzhvboerewfmqagkul
|
||||||
|
cnjxpritdxhvbosyewfmgavkul
|
||||||
|
cnwxprntdzhvbosyewfmqagkuk
|
||||||
|
cnjxpritzzhvbosyewfmcagktl
|
||||||
|
bbjxpritdzhvbosyetfmqagkul
|
||||||
|
cnjxpbitdzhvbosyewrmqagkui
|
||||||
|
cnjxwrildzcvbosyewfmqagkul
|
||||||
|
cnqxpoitdzhvbosnewfmqagkul
|
||||||
|
cnzxpritdzhvbosyewfmqazkfl
|
||||||
|
cnjxpriddzhvoosyewfmhagkul
|
||||||
|
znjxpritdzhvbosjewfmqagkur
|
||||||
|
cnjxpritdzhvbosyewcmfagkuk
|
||||||
|
cnjxpritdzhvbomyywnmqagkul
|
||||||
|
cnjxpgitjzhvbosyejfmqagkul
|
||||||
|
cnjxpkitdzjvbosyewfmqcgkul
|
||||||
|
cnjxpritduhvbosyewfmqfkkul
|
||||||
|
cnfxpritdzhvbgsyewfmqwgkul
|
||||||
|
cnjxpritdzhvbosywufmqaskul
|
||||||
|
cnjxprittzhvboryswfmqagkul
|
||||||
|
cndxpritpzrvbosyewfmqagkul
|
||||||
|
cnjxpritdzhvbosyewfwqazkum
|
||||||
|
cccxprmtdzhvbosyewfmqagkul
|
||||||
|
cnjxpzitdzhvlbsyewfmqagkul
|
||||||
|
cnjxdrigdzhvbosyewfmqagsul
|
||||||
|
fhjxpritdzhvbosyewfmqagkcl
|
||||||
|
cnjxpritdzhvdosyewffqagaul
|
||||||
|
cnjxprikdztvbosyekfmqagkul
|
||||||
|
cnjxpritdzhvbohiewfmqagkue
|
||||||
|
cnjxpritdzhvbowyetfmqegkul
|
||||||
|
cnuxpritdzhvbosyewmmqapkul
|
||||||
|
qnjxpritdzhvbosyewfmjakkul
|
||||||
|
cnjxpritdzlvbosyewiaqagkul
|
||||||
|
cnjxpritdzhpoosyewfmvagkul
|
||||||
|
cdjxpritdzhvboryewfbqagkul
|
||||||
|
cnjxppitxzhvbosyewymqagkul
|
||||||
|
cnjxpywtdzhvboiyewfmqagkul
|
||||||
|
cnjxpritdzpvbosyezfmqaqkul
|
||||||
|
cnjppritdghvbosyewfdqagkul
|
||||||
|
cmjxpritdzhvbosvewfmqagkup
|
||||||
|
cnjxoritdzhvbosylffmqagkul
|
||||||
|
cnjxfritdzhvbojyewfmqagkvl
|
||||||
|
cnjxpritdzhvbozyewgmqlgkul
|
||||||
|
cnjxlritdzhvbosyewfmqalkug
|
||||||
|
cnyxprittzhvbosyewfmsagkul
|
||||||
|
cnjxprytdzcvdosyewfmqagkul
|
||||||
|
ctjxpritdzhvbosyedfmqagkil
|
||||||
|
cnjxpvitdzhrbosyewfmqaekul
|
||||||
|
cnyxyritdzhvbospewfmqagkul
|
||||||
|
cnjxoritwzhvbosyewrmqhgkul
|
||||||
|
cnjxpritdzhjbosyqwsmqagkul
|
||||||
|
cnjzprindzhvbosyewfmqabkul
|
||||||
|
cnjspritdzhvbosysffmqagkul
|
||||||
|
cnxxpritdzhvbosyelfmqageul
|
||||||
|
bnjhpritdzhvbosyewfmzagkul
|
||||||
|
cnjxbhitdzhdbosyewfmqagkul
|
||||||
|
cnjxprktdzmvbosyewfmqagkuj
|
||||||
|
cnjxprixdzhvbqsyewfmqmgkul
|
||||||
|
cnjxpkitdzhvbosyewfmqagbum
|
||||||
|
cnjhpritdzhxbosyewfmqagjul
|
||||||
|
cnjxpritdzzvbosyewuqqagkul
|
||||||
|
cnjxprhtdzhvuopyewfmqagkul
|
||||||
|
cnjxpritdzhjqosyewfmqagkgl
|
||||||
|
cnzxpritdzhvbosyejfmuagkul
|
||||||
|
cnvxpritoohvbosyewfmqagkul
|
||||||
|
cnjxpmitdzwvbosyemfmqagkul
|
||||||
|
cnjoprittzzvbosyewfmqagkul
|
||||||
|
cnjxpgitdzhvbosytwfmqsgkul
|
||||||
|
cnjxprrtdehvbosyewfnqagkul
|
||||||
|
onjxpjitdzgvbosyewfmqagkul
|
||||||
|
cnjxpmitdzhvbopaewfmqagkul
|
||||||
|
cnjxpritqzhvbosoewfrqagkul
|
||||||
|
cnjxpnitdzhvbosyewfmqagkjy
|
||||||
|
cnsxpritdzhvbosyewfmqjykul
|
||||||
|
cnjxpriidzhvbosyewfmqxgkut
|
||||||
|
cnjxpyitdzhnbosyewfgqagkul
|
||||||
|
cnjxpritdzhbboyyewfmqagsul
|
||||||
|
cnjxpeitdzsvbosyewfmqabkul
|
||||||
|
cnjxpritdzhzvosyewfmragkul
|
||||||
|
cnjrpritdzhmbosyewfmqrgkul
|
||||||
|
cnjxpritdzhmbosyenfmqaglul
|
||||||
|
cnjxqrntdzhvboswewfmqagkul
|
||||||
|
cnjxprdtpzhvbosyewfmqagkcl
|
||||||
|
cnjxpritdzhvsdsyewfmqagkur
|
||||||
|
cnjxpritdzhvvosyewumqhgkul
|
||||||
|
cnzxpritdznvhosyewfmqagkul
|
||||||
|
ynjypritdzhvbosyewfmqagkuz
|
||||||
|
cnjxpnitdzhvbocyezfmqagkul
|
||||||
|
vnjxpritdzhvbfsyewfmjagkul
|
||||||
|
cnjfpritdzhvbosyewfmqagkzu
|
||||||
|
cnjxpritdzhbbosyewfmlegkul
|
||||||
|
cnjxpnitdzhvbosyesfmbagkul
|
||||||
|
cnjxpritezwvbosyewfmqagkgl
|
||||||
|
cujxpritdzhqbosyawfmqagkul
|
||||||
|
cnjxprindzhrbosyerfmqagkul
|
||||||
|
cntxpritdzhvbosyewfmqauxul
|
||||||
|
cnjxpvitdzhvbosyepfmqagkuy
|
||||||
|
cnjxdrqtdzhvbosdewfmqagkul
|
||||||
|
cnnxpritdzhvvosyenfmqagkul
|
||||||
|
lnjxphitdzhvbosyewfaqagkul
|
||||||
|
cngxpritdzhhbobyewfmqagkul
|
||||||
|
uncxphitdzhvbosyewfmqagkul
|
||||||
|
cnjxpribdehvbosfewfmqagkul
|
||||||
|
cnjxppitdqhvbmsyewfmqagkul
|
||||||
|
gnjxpritkzhvbosyewfbqagkul
|
||||||
|
znjxpritdzhvbowycwfmqagkul
|
||||||
|
cnjxpgitdzhvbosyewidqagkul
|
||||||
|
cnjxhritdzhvbowyswfmqagkul
|
||||||
|
injxkritdzhvbjsyewfmqagkul
|
||||||
|
cmjupritgzhvbosyewfmqagkul
|
||||||
|
cnjxpritdzbvjoeyewfmqagkul
|
||||||
|
cnjxpritdkhvbosyewlmuagkul
|
||||||
|
cnkxpritdzhebvsyewfmqagkul
|
||||||
|
cyjxptitdzhvbosyewfmqagkuv
|
||||||
|
cnjxpritdzhvbodrewflqagkul
|
||||||
|
cnjxpratdzhvbksyewfhqagkul
|
||||||
|
cnjxpoitdzhvbosjewxmqagkul
|
||||||
|
cnjxprhidzhvbasyewfmqagkul
|
||||||
|
cnjxpritdzhvbosqewvmqagmul
|
||||||
|
cnjxoritdzhvbosyzifmqagkul
|
||||||
|
mnjxpritdzhvbcsyeyfmqagkul
|
||||||
|
cnjhpritgzhvbosyewfmqngkul
|
||||||
|
cnjxprijdzevbesyewfmqagkul
|
||||||
|
cnexprqtdzhvbosyewvmqagkul
|
||||||
|
cnjxpxitdzhvbosyawfmqmgkul
|
||||||
|
cnjxpritdzhvbosyirfmqaxkul
|
||||||
|
cqjxpcitdzhvboslewfmqagkul
|
||||||
|
cmjxpqitdztvbosyewfmqagkul
|
||||||
|
cnbxpritdzhvfosyewfmuagkul
|
||||||
|
cnjxprrtdzhvbosumwfmqagkul
|
||||||
|
cnjxprttdvhvbossewfmqagkul
|
||||||
|
cnjxpritdzhvbcsuewfaqagkul
|
||||||
|
cbjxpritdzhvbosyewfhqalkul
|
||||||
|
cnjxprithzhvbosjcwfmqagkul
|
||||||
|
chjxpritdzhvbosyewftcagkul
|
||||||
|
cnjxprirdchvdosyewfmqagkul
|
||||||
|
cnjxpritdxhvbosyewfmqcgkal
|
||||||
|
cnjxpriidchvbosrewfmqagkul
|
||||||
|
cnjhprizdzhvbosyewfmqagvul
|
||||||
|
cnjwpritdzhpbosyewfmqaqkul
|
||||||
|
cnjxpgitfzhvbosyxwfmqagkul
|
||||||
|
cnjxpjiedzhvbosywwfmqagkul
|
||||||
|
cnjxpritdzhvbosyewfpqynkul
|
||||||
|
xnixlritdzhvbosyewfmqagkul
|
||||||
|
cnjxoritdznvbosyehfmqagkul
|
||||||
|
cnjxpritdzhvbjsyewsmqagcul
|
||||||
|
lnjxpritdzhvkosyewjmqagkul
|
||||||
|
cnjxpritdzhvbosyedfiqvgkul
|
||||||
|
cnjxpritdzhqbdsyerfmqagkul
|
||||||
|
cnjxpritdzavbosyywfmqagvul
|
||||||
|
dmjxprithzhvbosyewfmqagkul
|
||||||
|
cnjxpriqdzhvnosyeofmqagkul
|
||||||
|
cnjxpritdxhvboszewfmqkgkul
|
||||||
|
cnjxpritdzxvbosjewymqagkul
|
||||||
|
cnjxpritdzngbosyewfmqugkul
|
||||||
|
cajxpritdnhvbosyerfmqagkul
|
||||||
|
cnsxpritdzhvbosymwfmqagcul
|
||||||
|
cnjxoritdzhvbosyewrmqhgkul
|
||||||
|
cnjxpritdzhvposyewfmqagkwo
|
||||||
|
cnjxpriazzhvbosyeufmqagkul
|
||||||
|
cnjxrritdzhvbosymhfmqagkul
|
||||||
|
cnjxprztdzhvbosyewfmqtgkum
|
||||||
|
cnjxpritdzhvbmsyewfmqatkun
|
||||||
|
cnuxpritdzhvbosyewfmqagvur
|
||||||
|
ctjxxritdzhvbosyewfvqagkul
|
||||||
|
cnjxpritdzlvbosyevfmqagkll
|
||||||
|
cnjxpritdzhlbosyewfmqagasl
|
||||||
|
cnjxpritwzhvbosyewfcxagkul
|
||||||
|
cyjxpritdzhfbosyewfmqagcul
|
||||||
|
cnjxpritxghvkosyewfmqagkul
|
||||||
|
ctjxpritdjhvbosyewfmqkgkul
|
||||||
|
cnjxpritxzhvbosyewjmbagkul
|
||||||
|
unjxpritdzhkbosyewfmqaghul
|
||||||
|
cnjoprqtdzhvbosyewzmqagkul
|
||||||
|
rnjxprgtgzhvbosyewfmqagkul
|
||||||
|
cnjgpqitdzhvbosyewfaqagkul
|
||||||
|
cnjxpritdzuybosyewfmqagful
|
||||||
|
cnjxprqtdahvbosyewfnqagkul
|
||||||
|
cnjxpritdzhmkhsyewfmqagkul
|
||||||
|
wnjxpritdzhvbosiewfmqagkml
|
||||||
|
cnjmpritdzhvbosyjwfmqagkdl
|
||||||
|
cnjopritdzhvbksyewfmqrgkul
|
||||||
|
cnlxpritdzhvbosyewfmomgkul
|
||||||
|
cgjxpritdzhvbbsyewfmxagkul
|
||||||
|
cnaxpritdvhvnosyewfmqagkul
|
||||||
|
cnjxprijdzhvbkmyewfmqagkul
|
||||||
|
cnjxpritdzhvposyewzmqagkuz
|
||||||
|
cnuxpuitdzdvbosyewfmqagkul
|
||||||
|
cnjxprifdzjvbosyewfyqagkul
|
||||||
|
cnhspritdzhvbosyewfmqaghul
|
||||||
|
cnjxprcbdzfvbosyewfmqagkul
|
||||||
|
lnjapritdzhvbosyewfmqegkul
|
||||||
|
cnjxprisszhvbosyewqmqagkul
|
||||||
|
cnjxpritdzhvbosyeifmsagoul
|
||||||
|
cnjxpritrfhvbosyewfmqagkuz
|
||||||
|
cnjxkritdzmvboqyewfmqagkul
|
||||||
|
cnjxpritdzhvbosyedfmqzgkzl
|
||||||
|
cnjxprifdzhvbosyswfmqagksl
|
||||||
|
cnjxoritdzhvbosyxwfmhagkul
|
||||||
|
cnjhpritdzzvbosfewfmqagkul
|
||||||
|
cnjxprityjhvbomyewfmqagkul
|
||||||
|
cnjbpritdzhvbosyywfmqagkuf
|
||||||
|
cnjxprrtdzhvbosyewgmqagtul
|
||||||
1409
inputs/input3
Normal file
1409
inputs/input3
Normal file
File diff suppressed because it is too large
Load Diff
7
inputs/test_input2
Normal file
7
inputs/test_input2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
abcdef
|
||||||
|
bababc
|
||||||
|
abbcde
|
||||||
|
abcccd
|
||||||
|
aabcdd
|
||||||
|
abcdee
|
||||||
|
ababab
|
||||||
7
inputs/test_input2_2
Normal file
7
inputs/test_input2_2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
abcde
|
||||||
|
fghij
|
||||||
|
klmno
|
||||||
|
pqrst
|
||||||
|
fguij
|
||||||
|
axcye
|
||||||
|
wvxyz
|
||||||
3
inputs/test_input3
Normal file
3
inputs/test_input3
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#1 @ 1,3: 4x4
|
||||||
|
#2 @ 3,1: 4x4
|
||||||
|
#3 @ 5,5: 2x2
|
||||||
17
inputs/test_input4
Normal file
17
inputs/test_input4
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[1518-11-01 00:00] Guard #10 begins shift
|
||||||
|
[1518-11-01 00:05] falls asleep
|
||||||
|
[1518-11-01 00:25] wakes up
|
||||||
|
[1518-11-01 00:30] falls asleep
|
||||||
|
[1518-11-01 00:55] wakes up
|
||||||
|
[1518-11-01 23:58] Guard #99 begins shift
|
||||||
|
[1518-11-02 00:40] falls asleep
|
||||||
|
[1518-11-02 00:50] wakes up
|
||||||
|
[1518-11-03 00:05] Guard #10 begins shift
|
||||||
|
[1518-11-03 00:24] falls asleep
|
||||||
|
[1518-11-03 00:29] wakes up
|
||||||
|
[1518-11-04 00:02] Guard #99 begins shift
|
||||||
|
[1518-11-04 00:36] falls asleep
|
||||||
|
[1518-11-04 00:46] wakes up
|
||||||
|
[1518-11-05 00:03] Guard #99 begins shift
|
||||||
|
[1518-11-05 00:45] falls asleep
|
||||||
|
[1518-11-05 00:55] wakes up
|
||||||
41
main.py
Executable file
41
main.py
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import tools.aoc
|
||||||
|
import argparse
|
||||||
|
import importlib
|
||||||
|
import os
|
||||||
|
|
||||||
|
YEAR = 2018
|
||||||
|
TIMEIT_NUMBER = 50
|
||||||
|
|
||||||
|
argument_parser = argparse.ArgumentParser()
|
||||||
|
argument_parser.add_argument("-d", "--day", help="specify day to process; leave empty for ALL days", type=int)
|
||||||
|
argument_parser.add_argument("-p", "--part", help="run only part x", choices=[1, 2], type=int)
|
||||||
|
argument_parser.add_argument("--timeit", help="measure execution time", action="store_true", default=False)
|
||||||
|
argument_parser.add_argument(
|
||||||
|
"--timeit-number",
|
||||||
|
help="build average time over this many executions",
|
||||||
|
type=int,
|
||||||
|
default=TIMEIT_NUMBER
|
||||||
|
)
|
||||||
|
argument_parser.add_argument("-v", "--verbose", help="show test case outputs", action="store_true", default=False)
|
||||||
|
flags = argument_parser.parse_args()
|
||||||
|
|
||||||
|
import_day = ""
|
||||||
|
if flags.day:
|
||||||
|
import_day = "%02d" % flags.day
|
||||||
|
|
||||||
|
imported = []
|
||||||
|
for _, _, files in os.walk(tools.aoc.BASE_PATH):
|
||||||
|
for f in files:
|
||||||
|
if f.startswith('day' + import_day) and f.endswith('.py'):
|
||||||
|
lib_name = f[:-3]
|
||||||
|
globals()[lib_name] = importlib.import_module(lib_name)
|
||||||
|
imported.append(lib_name)
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
for lib in sorted(imported):
|
||||||
|
day = int(lib[-2:])
|
||||||
|
day_class = getattr(globals()[lib], "Day")(YEAR, day)
|
||||||
|
day_class.run(flags.part if flags.part else 3, flags.verbose, flags.timeit, flags.timeit_number)
|
||||||
24
skel_day.py
Normal file
24
skel_day.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(None, "input%DAY%")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(None, "input%DAY%")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(%YEAR%, %DAY%)
|
||||||
|
day.run(verbose=True)
|
||||||
51
start_day.py
Executable file
51
start_day.py
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
from datetime import datetime
|
||||||
|
from os.path import exists
|
||||||
|
from platform import system
|
||||||
|
from subprocess import call
|
||||||
|
from time import sleep
|
||||||
|
import webbrowser
|
||||||
|
|
||||||
|
|
||||||
|
YEAR = 2018
|
||||||
|
CHARMS = {
|
||||||
|
'Linux': '/usr/local/bin/charm',
|
||||||
|
'Windows': r'C:\Program Files\JetBrains\PyCharm 2020.2.4\bin\pycharm64.exe'
|
||||||
|
}
|
||||||
|
|
||||||
|
arg_parser = ArgumentParser()
|
||||||
|
arg_parser.add_argument("-d", "--day", help="start a specific day (default: today)", type=int)
|
||||||
|
args = arg_parser.parse_args()
|
||||||
|
|
||||||
|
DAY = args.day or datetime.now().day
|
||||||
|
|
||||||
|
if YEAR < 2015 or not 1 <= DAY <= 25:
|
||||||
|
print("Invalid year or day for year: %d, day: %d" % (YEAR, DAY))
|
||||||
|
exit()
|
||||||
|
|
||||||
|
day_file = "day%02d.py" % DAY
|
||||||
|
if exists(day_file):
|
||||||
|
print(day_file, "already exists. Use that one!")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
with open("skel_day.py", "r") as IN:
|
||||||
|
with open(day_file, "w") as OUT:
|
||||||
|
while in_line := IN.readline():
|
||||||
|
OUT.write(in_line.replace("%YEAR%", str(YEAR)).replace("%DAY%", str(DAY)))
|
||||||
|
|
||||||
|
start = datetime(YEAR, 12, DAY, 6, 0, 0)
|
||||||
|
now = datetime.now()
|
||||||
|
if start > now:
|
||||||
|
time_wait = start - now
|
||||||
|
if time_wait.days > 0:
|
||||||
|
print("Do you really want to wait %d days?" % time_wait.days)
|
||||||
|
exit()
|
||||||
|
|
||||||
|
for x in range(time_wait.seconds, -1, -1):
|
||||||
|
print("Day starts in %02ds.\r")
|
||||||
|
sleep(1)
|
||||||
|
|
||||||
|
call([CHARMS[system()], day_file])
|
||||||
|
webbrowser.open("https://adventofcode.com/%d/day/%d" % (YEAR, DAY))
|
||||||
|
call(["git", "add", day_file])
|
||||||
Loading…
Reference in New Issue
Block a user