Compare commits
36 Commits
443b33e863
...
master
Author | SHA1 | Date | |
---|---|---|---|
ddcf072281 | |||
|
156f1e7dac | ||
|
86476f7ff0 | ||
|
f9c90b42de | ||
|
f0a86a6479 | ||
|
80555c4d9c | ||
|
8fb1a7d95c | ||
|
c4d14c613d | ||
|
2317ec628a | ||
|
f3e0917a38 | ||
|
40c9bd5e50 | ||
|
f7083ef726 | ||
|
450b9c790b | ||
|
f80787cadb | ||
|
37c1fb045f | ||
03b991a582 | |||
ad3e9e42bb | |||
68552d259d | |||
b9cb43378c | |||
575b9e8aed | |||
39111a9d6a | |||
2139a01252 | |||
7ef32aafcb | |||
ce7229c13c | |||
fff4541aca | |||
|
b1a4398782 | ||
6b2e3aeab5 | |||
ada1f27620 | |||
|
87161b6375 | ||
|
be4347ab5f | ||
|
209aa39edb | ||
|
79a6123526 | ||
|
7717713bde | ||
|
4b4b083bd4 | ||
|
a31f009abe | ||
|
d4204d5c8d |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*~
|
||||
|
||||
*a.out
|
||||
*main
|
||||
|
98
2021/10/data
Normal file
98
2021/10/data
Normal file
@@ -0,0 +1,98 @@
|
||||
{<[[<<<[[{[[<<()()>>[([]<>){{}{}}]]]<(<{{}<>}{{}{}}><{<>[]}[{}{}]>)({(())}<[(){}][(){}]>)>}]<<<(<<{}
|
||||
{[({({([({(((<[]()>[()<>]){[<>[]](<>[])})<<<[]()}>(<()()>)>)}[{((<{}[]>{<>()}){[<>{}]<<><>>})(({[]()}<<>()>)<
|
||||
(((([{{{<{<[[<()<>><<>{}>]]{<(<>())>}>{<[([]<>)<{}{}>][[<><>][<>[]]]>[{(<>{})[<>()]}<<()[]>[[]<
|
||||
<<[<([[{{{[({<<>()>}<<<>[]>([]())>){{{{}[]}<(){}>)}]{{[(()())[(){}]]<<[]{}>({}[])>}({<<><>>}<([]<>){()[]}>)}
|
||||
<[(({[({<<[[[{<>{}}(<><>))<(<>[])[{}[]]>]<[([][])[(){}]]>]([<[()()](<>[])>]<(<{}()>[{}<>])({<>[
|
||||
(<[[{[[[(<((<<{}{}><[]<>>><[{}<>][<>[]]>)<(<{}<>><{}{}>)[{()[]}<<>()>]>)>[(<{({}{})}[{()[]}{[]<>}]>){<(([]
|
||||
(([[({{{(<([({[]{}}){{[][]]}])>)[<([[[{}]{(){}}][([]())]]([{[][]}{<>()}](({}()){<>{}})))[{({
|
||||
{(<<([([(<<[{((){})([]<>)}]<{{{}{}}{{}[]}}<{(){}}{()[]})>><([<[]{}>([]<>)](<()<>>)){<([]<>
|
||||
{[<<[<{{((({<[[]{}]{{}}>{<{}<>>[<>[]]}})<{[(<><>><{}<>>][{[]{}}]}[[[[][]]<<>{}>]{[[]()][[]<>]}]>)[(
|
||||
({<(<([{<{<[(((){}){(){}})]>}[{{{{()()}<[]()>}{{<>()}<{}{}>}}[[{{}{}}[<><>]]{({}[]>[[]{}]}]}({{{()()
|
||||
{[[{([{<<{<(<<{}()>[()]>)<{{()()}}[<[][]>(<>{})]>>{[<{<>()){()<>}>{{()()}[<>()]}][[[{}[]]]<{{}[]}<()(
|
||||
{{<<<<<[[([{<[{}[]]{()<>}>{<<>()>{{}<>}}}<<{{}()}{()()}>{[()<>]({}[])]>]{[(<{}{}>)<({}[])>]<{({}<>)}{({}())
|
||||
({(<<{[<<{<(<[<>()][[][]]><[{}<>]({}[])>)[[[<>[]][[]()]]<{[]{}}[{}{}]>]>{[(<[]()>{<>{}})][<{{}}<{
|
||||
(<<<[[({<[[(<<[]{}>>[(()<>)[<>{}]])<{(<>[])}(<<>()>[[]{}])>]<[({[]()}{{}{}})<{{}()}<{}<>>>]>][[({<<>()>{[]()}
|
||||
{{{[<[([<(<{[([][])[{}[]]]{[()()]{{}()}}}><[<([][])(<>())><{()[]}({}<>)>]<<<(){}><<><>>>((()()){
|
||||
[(((([{({<(<(<[]<>>{()[]})><{(<><>){{}[]}}{(()<>)([][])}>)>})}][({{[[{<(<><>){{}()}>((<>()){<>[]
|
||||
([{<{<({(<[(<({}<>)><{[]}[{}[]]>)(<[[][]]{[]{}}>{{[]}((){})})]{(((()){{}()})(([][])({}{})))[(<()[]><(
|
||||
[([{{<{(<[{{((()())<[]{}>){{{}<>}<<><>>}}[<([]())>[(()[])<{}{}>]]}{[({(){}}{(){}])<<[]()>{{}()}>
|
||||
(<[<{{[<<({<<{<><>}><<()[]>[<><>]>>}{[(((){}){()<>}}<<[]()>{(){}}>]{{{{}[]}[{}<>]}[{{}{}}<(){}>]}}){{({
|
||||
<([([[<[({<<{{[][]}<{}[]>}<<()[]>[()<>]>>>})((<(<[[]]((){})>{([]()){<><>}})>)(<<<<[]<>>[[]()])>>([[
|
||||
[<<{<(<<{{[({<<>()><{}[]>})<{[<>()](<><>)}[{{}()}{[]()}]>]}}({<[{<()<>>}[<<>>]]((<[][]>{[][
|
||||
{{(<({[((<([({()<>})[{{}[]}(()<>))]{[{[]<>}][{()<>}]})([({<><>}{{}()})])>)({<(((()<>)(<><>)))>((
|
||||
[(<{({[<{<[<([{}()](<>{}))>]([([[]<>]<()<>>){<()>}]{{[[]()]{{}{}}}[{[]}{{}<>}]})>}<([<[<<>[]>]{<(){}>{
|
||||
[[[[<(<({<[[<{()}{{}[]}><[<><>]<()[]>>](<([]{})[{}]>)]>}<[{[[{(){}}]{(<><>)}][<<[][]>{(){}
|
||||
{(({({[{{((<[([]())((){})]>){[{(<>[])}<([]{})[[]<>]>]({<()<>>[[]<>]}[<()>{<>[]}])})({<([[][]]((){}))([<>{}])
|
||||
<(<(<<{[<<{<<[()[]][[]()]><([][])<{}()>>}}>[<<<<{}<>>>{[{}][{}{}]}>[<[()()]{{}[]}>[{[][]}([])]]>[[<<[][]>(
|
||||
<<{{({<<(([{{([][])(()<>)}}(<<[]{}>>)])([{[(()[])]}<{{<><>}<[]<>>}[<{}<>><[]<>)]>]{{<[{}[]]
|
||||
({[[[[(([[[{<({})([]())>{{<>{}}}}][[<<[]>[<>()]>]{[[[]<>][<>{}]]{[<>[]]}})][[<(<(){}>{()[]})><[[()[
|
||||
(((((([{{{(<<(<>{}){<>}><(()[])<()[]>>>{[<{}<>>(<>())}<{{}()}>})((([(){}]{<>})[{[]{}}{{}[]
|
||||
(([([(((<[(({[<>()]{[][]}})[{{[]()>[[]{}]}(<<>{}><{}<>>)]){[({[]}(<>[]))([()()][<>{}])]({({}
|
||||
[(<({{([[<(((<<>()>[[]<>])({{}()}<()<>>))[[{[]()}<()<>>][{()()}<{}[]>]])>({(<({}{})<()[]}>[{()
|
||||
{{{[([<{{{([<<<>{}>{()<>}>{<{}()><<><>>}]([{()}]))<{[<()()>{()[]}]{({}[])[<>()]}}>}}}({<(({({
|
||||
[([([<[<(<[{{{<>()}{()[]}}({()[]}[{}<>])}{[{<>}]([[][]]<(){}>)}]>[[{<[<>()][{}()]>(((){}>[<>[]])}{{{<>(
|
||||
{{[{{[[<{(<([[[][]]([]<>)])>)<{<<{<>()}[<>()]><((){})<<><>>>>([<<><>>(()<>)]([(){}}{[]<>}))}>}(({{{{[]}{
|
||||
[[[[({[<({{[[(<><>)]{<<>[]>([]{})}]<[{[]}{()()}]([<>()]([]<>>)>}})>{{<([{<{}{}>{()}}])({<[<>()](<><>)>
|
||||
{[({<[({[{[({[{}()][[]<>]}((()<>)<{}<>>))<[{{}}({}{})]>]{[<<<>[]>[[][]]>(({}[])(()[]))>{(([]{})({}[]))([
|
||||
[<<([{{(<<[<[[{}[]]](<[]{}>[<>{}])>[[<{}[]>(<>[])]{([][])[()[]]}]][[{{()[]}[<>{}]}(<<>{}>[[]
|
||||
<[(([{([([<{[[(){}]<<>{}>]}[[[()()]{{}<>}]]>[[{({}{})[()()]}([()()][<>[]])]{<[[]<>][[][]]>}]]{{<{[<>
|
||||
[<[[[[([[{[[<[{}{}]([]<>)>[({}[])<[]<>>]][<{()()}[<>[]]>([[]]<<><>>)]]}([<{{{}[]}}{(()<>>({}[
|
||||
<[<{[(<{({[<[[[][]]([][])]<([]){{}<>}>>[({<>{}}<[]>)]]([[([]{})[[]()]][[[]{}]({}{})]](<[{}<>
|
||||
({[<([(<[[<([[(){}]<<>{}>])({[[]{}]<()[]>}<<[]<>>{[][]}>)>{<[<[]()><{}[]>]([<>()]({}[]))><(
|
||||
({<<<{<({[[{[{<>{}}[<><>]]}{(({})[()()])<<()<>>([]{})>}]]]{<{{([[]<>](<>[]))[[{}()]({}())]}}>((<([{}<>])>{{<[
|
||||
[{([{[[{{<{<[{[]()}<[]{}>]>({<{}[]>{<>[]}})}[(({{}<>}<{}<>]){[[]{}]({}[])})]>}}]({([[([<()()>{[]
|
||||
<[{([([{[{<(([<>[]]{<>()})<{{}<>}>){([<><>])<(()[])<<>{}>>}><{{[{}<>]{<>}}[(())[()<>]]}<{[{}{}]{{}{}}}<{{}<>
|
||||
[{<<([{{(((<{<<>()>[{}()]}>{<<<>[]><[]()>>}){[(([][])([]()))<{{}[]}[[]()]>][[{{}<>}({}{})]{({}{})(<
|
||||
{({[((<([[[{{([])[()()]}({{}{}}))<(<[]<>>[()[]])>]<<([[]<>])<[<>()][[]<>]>>({[<><>]{{}[]}}({()[]
|
||||
{[(<(<{[({[(<<[]>{<>{}}>[{<><>}([]())])(<[[][]]<()<>>>[(()[])])]<{[{()[]}[<>{}]]}[{<(){}>(<>{})}<<<>()>>]
|
||||
(<{<[<({{{{([({}{})[[]{}]]({{}<>}<()[]}))}(<<{<>()}{()<>}>{[<>{}][()[]]}>{<<[][]>{<>()}><(<>{})<{}[]>>})}
|
||||
{(<<{[({<<[(<{{}{}}<[]<>>>((<>())([]<>)))]>><<({<{[]<>}([]<>)>{[()()]}}<<{{}<>}<()()>>(<()()
|
||||
<([([<(<[({[[({}()){()<>}](({}{})(<><>))][{({}<>)<{}{}>}{([]){(){}}}]})]>)<[[{<{{(()){<>[]}}({{}()}
|
||||
<<<([{[({{{((<{}()>{()()})[[<>()]])[[[{}()]<{}()>]{{[]<>}{{}())}]}<<{<<>><<><>>}[{{}[]}(<><>)
|
||||
<([<[<{[[[{[{[<><>][{}<>]}(<[]{}>)]}([{{<>()}<{}[]>}{([]<>)[(){}]}]<{((){})<[]()>}[<[]()><()[]>]>
|
||||
[([[[[[({{[(<[{}<>]<{}()>><[<><>]{<>()}>)]}<{(<(()<>)<{}{}>>{{()<>}(()()}})}>})(<[<([<<>[]>((){})]([[]<>]<()
|
||||
{(<[[{(((([[([{}()]<{}()))[({}{}){[]}]](<<<>[]>>([<>{}]))][(<({}{})<()[]>><<[]{}><{}[]>>)])(<([([][])[
|
||||
({(([{{<{{{<[<<>[]>{()<>}][([][]){()<>}]>([<()>(<><>)]<{<><>}<[]>>)}<{[[<>[]][<>{}]]<{<>()}{[][]
|
||||
{[([[[(([<{<{[[]<>]<<>()>}<<()()>([]{})>>[<<()[]>(<>())>[(()<>)]]}>]{{({{{{}[]}({})}<{{}<>}[[]()]>}((
|
||||
[<([[<[{{{[[[<<>{}>]{<()[]>{[]<>}}]{([[]{}]({}()))}]}}}(<{<[[({}{})<()()>]]({({}<>)[[]]}{[<><>]{<>{}}})>(<[
|
||||
<<(<<{{(({<[<<[]{}>{()()}}[[()[]]]]{[(<>{}){<>}]{[{}](<>)}}><{<(()())<[]<>>>[<(){}>(<>[])]
|
||||
{<(<[<[(((<{((()[])([]<>))([[]<>]({}[]))}><<([<>())<[]<>>)(<{}[]>({}<>))>[[([]())]({()()}{{}<>})
|
||||
[[((<[[[{{<{<{{}()}[{}()]>{{[]{}}[<><>]}}>}<{[<[(){}]<<><>>]([{}<>]<<><>>)]}(<<[{}<>]<<>{}>
|
||||
<[{{[[{<[{(({[(){}]({}{})})[([{}<>][()()])[<[][]><{}<>>]])}](<({(([]<>){()[]})[([]())((){})]}{{{<>{}}<[]()>}<
|
||||
<{((<([[{<<[(<{}()><{}[]>)]>[([{<>()}<()()>]<{()[]><()[]>>){<[{}[]]>[{[][]}(<><>)]}]>{{[{{{}<>}{<>}}[[(){}]<(
|
||||
{<[({(<{{[([{{[]{}}((){})}[[{}[]]<{}()>]]((<[]<>>)<([]()){{}[]}>))(<<{()[]}{[]})>[[(()())]{[()<>][<>(
|
||||
<<{[[[[{<({<[[{}()]]{{[]<>}{[]}}><{{{}()}({}{})}>}{([({}[])({}())](({}[])))[<{[]<>}[<>()]><<[]<>>(<>[])>]}
|
||||
[(([<<[{[{<({{()[]}<<><>>})[[([]())[[]{}])(<<>{}>)]>(<{{[][]}[{}()]}([{}{}][(){}])>((<<>[]>(()
|
||||
[({<<[[<{[<<({[]()}<()<>>)>]]{{<[[[]][{}<>]]>}{([[<>{}][{}{}]]<((){})(()[])>)}}}([{((<{}[]>)[<{}[]><{}()>])}
|
||||
{[[((<[{<<([{<<><>>([]{})}<(<><>)<<>()>>][{[[]{}]{()()}}<({}{})([][])>])><<{({<>{}}[<>()])((
|
||||
[[[<{{(<((([{<[]{}>({}<>)}[<<>()>]]<<(()[]){{}[]}>{(()<>){{}<>}}>){{{(()())[<><>]}[[[]<>]{<>[]}]}}))[
|
||||
(<({[({[[({{<{<>{}}<()[]>>[{(){}}<<>[]>]}[[<[][]><()<>>]({<>{}}{[]()})]}{(([[]<>][{}[]])(<[]<>>([
|
||||
{([<{[<({{{({[[][]][()()])[<<>()><[][]>])}<{{{[]()}[{}()]}{{<>()}{<>}}}((({}())<{}{}>){(<>{})[<>{}]})>}})(((
|
||||
([[[[[[{(((((<<>()>[[]<>])<{()()}[()<>]>){<[()[]]<<>[]>>(<<>{}}{{}[]})}))<<[([()()][[]()])[{()[]}([]())]][<([
|
||||
({{((((<{<[{[(<>{})][<()()>[[]()]]}]{({(<>())[[]()]}{<[][]><[][]>})}>}>{<<{{(({}())[<>])((()[])<[]<>>)}}[
|
||||
<(<[[[<<{([<<[[]<>]{<>[]}><{()()}([]<>)>>]{<{(<>())((){})}{[{}{}]<<>{}>}>})({([[{}{}]])[(<<>()>[
|
||||
{[(<{<[[{<{{(<()[]><<>{}>){[()<>]<{}<>>}}[[[<>{}][[]<>]]]}<[[({})<<>[]>]]{{<()<>><<>[]>}<{()[]}((){}
|
||||
({[{(<<{[<{({[()()]{{}}}<({}{}){()()}>)}<{(({}{})[<>[]]){([]())[[][]]}}{(<[]<>)[()])[[<>()]]}>>
|
||||
(({<<[<[<<<({<{}[]>({}{})}{<{}[]><{}[]>})>>(<<(<()()>{[]{}})({()<>}[()()])>[{[{}()][[]]}({<>()}}]>(
|
||||
<<(<(<[{([{<[[<>{}]<{}<>>]>{<(()[])(()())><{<>[]}{()()}>}}([{({}<>){<>{}}}{{<>[]}[{}{}]}]([<[]()>((){})
|
||||
{[{([({[[<<<{{[]{}}<[]{}>}[<()[]><[]<>>]>([{{}[]][[][]]]{{(){}}({}[])})>(<{[<>{}](()<>)}>{[<[]()>
|
||||
([[[<(<{[({<({()()}{<>()})((<>[])<[]<>>)>}<{<<{}()><<>>>}({{{}[]}}[(()[])[()<>]])>)<[<((()())[<>{}])(
|
||||
{<(((<[((((({<[]>[[]{}]}))[(<[[][]][{}{}]>){{[<>()][[]<>]}([()()](<><>))}])){(<[{[<>()][{}()]
|
||||
({([{<(((<{[<[{}[]]<<>>>({{}[]}[[]()])]([<(){}>])}{<[{<>[]}{[]<>}][<<><>){<>{}}]>[<((){})([]{})>[[{}{}][()
|
||||
<[{[<[{[({{<(({}<>}[[]()])>({{[][]}}<[(){}](()[])>)}})([[{{<<>()>([]{})}[<<>{}>[<><>]]}]])]
|
||||
{(<{([{[[({[(<[]{}>)({{}[]}{()()}))<{(()[])}[[()()]{{}[]}]>}<{<(()<>)>{{[]{}}({}())}}({{{}[]}{<
|
||||
[<<{<{<<(<([<(<>()){[]()}>[({}<>)({}<>)]][(([]{}){()[]})[{{}()}(()())]])>{([{{()[]}<<>[]>}<{<>[
|
||||
{{[[(([([({([([]<>)(()())][{<>()}{(){}}])})])]([{{[<{{{}<>}(<>())>{[()()]<<>[]>}>[{(()){{}[
|
||||
[({({({(({{(<[()()][{}<>]>[[{}()]{(){}}])<[<<>[]>][<{}>(<>{})]>}(((({}())({}{}))){{(()[])<[][
|
||||
<(<(<[([<[{[<(()<>)<()[]>><(<>())([][])>]{<[{}<>]{{}()}>{[[]{}](<>{})}}}<[<([]{})><{{}<>}([]())>]>]>
|
||||
<<<(<<[({{{<{({}<>)<()[]>}<[()<>]{(){}}>><{[[]()]<[]{}>}[({}{})<(){}>]>}(<[<<>[]>{()[]}]>)}[<{[<{}>[{}{
|
||||
{(<((<[{{[[[[<{}{}]<{}()>]][{({}{})<<>{}>}[<()[]>(()())]]]{([<[]()><[]{}>](<{}()>))({<<><>>(<>())}{
|
||||
{({{[[<[{<{{(<<>>)(<[]()>[()])}([({}<>)])}[[{[()<>][()[]]}]({<[]<>>{<>()}})]><<(<<{}()>{<>[]
|
||||
{{{[{[<<{[[{[{{}<>}<[][]>]{(()[])<<>()>}}[<{()()}[(){}]><<()[]>>]]{<((<>{})({}()))[<(){}>([][])]>{({{}[]}<
|
||||
<{{[<{({{{[<{{<>()}{{}()}}>]<{<[()[]](<><>)><[<>[]]{(){}}>}<([(){}]<{}{}>){(())}>>}[([{[[]<>][{}<>]}[{()}(
|
||||
[<<[{{(({({<{{{}{}}{<>[]}}({[][]}{<>[]})>[{[{}<>][<>[]]}[({}[])[[]<>]]]})}))<(<[[<(({}()))[<<>()>{(
|
||||
{<<([<{({[{{[({}[])<<>{}>]([()<>]<(){}>)}<([{}[]]({}{}))>}[<<<<>{}>[[][]]>{<<>[]><()>}>[<<<>><[][]>
|
||||
[({(<({[<[{{[<<>[]>[()[]]]<<<>[]>>}}<{([{}[]](<>{}))[{<>}{{}<>}]}(<<[][]>>[{[]<>}])>]>[(<(({<>[]}{<><>}))(<
|
||||
{<[[{{<<{(<(<([]<>)[[][]]>[([]{})[<>{}]])<[{<>()}{[]<>}]>>>[{(({()()}[<>[]]){({}())<[]<>>})}[(<{<>
|
||||
{[[{{{<[<[{<(({}{})[{}()])[(<><>)({}())]>}{[<{[]{}}[()[]]>]<{[()()]<[]()>}<[[][]]>>}]>{{({{{()[]}{{}(
|
||||
<{[<([{{[[<(<{<><>}[{}{}]><((){})>){[[()()][()[]]]{[[]<>]}}>]<<(<({}[])<{}[]>>{(<><>)<[]()>}){(<
|
10
2021/10/example_data
Normal file
10
2021/10/example_data
Normal file
@@ -0,0 +1,10 @@
|
||||
[({(<(())[]>[[{[]{<()<>>
|
||||
[(()[<>])]({[<{<<[]>>(
|
||||
{([(<{}[<>[]}>{[]{[(<()>
|
||||
(((({<>}<{<{<>}{[]{[]{}
|
||||
[[<[([]))<([[{}[[()]]]
|
||||
[{[{({}]{}}([{[{{{}}([]
|
||||
{<[[]]>}<{[{[{[]{()[[[]
|
||||
[<(<(<(<{}))><([]([]()
|
||||
<{([([[(<>()){}]>(<<{{
|
||||
<{([{{}}[<[[[<>{}]]]>[]]
|
34
2021/10/main.py
Normal file
34
2021/10/main.py
Normal file
@@ -0,0 +1,34 @@
|
||||
openers = ['(', '[', '{', '<']
|
||||
closers = [')', ']', '}', '>']
|
||||
points = [3, 57, 1197, 25137]
|
||||
|
||||
score = 0
|
||||
with open('data', 'r') as fp:
|
||||
# NOTE(dev): We assume all lines are the same length
|
||||
for line in fp:
|
||||
stack = []
|
||||
for ch in line.strip():
|
||||
line_score = 0
|
||||
if(ch in openers):
|
||||
stack.append(ch)
|
||||
elif(len(stack) == 0):
|
||||
try:
|
||||
i = closers.index(ch)
|
||||
line_score += points[closers.index(ch)]
|
||||
except ValueError: # not a closer
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
i = closers.index(ch)
|
||||
last = stack[-1]
|
||||
stack.pop()
|
||||
if(last != openers[i]):
|
||||
line_score += points[i]
|
||||
score += line_score
|
||||
print(last, '!=', openers[i])
|
||||
break
|
||||
except ValueError: # not an opener or closer!
|
||||
pass
|
||||
score += line_score
|
||||
|
||||
print(score)
|
33
2021/10/main2.py
Normal file
33
2021/10/main2.py
Normal file
@@ -0,0 +1,33 @@
|
||||
openers = ['(', '[', '{', '<']
|
||||
closers = [')', ']', '}', '>']
|
||||
points = [3, 57, 1197, 25137]
|
||||
|
||||
scores = []
|
||||
with open('data', 'r') as fp:
|
||||
# NOTE(dev): We assume all lines are the same length
|
||||
for line in fp:
|
||||
stack = []
|
||||
corrupt = False
|
||||
for ch in line.strip():
|
||||
if(ch in openers):
|
||||
stack.append(ch)
|
||||
else:
|
||||
try:
|
||||
i = closers.index(ch)
|
||||
last = stack[-1]
|
||||
stack.pop()
|
||||
if(last != openers[i]):
|
||||
corrupt = True
|
||||
break
|
||||
except ValueError: # not an opener or closer!
|
||||
pass
|
||||
if(not corrupt and len(stack)):
|
||||
line_score = 0
|
||||
for ch in reversed(stack):
|
||||
line_score *= 5
|
||||
line_score += openers.index(ch) + 1
|
||||
scores.append(line_score)
|
||||
|
||||
scores.sort()
|
||||
print('scores[int(', len(scores), '/ 2 )]')
|
||||
print(scores[int(len(scores) / 2)])
|
10
2021/11/data
Normal file
10
2021/11/data
Normal file
@@ -0,0 +1,10 @@
|
||||
1254117228
|
||||
4416873224
|
||||
8354381553
|
||||
1372637614
|
||||
5586538553
|
||||
7213333427
|
||||
3571362825
|
||||
1681126243
|
||||
8718312138
|
||||
5254266347
|
10
2021/11/example_data
Normal file
10
2021/11/example_data
Normal file
@@ -0,0 +1,10 @@
|
||||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
42
2021/11/main.py
Normal file
42
2021/11/main.py
Normal file
@@ -0,0 +1,42 @@
|
||||
grid = []
|
||||
to_flash = []
|
||||
|
||||
for line in open('data', 'r'):
|
||||
grid_line = []
|
||||
for ch in line.strip():
|
||||
grid_line.append(int(ch))
|
||||
grid.append(grid_line)
|
||||
|
||||
flashed = 0
|
||||
for step in range(0, 100):
|
||||
# Step 1: Increment
|
||||
for y in range(0, len(grid)):
|
||||
for x in range(0, len(grid[y])):
|
||||
grid[y][x] += 1
|
||||
if(grid[y][x] > 9):
|
||||
to_flash.append(tuple([y, x]))
|
||||
|
||||
if(len(to_flash) == len(grid) * len(grid[0])):
|
||||
print('all flash step #', step + 1)
|
||||
# Step 2: Flash
|
||||
while(len(to_flash)):
|
||||
cell = to_flash[-1] # take the last one
|
||||
to_flash.pop() # remove
|
||||
flashed += 1 # count
|
||||
for y in range(-1, 2):
|
||||
new_y = cell[0] + y
|
||||
if(new_y >= 0 and new_y < len(grid)): # in bounds
|
||||
for x in range(-1, 2):
|
||||
new_x = cell[1] + x
|
||||
if(new_x >= 0 and new_x < len(grid[y])): # in bounds
|
||||
grid[new_y][new_x] += 1
|
||||
if(grid[new_y][new_x] == 10): # JUST flashed
|
||||
to_flash.append(tuple([new_y, new_x]))
|
||||
|
||||
# Step 3: Reset (if flashed)
|
||||
for y in range(0, len(grid)):
|
||||
for x in range(0, len(grid[y])):
|
||||
if(grid[y][x] > 9):
|
||||
grid[y][x] = 0
|
||||
|
||||
print('Step #', (step + 1), ': ', flashed)
|
49
2021/11/main2.py
Normal file
49
2021/11/main2.py
Normal file
@@ -0,0 +1,49 @@
|
||||
grid = []
|
||||
to_flash = []
|
||||
|
||||
for line in open('data', 'r'):
|
||||
grid_line = []
|
||||
for ch in line.strip():
|
||||
grid_line.append(int(ch))
|
||||
grid.append(grid_line)
|
||||
|
||||
flashed = 0
|
||||
step = 0
|
||||
#for step in range(0, 100):
|
||||
while(True):
|
||||
# Step 1: Increment
|
||||
for y in range(0, len(grid)):
|
||||
for x in range(0, len(grid[y])):
|
||||
grid[y][x] += 1
|
||||
if(grid[y][x] > 9):
|
||||
to_flash.append(tuple([y, x]))
|
||||
|
||||
# Step 2: Flash
|
||||
prior_flash = flashed
|
||||
while(len(to_flash)):
|
||||
cell = to_flash[-1] # take the last one
|
||||
to_flash.pop() # remove
|
||||
flashed += 1 # count
|
||||
for y in range(-1, 2):
|
||||
new_y = cell[0] + y
|
||||
if(new_y >= 0 and new_y < len(grid)): # in bounds
|
||||
for x in range(-1, 2):
|
||||
new_x = cell[1] + x
|
||||
if(new_x >= 0 and new_x < len(grid[y])): # in bounds
|
||||
grid[new_y][new_x] += 1
|
||||
if(grid[new_y][new_x] == 10): # JUST flashed
|
||||
to_flash.append(tuple([new_y, new_x]))
|
||||
|
||||
# PART TWO ANSWER
|
||||
if(flashed - prior_flash == len(grid) * len(grid[0])):
|
||||
print('all flash step #', step + 1)
|
||||
break
|
||||
|
||||
# Step 3: Reset (if flashed)
|
||||
for y in range(0, len(grid)):
|
||||
for x in range(0, len(grid[y])):
|
||||
if(grid[y][x] > 9):
|
||||
grid[y][x] = 0
|
||||
|
||||
print('Step #', (step + 1), ': ', flashed)
|
||||
step += 1
|
102
2021/14/data
Normal file
102
2021/14/data
Normal file
@@ -0,0 +1,102 @@
|
||||
ONHOOSCKBSVHBNKFKSBK
|
||||
|
||||
HO -> B
|
||||
KB -> O
|
||||
PV -> B
|
||||
BV -> C
|
||||
HK -> N
|
||||
FK -> H
|
||||
NV -> C
|
||||
PF -> K
|
||||
FV -> B
|
||||
NH -> P
|
||||
CO -> N
|
||||
HV -> P
|
||||
OH -> H
|
||||
BC -> H
|
||||
SP -> C
|
||||
OK -> F
|
||||
KH -> N
|
||||
HB -> V
|
||||
FP -> N
|
||||
KP -> O
|
||||
FB -> O
|
||||
FH -> F
|
||||
CN -> K
|
||||
BP -> P
|
||||
SF -> O
|
||||
CK -> K
|
||||
KN -> O
|
||||
VK -> C
|
||||
HP -> N
|
||||
KK -> V
|
||||
KO -> C
|
||||
OO -> P
|
||||
BH -> B
|
||||
OC -> O
|
||||
HC -> V
|
||||
HS -> O
|
||||
SH -> V
|
||||
SO -> C
|
||||
FS -> N
|
||||
CH -> O
|
||||
PC -> O
|
||||
FC -> S
|
||||
VO -> H
|
||||
NS -> H
|
||||
PH -> C
|
||||
SS -> F
|
||||
BN -> B
|
||||
BF -> F
|
||||
NC -> F
|
||||
CS -> F
|
||||
NN -> O
|
||||
FF -> P
|
||||
OF -> H
|
||||
NF -> O
|
||||
SC -> F
|
||||
KC -> F
|
||||
CP -> H
|
||||
CF -> K
|
||||
BS -> S
|
||||
HN -> K
|
||||
CB -> P
|
||||
PB -> V
|
||||
VP -> C
|
||||
OS -> C
|
||||
FN -> B
|
||||
NB -> V
|
||||
BB -> C
|
||||
BK -> V
|
||||
VF -> V
|
||||
VC -> O
|
||||
NO -> K
|
||||
KF -> P
|
||||
FO -> C
|
||||
OB -> K
|
||||
ON -> S
|
||||
BO -> V
|
||||
KV -> H
|
||||
CC -> O
|
||||
HF -> N
|
||||
VS -> S
|
||||
PN -> P
|
||||
SK -> F
|
||||
PO -> V
|
||||
HH -> F
|
||||
VV -> N
|
||||
VH -> N
|
||||
SV -> S
|
||||
CV -> B
|
||||
KS -> K
|
||||
PS -> V
|
||||
OV -> S
|
||||
SB -> V
|
||||
NP -> K
|
||||
SN -> C
|
||||
NK -> O
|
||||
PK -> F
|
||||
VN -> P
|
||||
PP -> K
|
||||
VB -> C
|
||||
OP -> P
|
18
2021/14/example_data
Normal file
18
2021/14/example_data
Normal file
@@ -0,0 +1,18 @@
|
||||
NNCB
|
||||
|
||||
CH -> B
|
||||
HH -> N
|
||||
CB -> H
|
||||
NH -> C
|
||||
HB -> C
|
||||
HC -> B
|
||||
HN -> C
|
||||
NN -> C
|
||||
BH -> H
|
||||
NC -> B
|
||||
NB -> B
|
||||
BN -> B
|
||||
BB -> N
|
||||
BC -> B
|
||||
CC -> N
|
||||
CN -> C
|
45
2021/14/main.py
Normal file
45
2021/14/main.py
Normal file
@@ -0,0 +1,45 @@
|
||||
str = ''
|
||||
data = {}
|
||||
letters = []
|
||||
with open('data', 'r') as fp:
|
||||
for line in fp:
|
||||
if(' -> ' in line):
|
||||
pair = line.strip().split(' -> ')
|
||||
data[pair[0]] = pair[1]
|
||||
elif(len(line) > 1):
|
||||
str = line.strip()
|
||||
|
||||
for ch in str:
|
||||
if(not ch in letters):
|
||||
letters.append(ch)
|
||||
letters.sort()
|
||||
|
||||
# # DEBUG(dev):
|
||||
# print(data)
|
||||
# print(str)
|
||||
# print(letters)
|
||||
|
||||
for step in range(0, 40):
|
||||
print('BEFORE:', str)
|
||||
new_str = ''
|
||||
for i in range(0, len(str) - 1):
|
||||
lookup = str[i:i+2]
|
||||
print(lookup)
|
||||
if(lookup in data.keys()):
|
||||
new_str += str[i] + data[lookup]
|
||||
else:
|
||||
new_str += str[i]
|
||||
new_str += str[-1]
|
||||
str = new_str
|
||||
|
||||
counts = {}
|
||||
for ch in str:
|
||||
if(ch in counts):
|
||||
counts[ch] += 1
|
||||
else:
|
||||
counts[ch] = 1
|
||||
|
||||
counts_list = list(counts.values())
|
||||
counts_list.sort()
|
||||
|
||||
print(counts_list[-1] - counts_list[0])
|
45
2021/14/main2.py
Normal file
45
2021/14/main2.py
Normal file
@@ -0,0 +1,45 @@
|
||||
str = ''
|
||||
data = {}
|
||||
letters = []
|
||||
with open('data', 'r') as fp:
|
||||
for line in fp:
|
||||
if(' -> ' in line):
|
||||
pair = line.strip().split(' -> ')
|
||||
data[pair[0]] = pair[1]
|
||||
elif(len(line) > 1):
|
||||
str = line.strip()
|
||||
|
||||
for ch in str:
|
||||
if(not ch in letters):
|
||||
letters.append(ch)
|
||||
letters.sort()
|
||||
|
||||
# # DEBUG(dev):
|
||||
# print(data)
|
||||
# print(str)
|
||||
# print(letters)
|
||||
|
||||
for step in range(0, 40):
|
||||
new_str = ''
|
||||
for i in range(0, len(str) - 1):
|
||||
lookup = str[i:i+2]
|
||||
if(lookup in data.keys()):
|
||||
new_str += str[i] + data[lookup]
|
||||
else:
|
||||
new_str += str[i]
|
||||
new_str += str[-1]
|
||||
str = new_str
|
||||
print('Step ', step+1, ', length', len(str))
|
||||
|
||||
# NOTE(dev): un-indent this (take it out of the for loop) for just a final answer
|
||||
counts = {}
|
||||
for ch in str:
|
||||
if(ch in counts):
|
||||
counts[ch] += 1
|
||||
else:
|
||||
counts[ch] = 1
|
||||
|
||||
counts_list = list(counts.values())
|
||||
counts_list.sort()
|
||||
|
||||
print(counts_list, counts_list[-1] - counts_list[0])
|
100
2021/15/data
Normal file
100
2021/15/data
Normal file
@@ -0,0 +1,100 @@
|
||||
9165985876154699219988192797299938946759548993842382179897895847959995468789384779887969965834298757
|
||||
9998264799399739852669159899969915752881369928979589425659869512849898348591988899941938989958981368
|
||||
8899439372928798295981284899995498957198997822776999766989269673341115866632499916582179985999797178
|
||||
9421373314798816327241583824298987799745811978869899899899999689988933652499891999899718759652641398
|
||||
9949959989598519929632977671926983547787167773939739198988988851889519228348573848979828599971727943
|
||||
2989192448779756984992587956689999842746119939998567894718899918799954281648927282191699499764931166
|
||||
9536499426969676189784443598979559899499773119978188394689557995599331996979736693529419681251956996
|
||||
1751936936954979779895998917863998697858138691879749999727789764741997539275579593798975539798818972
|
||||
7274746616894977772987689459988988891794769772199789185982726479992789563994126143759648659653627929
|
||||
9768211178649269995923493912176968666679999859829913848396992289798892197419967914777851877899477278
|
||||
9548265381888989898295865115497574817515178999881998168798969539989897979118423366393898169329939816
|
||||
5346816194398971492996938739782725986596757996472498951666679779287752997484725936582558299359964812
|
||||
2169889968977588483272986596967998729999883958728879796999737989942928997399898577324799379798165679
|
||||
5756791285489939716695977945746649394898965799971791856215827997699758829299499895496993375817688889
|
||||
1189911823962199612255959754716953775367595418858921381973577497988994381699599376948136788285998274
|
||||
6979939299876267486998569159464199464965974658469723835541132825855912999935783995325776519991867869
|
||||
7829881839997878488734339898145124968389716637926975397882799631985728918519668146942356911683694975
|
||||
4973997156985297758563699888285794535932928974966978296562139199889893476728999942416259889912711471
|
||||
9534797994999788999759474799734844192166842694971197691854895641895188586895455192589986798997913693
|
||||
2819784988295365719599997589858664998979399989735399884134499895873389479651295996498866989999839974
|
||||
6129944129969453989699888866976269999128469799982997963676678293639494188967181417362922546475281598
|
||||
9716591619494494558731969871917781639763288288691962634219628479989988828962651246459129568974491171
|
||||
7894482759988943587818779691955666934841799931371572868778856815865991124376396974593984947897442991
|
||||
1858394839149329949299818139987736884848178995897668499996188998667699618978779495959989927996996397
|
||||
9917119977481935978699197129381282957978683881779735689583195993458959989897975199999285945815997999
|
||||
1699128644295779552889817864638995225998895287579281281998594696644213479297199692979781937997179875
|
||||
8289472999575769888986161678994171392789714988719932799199558696689379278929798887977551878788398787
|
||||
9175199787918919864185866129967892999898318993291829953849829788999738939999469848949591989149962712
|
||||
6199185639948988878676462732119197225882925435874993975768952939825978994996892549999699984912695356
|
||||
3396488583898545189449831859997919671368765298895692847986994925119921865818912189499168979958896494
|
||||
9938398336984195997576689194134985999635325783571526493894394589917988793989755746999698829649589393
|
||||
6985999497989855798918845568728129349777627978979362788359497952698956998292996918648692699694349887
|
||||
1983998898992942689898989791697792913121476987631657959299998868769559979688918876893688862439185197
|
||||
7357776772998794811999929459919571597899775797198394831478974157594549666253368399586349899987699999
|
||||
7959339994696971922632949191545959757987989979787788169979748972545188912811999284691666989915589771
|
||||
9759961834557989443271499976572889278289319995879484972649589489199519573998999779383692242897767588
|
||||
9179641759649515678926897874488858988897787895855979191899776967749898123692484838554413919817918963
|
||||
6839761379993114699928685489349481791394595895995488717149328139993956495742445794747189959976877649
|
||||
7719888678899926948979191678165949542927483596385943836398298659699148778343914768999898197267997991
|
||||
8769727958885176392169934146934172488871783986753744485932511888999799159194751538987186924419884479
|
||||
8991999992999929999897984599767977994699827768813861298818993288386943869782797583698682188885283399
|
||||
7618891897968939798498999399278379698962758659288163913969875574557443483997692961986999939899819481
|
||||
8879168556577788339549879912587944289995777798881688244889799389891799876819699576957557971877898128
|
||||
9291695492736749179768777989972456198819896897386591181956469899994155718299785968686938589318979479
|
||||
7795999789358882518386787487224292238877893956695912892699678996798249199324897986249725799479399977
|
||||
7157587585956489829119899759896997988918879818491999931184192141949199172799356679472486896195864474
|
||||
8369998998796539973399979987949986863639829688617494995142799799778639869918868177475771699198897648
|
||||
6597979998999646797717999135983617949772192975367951599248888799957499785994774771558359664883693989
|
||||
8494399497884369731998936499887638658943929616778716995355827188745777858983426799559721799739362629
|
||||
7988688889359569698815957687229757873596999199938929146584679599188685439814466838789683219554419476
|
||||
9247298485768968989794782295879689497761879956994316114992795924987262939579993889586584967699911179
|
||||
9585318399982677997578979671589977319169586337196999959189521499887711992343851295981988819951696391
|
||||
9688419987598317988779256198579659993398274893319912676925791429994831998147985462785322692958417991
|
||||
9162526572947889939619891135679859992512868978725888837198497899147199825914711544192984934699878858
|
||||
9997992172487298739215471619688889939819838188921969391991648949979166298795194179866892977317488668
|
||||
4342969513889787361777751972798659462495119377122327857968869995779944989446988786669168689799978198
|
||||
9991989792887933999782849992885388199539897175961949179928388186994694998865752811971681796835228899
|
||||
9689884899572994167989994913659819996941825788877898819911788969419991277989227389959829597962878797
|
||||
9919879157714445923163829999735888889724892834556637899899999974386932299127993655996239789769999544
|
||||
8158429263197997788393974998999939783878693949897825898975995959979986635699272784592895953298769979
|
||||
6933156399191389719992767671896649494989689977121886269912939799779176467784638649979932992778611947
|
||||
9937886748328953482685979758934658999819989845699372899934596991259755741819979779889881397565568579
|
||||
6628287411551868899648999511774894539834357749799788481594933187788979179772699757813897655969637759
|
||||
1681758889993977881987844998586378799289969999542735618971489988849699628668119898999679199493949189
|
||||
7756952966791755589777886975949697297729368719914568929921989979278297994486928996985666791996513546
|
||||
7959939142776881868999785876799728991368773296952962918971941199687791336941297836969992566198117899
|
||||
9919799591383641992451999795686291882995991159937526287799259396499782592953878378919512331399769295
|
||||
9979988697799299993248298599458499952548969526718987894849849961566959196296836979299696595499951269
|
||||
8989115299788834687596939899183482448889849883899881337161943668283395379982966119363885868799817686
|
||||
3917979748934696925996487991958936699899582264499928897937594999993391587881813378359971812919779972
|
||||
7798825938413749319999785941489868587674397449269738978317389938919984622199581498529938819682972471
|
||||
7749948181969657924978787838596695869966969369158962427829991499668977295896254897998989743989952389
|
||||
6398998955793159938819887788968371888968395499298999755899949268632898528951445886293997299392969779
|
||||
9539983773686993498991392899889572558299175987819981797981886747694169489893727157979378595839496298
|
||||
9599999287193787789729986389617989992374479972959749982818939999895692869845931449861767839389829149
|
||||
4889176836968695418797941267779399488818276299865898498649489796971967884999112828966259271689857259
|
||||
7139139187955994831738585298962698949981181887589699969919418116293969946431635243579918986885919619
|
||||
7935837589876972417397869798312741789988882795986987744696696629647813993997762979599189148298958581
|
||||
8791284382878199766798982957837371997961791491996313339915819373928948979938596612197699691473969914
|
||||
1372974376943738718696489825854989786382983999879965536283589995655483569334269859559761199879679291
|
||||
9719671746885959293824693968698399315424948599622489865269469961617669916732853892695261177787994496
|
||||
7849319899791243818799879975258532467699699999398269787199341236894749619399991856788917729181194197
|
||||
9148263323757681139949799197198549259446781912979561927929891898923997238737858757915394778591127667
|
||||
1945591989843987198391756487965892217958111951642219915715439797998675786222936815998966826782589594
|
||||
5254778838276178988551266998775337643868756772978159294191819424888551874271745598136847865594999289
|
||||
3998557499888479397893111869792537426834985941959185929798919875628859952429849886849639853349182496
|
||||
8958877677623879221669563361998988956937492798913659491897715599879989983979859984661929198589817564
|
||||
9989969281947994946512996153988898382127889834868897498898867797998892148557494839482788798269898496
|
||||
9779851919689459958899912662756981619298821434879339749956713988385759469959788279765789991925947918
|
||||
4196471827218751217999955385399979199189581896987488518319752529829892282899638773984698854832217793
|
||||
5968399569814182278918739959691249997958587277596698779311494824187981838837892479347738267879912541
|
||||
8659894118598996577145167494795592898597175979829589886499183913197276893979278479678988218798894991
|
||||
6649277899864442637895792699719172999998662937819979979769821897696686788719291967114346689819212978
|
||||
6699889979874997773889958977455779952988466968759738452847569993821963796198741514377779188577811889
|
||||
1173976886399735895884999486498511998399588328832288555979166889776686858695414825689877994898917949
|
||||
9629147139882191719857926675389957799296279989442991999622669639755767892922474778888299984452999898
|
||||
4391879947595258989144156986799899833458894496218777872997391217987623967998848296898891312888421579
|
||||
9362699299759899879589911968947655251988997896874791778876389919939496782959848979971163281597161779
|
||||
1652179878596567755189593919723287659886989991199789326995581692999815373488857495418291969165215199
|
||||
9788389477191759669998798979888832998683445278988415997594187969167388689899997659918914818788982937
|
10
2021/15/example_data
Normal file
10
2021/15/example_data
Normal file
@@ -0,0 +1,10 @@
|
||||
1163751742
|
||||
1381373672
|
||||
2136511328
|
||||
3694931569
|
||||
7463417111
|
||||
1319128137
|
||||
1359912421
|
||||
3125421639
|
||||
1293138521
|
||||
2311944581
|
12
2021/15/main.py
Normal file
12
2021/15/main.py
Normal file
@@ -0,0 +1,12 @@
|
||||
class Point:
|
||||
shortest_path = []
|
||||
|
||||
data = []
|
||||
for line in open('example_data', 'r'):
|
||||
data_row = []
|
||||
for ch in line.strip():
|
||||
data_row.append(ch)
|
||||
data.append(data_row)
|
||||
|
||||
for row in data:
|
||||
print(row)
|
@@ -82,7 +82,7 @@ def ParsePossibilities(text):
|
||||
# RemoveImpossibleLetters(good_letters, good_positions)
|
||||
|
||||
# The harder ones second:
|
||||
if(text_len == 5):
|
||||
# if(text_len == 5):
|
||||
# Could be 2, 3, or 5
|
||||
# MUST contain positions 'a', 'd', and 'g' in any 5-position number
|
||||
# MIGHT contain positions 'b' and 'f' for FIVE
|
||||
@@ -91,7 +91,7 @@ def ParsePossibilities(text):
|
||||
# if one of them is found with two others, it's either c or f
|
||||
# if one of them is not found with two others, it could be b or e
|
||||
|
||||
if(text_len == 6):
|
||||
# if(text_len == 6):
|
||||
# Could be 0, 6, or 9
|
||||
# MUST contain positions 'a', 'b', 'f', and 'g' in any 6-position number
|
||||
# MIGHT contain positions 'c' and 'd' for NINE
|
||||
@@ -108,6 +108,7 @@ with open('example_data', 'r') as fp:
|
||||
data = split_line[0].split()
|
||||
# print(data)
|
||||
codes = split_line[1]
|
||||
data += codes
|
||||
for val in codes.split():
|
||||
if(len(val) in [2, 3, 4, 7]):
|
||||
total += 1
|
||||
|
100
2021/9/data
Normal file
100
2021/9/data
Normal file
@@ -0,0 +1,100 @@
|
||||
5434456789899876598943212349988734679896554212468998765634987654567895454569876745567898765987654678
|
||||
4421345997789997987894103458976521398765432101457897664529876543988987353478965434456799974398766789
|
||||
3210237896698999876789214567895320129878543212346987543212989432499976212389876521234589867219878999
|
||||
8732456934567987655678925679976543234999657323657898952101296521276895423467987420145678954323989987
|
||||
7545678923979996544367899899997665379898775454767899843212398730145789439999876521266789765439896895
|
||||
8656989019899985431257912978989876456789896569898998754324579821234679598787987632348999976598765434
|
||||
9767893198769876542349943969878987567891987678959799867465679932348789987656899973467898899989754325
|
||||
9899954599356987653567899858767898998910198789345689879876898655459892199767898765989987678978965434
|
||||
0949765983245898974567986745656789429963239891256998989987998798767891019898999899899876569867896645
|
||||
1239899874123798765678965432345678998754356999969897896998919999898942129919899989798765432956789896
|
||||
2456999763235679976789876521012899569896567987898776645789423998989763298901698978679654321987899987
|
||||
3567998654345789697894997863246789345989679976897655434678999887678954397992497761598767210198989999
|
||||
4568998767658994598932987654959896559878998965689543212789989756545895986789986550349989321239878934
|
||||
5679109978767893459891098799898998698766987654599652101299876542136789975498765431256999932349867995
|
||||
6789299989878932398789129988797789797654598543688943212389987651012898996329765432367899893998656789
|
||||
7898989899989321239679939878646678976543987654567894345678999954123456789319876783456987679899543454
|
||||
8987674789996510398567898965434567895432398769878997656789298893256567892101989865597976545788932123
|
||||
9876543668897932987678987654325478999421239878989989897892196799347878943212399876789876434567893015
|
||||
6976542456789893498789798843412345678910129989095678998943985978958989954323498989899854323479992134
|
||||
5988764567898789999895699752103456989321298792134578949959874567899699895434597898998769436589789645
|
||||
3299985998976679891934987653212367895433397654236689939898765878934598789545986567899898998995679756
|
||||
4399876789765456790949998654354567976564579864346789795789876989423987678959876456789987999754598967
|
||||
5989987898874345689898998765667678987678679875467997674898997893219876579898965345699876899643457999
|
||||
9874399987654234889767249879799899398788799986578998543456789979101985498787976458798765678952348688
|
||||
9965456798982124678954123998989921299899899897789019432349892356919876987656897569987654569861234567
|
||||
9878767899971012567893299897678930987943945798899929656478901237895988995434789978999543498990195688
|
||||
4989879998753223456789987684567899876542134689967898767567892348954599986523678989898921987989989789
|
||||
3292998987654345567899876543454979987698745798756789888678943456795678987434567898797990196578878990
|
||||
5101997699865456878999987952123567898987656987645999999799764789989799398646678987686789987458767891
|
||||
3219876439876767989789854321018798909998789398739898998999875699978989109798789999575679654345656789
|
||||
4923987421988878994698765432134689212999899219898787887689987898967878919899899998434598743212345699
|
||||
9894996210199989543569876987656789329896998998997645986567898987657567894902999896565679754103456999
|
||||
8789765434567896532979987899769895498785987987987432345457899996543456793219899789678998765214667898
|
||||
7679987545698987649899998959878999597654596576796541012345678987532345789398798698989439886356778987
|
||||
6567899756789498998787899543999788999869989435987782134456989997431234678987654587892129987487899876
|
||||
1456789987891349987656987682101677896998764324598943245667892986520345679976743476789098987598989988
|
||||
2367891098942998876435699899323456795109875455799876368998901975421234567895432125678987798679769899
|
||||
3458932989959897652123799998754789894298989569899965467999219876532345689984321014789976689789543767
|
||||
6567899876798789943254889879875678989997898698999876567894334998765456796975432423899865579899632156
|
||||
7678999865987656798765679765996899569876679987987987678999549769976789895496676534998784465978943234
|
||||
8789489954698747899898789894597943456965569876756798989998998756987899932398987545797653234567894965
|
||||
9896567893497656789989899989698952349893457954348899999867897645698998651239998676789543123456789896
|
||||
4989678912399788997678969878999876599789569943235978987656798434569679962345999987898654234567898797
|
||||
3479989101989899234579953967899997987679979754101567896546795320197599843469899998939764346678999689
|
||||
2567893219876920123498842545798798996589898765243489998657896431989987654598788999323976487989898567
|
||||
1457954998985431245987721234989659987456799876756678998798986549879999867998687896534987578998766456
|
||||
0345699877896545679876510129878943298589890987987899989899598698768899979896556789649898789789654233
|
||||
1258789565987656798765431298967892129678992999398987667965498797658789998787445679998769897698763101
|
||||
3879895434598767899876532987656789098789979893219898548994349988546698987674324567898756989549874222
|
||||
4989999323569899987989749876545699989898767689456798656789239975234567896532014687996545678934965434
|
||||
5699888912479959876599898765434598878989954597997959897891098754123458976432123456789436789029896945
|
||||
6789767893569542987456999876523987654567893456789542998943987653012369897643234797897647892198789896
|
||||
7996556789698959898968998765219876543478932345698951019995698432123456797654365698998758943987668689
|
||||
8954345678987998759979897654327989657899321234567892129889997643264567899895776789019869959876547567
|
||||
9543287567896789543499789876456798798999872345678963498769898965459678999976798997998999898954323458
|
||||
8762123456795678932987678976578979899698765456789954989656789878678989689987899756987889767895444767
|
||||
6571012387894239321998489987678967989459889578997899876545995989789996577998987645986563456976655678
|
||||
8432123456943145939876569998989345678967998789756798765634894399898895456879995429876432356897779899
|
||||
7543234579432019899998678989492235678979679897645987654329795210956789327467896539994321237998989931
|
||||
8654345678973298799659989976320136789989536965534598965418689632345893214357987698789435398949995432
|
||||
9765566899954989578945698765431246789997645984323459876324596543456789301236798797698945459539876543
|
||||
9878987899869876457936789987543657894987659876775767988765797786569895212545679987567896579321997654
|
||||
9989398998998765346897894697654769923498767987899878999896789897678954323598789498678987678932398895
|
||||
9899459987679976456789923498767878939999989998910989999987894998789765499989892349989698989993979976
|
||||
8798967943568989769893212459878989998791299879322398989998943769999876987878991234596439498789765987
|
||||
7667899652456899878976493967989399876689399965443987878999542356789989776456789949697321334599654598
|
||||
6545678943597956989987989898996598985545989987559876769897669467894597654345699898989210123498963239
|
||||
9436789894989439997899876789987987694234567897698765458789798978932987543248998767678933234987892134
|
||||
8997898789878998876799985689998975543123458998789987345678997989321997654367999856577894549876789045
|
||||
6889997679767897545989654567899984321012567899898753234789986899439898765456897845456789698765692156
|
||||
5679986545656989439876543678920995443227679998999864565699875778999789996567986434345698799754589267
|
||||
4798765434745778924987762399439876654535789587998765699789564567987678987698954323236789988643678979
|
||||
3987654321434567995699843489597987765678996476899876789895423459876569299899875210127999876512889989
|
||||
2398776410123456789987654578976598978789875345789987899964312346975489101999986321239899974323690198
|
||||
1459898531234587898798767678965439989999954234598798979975423769876594312398765432349798765434569297
|
||||
2699876542346678997649878789432123499999876345987659567897569878987694324569898543498659896565678956
|
||||
9989987843656789989432989896543034578989985456798741456898689989299789455689987654987545987876789245
|
||||
8978998654567897678921299987652145989979876787899432346789799892109896596798998965696534698987992123
|
||||
7767899765678976567932349998543267898765998998989753456899896789512987989987899878987623499698993434
|
||||
6456789878789995478945678997654379987654989999978999567899945695423499879876789989998834988549889645
|
||||
2348995999998989599656789998765459998769877898765688979998956789534598766545679199876549876534678956
|
||||
1256893212987876989767899869876567899898756987654567999986899899976987655326989298987698765423459867
|
||||
2367999323986765878998987656987878998999967898323457899875798999897898543201399987598789879210678978
|
||||
3478998939765654569999896545698989667989899999212345899964567898799939954912568898449899984321289989
|
||||
4989997898754343456789765434349893459879798987463456789643456789688929899893456789234989965434567896
|
||||
5678976798773212345899984321256789599965667896554569896532567894567998789789598894345679876565778965
|
||||
6899995987654301236789876532367899987654356987789678997321013789679876545699679965956789987876789954
|
||||
8987989998765312447897987688456789998543234598898789398432123678989999433488989989897999998998899895
|
||||
9766767989876493558965499786567896987652105679999891298743454569999878521367893198769899899899966789
|
||||
7654555679997989967894329897898945698543212589899999987655677678998765310456789976556789765732455894
|
||||
6553334899989879898965469989999334987654323456789678998766788889429896321367899896345678954621234932
|
||||
5432124578978956789876598976989219999768454579894599659877899995434975433698998765234579543210129891
|
||||
6543023569864345699997986745878998789879767699923589547998998989565986844589987654357897654521656790
|
||||
9632123479983234567898965434567899667989888789013478936669987879976987865679999866468999865632347891
|
||||
8743244569874347689999874323456965456795999993123569425459986567899898979789899998567899876774458942
|
||||
8654456798765456790198765201597896568954987654256989312398765458968799989897789219778945988765667899
|
||||
9987587899976569891239877332387899878943298965345993201239954349355689997956678909899434199876789978
|
||||
1098788998988789932545976545456956989652129876556789713498765693234598766434567899974321019998893459
|
||||
3129999987699896543489988758969139898761034987679899654569876789345679654323489998765432198779902345
|
||||
4534567898799987654578999767878956789432156798789998775678987895468798765434591249976545698654323456
|
5
2021/9/example_data
Normal file
5
2021/9/example_data
Normal file
@@ -0,0 +1,5 @@
|
||||
2199943210
|
||||
3987894921
|
||||
9856789892
|
||||
8767896789
|
||||
9899965678
|
44
2021/9/main.py
Normal file
44
2021/9/main.py
Normal file
@@ -0,0 +1,44 @@
|
||||
data = []
|
||||
|
||||
with open('data', 'r') as fp:
|
||||
# NOTE(dev): We assume all lines are the same length
|
||||
for line in fp:
|
||||
data_line = []
|
||||
for ch in line.strip():
|
||||
data_line.append(int(ch))
|
||||
data.append(data_line)
|
||||
|
||||
total = 0
|
||||
for y in range(0, len(data)):
|
||||
for x in range(0, len(data[y])):
|
||||
sub_total = 0
|
||||
all_four = 0
|
||||
# above
|
||||
if(y > 0):
|
||||
if(data[y-1][x] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 # skip
|
||||
# below
|
||||
if(y < len(data) - 1):
|
||||
if(data[y+1][x] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
# left
|
||||
if(x > 0):
|
||||
if(data[y][x-1] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
# right
|
||||
if(x < len(data[y]) - 1):
|
||||
if(data[y][x+1] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
|
||||
if(all_four == 4):
|
||||
total += data[y][x] + 1
|
||||
|
||||
print(total)
|
95
2021/9/main2.py
Normal file
95
2021/9/main2.py
Normal file
@@ -0,0 +1,95 @@
|
||||
data = []
|
||||
low_points = []
|
||||
|
||||
with open('data', 'r') as fp:
|
||||
# NOTE(dev): We assume all lines are the same length
|
||||
for line in fp:
|
||||
data_line = []
|
||||
for ch in line.strip():
|
||||
data_line.append(int(ch))
|
||||
data.append(data_line)
|
||||
|
||||
total = 0
|
||||
for y in range(0, len(data)):
|
||||
for x in range(0, len(data[y])):
|
||||
sub_total = 0
|
||||
all_four = 0
|
||||
# above
|
||||
if(y > 0):
|
||||
if(data[y-1][x] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 # skip
|
||||
# below
|
||||
if(y < len(data) - 1):
|
||||
if(data[y+1][x] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
# left
|
||||
if(x > 0):
|
||||
if(data[y][x-1] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
# right
|
||||
if(x < len(data[y]) - 1):
|
||||
if(data[y][x+1] > data[y][x]):
|
||||
all_four += 1
|
||||
else:
|
||||
all_four += 1 #skip
|
||||
|
||||
if(all_four == 4):
|
||||
total += data[y][x] + 1
|
||||
low_points.append(tuple([y,x]))
|
||||
|
||||
print('Part 1:', total)
|
||||
|
||||
bin_sizes = []
|
||||
for point in low_points:
|
||||
points_to_check = [point]
|
||||
checked_points = []
|
||||
|
||||
while len(points_to_check):
|
||||
p = points_to_check.pop()
|
||||
checked_points.append(p)
|
||||
cur_y = p[0]
|
||||
cur_x = p[1]
|
||||
|
||||
# check left
|
||||
if(cur_x > 0):
|
||||
if(data[cur_y][cur_x - 1] < 9):
|
||||
left = tuple([cur_y, cur_x - 1])
|
||||
if(not (left in checked_points) and not (left in points_to_check)):
|
||||
points_to_check.append(left)
|
||||
|
||||
# check right
|
||||
if(cur_x < len(data[0]) - 1):
|
||||
if(data[cur_y][cur_x + 1] < 9):
|
||||
right = tuple([cur_y, cur_x + 1])
|
||||
if(not (right in checked_points) and not (right in points_to_check)):
|
||||
points_to_check.append(right)
|
||||
|
||||
# check above
|
||||
if(cur_y > 0):
|
||||
if(data[cur_y - 1][cur_x] < 9):
|
||||
above = tuple([cur_y - 1, cur_x])
|
||||
if(not (above in checked_points) and not (above in points_to_check)):
|
||||
points_to_check.append(above)
|
||||
|
||||
# check below
|
||||
if(cur_y < len(data) - 1):
|
||||
if(data[cur_y + 1][cur_x] < 9):
|
||||
below = tuple([cur_y + 1, cur_x])
|
||||
if(not (below in checked_points) and not (below in points_to_check)):
|
||||
points_to_check.append(below)
|
||||
|
||||
bin_sizes.append(len(checked_points))
|
||||
|
||||
bin_sizes.sort()
|
||||
|
||||
total = 1
|
||||
for i in range(len(bin_sizes) - 1, len(bin_sizes) - 4, -1):
|
||||
total *= bin_sizes[i]
|
||||
|
||||
print(total)
|
2238
2022/1/data.txt
Normal file
2238
2022/1/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
57
2022/1/main.cpp
Normal file
57
2022/1/main.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Couldn't open file." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool last_line_blank = false;
|
||||
|
||||
std::vector<long> numbers;
|
||||
long total = 0;
|
||||
long most = 0;
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
{
|
||||
if(!last_line_blank)
|
||||
{
|
||||
numbers.push_back(total);
|
||||
if(total > most)
|
||||
most = total;
|
||||
total = 0;
|
||||
}
|
||||
last_line_blank = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
last_line_blank = false;
|
||||
total += std::atoi(line.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Most: " << most << std::endl;
|
||||
|
||||
std::sort(numbers.begin(), numbers.end());
|
||||
|
||||
if(numbers.size())
|
||||
{
|
||||
int three = 3;
|
||||
long total_total = 0;
|
||||
for(int i = numbers.size() - 1; i >= 0; i--)
|
||||
{
|
||||
if(three-- > 0)
|
||||
total_total += numbers[i];
|
||||
}
|
||||
std::cout << "Top 3: " << total_total << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
38
2022/1/main.rs
Normal file
38
2022/1/main.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use std::fs;
|
||||
|
||||
fn main()
|
||||
{
|
||||
let contents = fs::read_to_string("data.txt")
|
||||
.expect("Could not find data.txt.");
|
||||
|
||||
let mut numbers = Vec::new();
|
||||
let mut total = 0;
|
||||
let mut max = 0;
|
||||
for line in contents.split('\n')
|
||||
{
|
||||
if line == ""
|
||||
{
|
||||
if total > max
|
||||
{
|
||||
max = total;
|
||||
}
|
||||
numbers.push(total);
|
||||
total = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
let i = line.parse::<i32>().unwrap();
|
||||
total += i;
|
||||
}
|
||||
}
|
||||
|
||||
println!("Max: {max}");
|
||||
|
||||
numbers.sort();
|
||||
let mut top_three = 0;
|
||||
for amt in &numbers[numbers.len() - 3..numbers.len()]
|
||||
{
|
||||
top_three += amt;
|
||||
}
|
||||
println!("Top Three: {top_three}");
|
||||
}
|
2
2022/10/Makefile
Normal file
2
2022/10/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
146
2022/10/data.txt
Normal file
146
2022/10/data.txt
Normal file
@@ -0,0 +1,146 @@
|
||||
addx 1
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 6
|
||||
addx -1
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 3
|
||||
addx 1
|
||||
addx 6
|
||||
addx -1
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
noop
|
||||
addx -39
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -8
|
||||
addx 13
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -31
|
||||
addx 36
|
||||
addx -2
|
||||
addx -36
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx 2
|
||||
addx -7
|
||||
addx 15
|
||||
addx -5
|
||||
addx 5
|
||||
addx 2
|
||||
addx 1
|
||||
addx 4
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx -13
|
||||
addx -16
|
||||
addx 2
|
||||
addx 35
|
||||
addx -40
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
addx 5
|
||||
addx 10
|
||||
addx -10
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
addx 16
|
||||
addx -9
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
addx 7
|
||||
addx -32
|
||||
addx 35
|
||||
addx -38
|
||||
addx 22
|
||||
addx 10
|
||||
addx -29
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx 2
|
||||
addx 2
|
||||
addx -12
|
||||
addx 13
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx -6
|
||||
addx 2
|
||||
addx 5
|
||||
addx -38
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
noop
|
||||
addx 4
|
||||
addx -2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
addx 4
|
||||
addx 4
|
||||
addx -14
|
||||
addx 16
|
||||
noop
|
||||
addx -13
|
||||
addx 18
|
||||
addx -1
|
||||
noop
|
||||
noop
|
||||
noop
|
146
2022/10/larger.txt
Normal file
146
2022/10/larger.txt
Normal file
@@ -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
|
154
2022/10/main.cpp
Normal file
154
2022/10/main.cpp
Normal file
@@ -0,0 +1,154 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum Command {
|
||||
NOOP = 1,
|
||||
ADDX,
|
||||
};
|
||||
|
||||
Command ParseCommand(const std::string &str) {
|
||||
if(str.size() < 4)
|
||||
return Command::NOOP;
|
||||
|
||||
std::string head = str.substr(0, 4);
|
||||
if(head == "noop")
|
||||
return Command::NOOP;
|
||||
else if(head == "addx")
|
||||
return Command::ADDX;
|
||||
|
||||
std::cerr << "Missing command type \"" << head << "\"." << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
void StepCycles(long &cycle, const Command &command, const long &x);
|
||||
void IncrementAndDraw(const long &x, long &cycle);
|
||||
long Report(const long &cycle, const long &x);
|
||||
void ApplyAction(const std::pair<Command, std::string> &command, long &x);
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<std::pair<Command, std::string> > commands;
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
auto cmd = ParseCommand(line);
|
||||
if(cmd == Command::NOOP)
|
||||
commands.push_back({cmd, ""});
|
||||
else
|
||||
commands.push_back({cmd, line.substr(5)});
|
||||
}
|
||||
|
||||
long cycle = 1;
|
||||
long x = 1;
|
||||
for(const auto &command : commands)
|
||||
{
|
||||
// Step 1: Increase cycle count of command to see if we would have reported
|
||||
StepCycles(cycle, command.first, x);
|
||||
|
||||
// Step 2: Report, if needed:
|
||||
total += Report(cycle, x);
|
||||
|
||||
// Step 3: Perform command action:
|
||||
ApplyAction(command, x);
|
||||
}
|
||||
|
||||
while(cycle <= 220)
|
||||
{
|
||||
StepCycles(cycle, Command::NOOP, x);
|
||||
total += Report(cycle, x);
|
||||
}
|
||||
|
||||
std::cout << "Ended on cycle #" << cycle << ", value of x: " << x << std::endl;
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void StepCycles(long &cycle, const Command &command, const long &x)
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case Command::NOOP:
|
||||
IncrementAndDraw(x, cycle);
|
||||
break;
|
||||
case Command::ADDX:
|
||||
for(auto i = 0; i < 2; ++i)
|
||||
IncrementAndDraw(x, cycle);
|
||||
break;
|
||||
default:
|
||||
std::cerr << "Missing ability to parse command type." << std::endl;
|
||||
exit(-1);
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
long Report(const long &cycle, const long &x)
|
||||
{
|
||||
static long last_reported_cycle = -20;
|
||||
auto next_cycle = last_reported_cycle + 40;
|
||||
if(cycle > next_cycle)
|
||||
{
|
||||
// std::cout << "Cycle #" << next_cycle << ": "
|
||||
// << next_cycle << " * " << x << " = "
|
||||
// << next_cycle * x << std::endl;
|
||||
last_reported_cycle += 40;
|
||||
|
||||
return next_cycle * x;
|
||||
}
|
||||
return 0; // no change
|
||||
}
|
||||
|
||||
void ApplyAction(const std::pair<Command, std::string> &command, long &x)
|
||||
{
|
||||
switch(command.first)
|
||||
{
|
||||
case Command::NOOP:
|
||||
// std::cout << "NOOP" << std::endl;
|
||||
// noop
|
||||
break;
|
||||
case Command::ADDX:
|
||||
// std::cout << "ADDX " << command.second << ": x goes from " << x << " to ";
|
||||
x += std::atoi(command.second.c_str());
|
||||
// std::cout << x << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cerr << "Missing ability to parse command type." << std::endl;
|
||||
exit(-1);
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void IncrementAndDraw(const long &x, long &cycle)
|
||||
{
|
||||
static int drawing_index = 1; // 1 to 40
|
||||
|
||||
// NOTE(dev): using -0 and +2 instead of -1 and +1 to account for 0-based vs 1-based
|
||||
if(drawing_index >= x - 0 && drawing_index <= x + 2) // within one or on target
|
||||
std::cout << "#";
|
||||
else
|
||||
std::cout << ".";
|
||||
|
||||
++cycle;
|
||||
if(++drawing_index > 40)
|
||||
{
|
||||
std::cout << std::endl;
|
||||
drawing_index = 1;
|
||||
}
|
||||
}
|
2
2022/11/Makefile
Normal file
2
2022/11/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
56
2022/11/data.txt
Normal file
56
2022/11/data.txt
Normal file
@@ -0,0 +1,56 @@
|
||||
Monkey 0:
|
||||
Starting items: 93, 98
|
||||
Operation: new = old * 17
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 95, 72, 98, 82, 86
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 85, 62, 82, 86, 70, 65, 83, 76
|
||||
Operation: new = old + 8
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 86, 70, 71, 56
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 77, 71, 86, 52, 81, 67
|
||||
Operation: new = old + 4
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 89, 87, 60, 78, 54, 77, 98
|
||||
Operation: new = old * 7
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 69, 65, 63
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 89
|
||||
Operation: new = old * old
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 2
|
||||
|
114
2022/11/main.cpp
Normal file
114
2022/11/main.cpp
Normal file
@@ -0,0 +1,114 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum Operation {
|
||||
ADD,
|
||||
MULTIPLY,
|
||||
};
|
||||
|
||||
class Monkey {
|
||||
public:
|
||||
Monkey(const std::vector<int> &starting_items, Operation operation_type, int operation_amount,
|
||||
int division_by, int true_monkey, int false_monkey)
|
||||
: items(starting_items), operation_type(operation_type), operation_amount(operation_amount),
|
||||
division_by(division_by), true_monkey(true_monkey), false_monkey(false_monkey)
|
||||
{
|
||||
}
|
||||
|
||||
friend std::ostream& operator<<(std::ostream &out, const Monkey &monkey);
|
||||
|
||||
private:
|
||||
std::vector<int> items;
|
||||
|
||||
Operation operation_type;
|
||||
int operation_amount;
|
||||
|
||||
int division_by;
|
||||
|
||||
int true_monkey;
|
||||
int false_monkey;
|
||||
};
|
||||
|
||||
std::vector<int> ParseItems(const std::string &line);
|
||||
std::pair<Operation, int> ParseOperation(const std::string &line);
|
||||
int ParseDivisibleBy(const std::string &line);
|
||||
int ParseTrue(const std::string &line);
|
||||
int ParseFalse(const std::string &line);
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<Monkey> monkeys;
|
||||
int line_num = 0;
|
||||
std::vector<std::string> buf;
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
{
|
||||
if(buf.size() == 5)
|
||||
{
|
||||
auto op = ParseOperation(buf[2]);
|
||||
monkeys.push_back(Monkey(//std::atoi(buf[0].substr(7, buf[0].size() - 7).c_str()),
|
||||
ParseItems(buf[1]),
|
||||
op.first,
|
||||
op.second,
|
||||
ParseDivisibleBy(buf[3]),
|
||||
ParseTrue(buf[4]),
|
||||
ParseFalse(buf[5])));
|
||||
buf.clear();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if(line.starts_with(" "))
|
||||
buf.push_back(line);
|
||||
}
|
||||
|
||||
for(const auto &monkey : monkeys)
|
||||
std::cout << monkey << std::endl;
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream &out, const Monkey &monkey)
|
||||
{
|
||||
out << " Starting items: ";
|
||||
for(auto item : monkey.items)
|
||||
out << item << ", ";
|
||||
return out;
|
||||
}
|
||||
|
||||
std::vector<int> ParseItems(const std::string &line)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
std::pair<Operation, int> ParseOperation(const std::string &line)
|
||||
{
|
||||
return { Operation::ADD, 0 };
|
||||
}
|
||||
int ParseDivisibleBy(const std::string &line)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
int ParseTrue(const std::string &line)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
int ParseFalse(const std::string &line)
|
||||
{
|
||||
return 1;
|
||||
}
|
2500
2022/2/data.txt
Normal file
2500
2022/2/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
127
2022/2/main.cpp
Normal file
127
2022/2/main.cpp
Normal file
@@ -0,0 +1,127 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
enum RPS {
|
||||
Rock = 1,
|
||||
Paper,
|
||||
Scissors,
|
||||
};
|
||||
|
||||
enum Result {
|
||||
Lose = 1,
|
||||
Draw,
|
||||
Win,
|
||||
};
|
||||
|
||||
RPS ToRPS(char c)
|
||||
{
|
||||
if(c == 'A' || c == 'X')
|
||||
return RPS::Rock;
|
||||
else if(c == 'B' || c == 'Y')
|
||||
return RPS::Paper;
|
||||
else if(c == 'C' || c == 'Z')
|
||||
return RPS::Scissors;
|
||||
|
||||
std::cerr << "BAD DATA '" << c << "'." << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int RPSScore(RPS rps)
|
||||
{
|
||||
switch(rps)
|
||||
{
|
||||
case RPS::Rock:
|
||||
return 1;
|
||||
case RPS::Paper:
|
||||
return 2;
|
||||
case RPS::Scissors:
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
bool Won(RPS us, RPS them)
|
||||
{
|
||||
if(us == RPS::Rock && them == RPS::Scissors)
|
||||
return true;
|
||||
else if(us == RPS::Paper && them == RPS::Rock)
|
||||
return true;
|
||||
else if(us == RPS::Scissors && them == RPS::Paper)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
RPS Which(RPS them, Result desired)
|
||||
{
|
||||
if(desired == Result::Draw)
|
||||
return them; // same
|
||||
|
||||
switch(them)
|
||||
{
|
||||
case RPS::Rock:
|
||||
if(desired == Result::Lose)
|
||||
return RPS::Scissors;
|
||||
return RPS::Paper;
|
||||
case RPS::Paper:
|
||||
if(desired == Result::Lose)
|
||||
return RPS::Rock;
|
||||
return RPS::Scissors;
|
||||
case RPS::Scissors:
|
||||
if(desired == Result::Lose)
|
||||
return RPS::Paper;
|
||||
return RPS::Rock;
|
||||
}
|
||||
}
|
||||
|
||||
int Points(RPS us, RPS them)
|
||||
{
|
||||
int rtn = 0;
|
||||
|
||||
// score our play:
|
||||
rtn += RPSScore(us);
|
||||
|
||||
// tie:
|
||||
if(us == them)
|
||||
return rtn + 3;
|
||||
// win:
|
||||
if(Won(us, them))
|
||||
return rtn + 6;
|
||||
// loss:
|
||||
return rtn;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long new_total = 0;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
char them = line[0];
|
||||
char us = line[2];
|
||||
|
||||
Result r = Result::Lose;
|
||||
if(us == 'Y')
|
||||
r = Result::Draw;
|
||||
else if(us == 'Z')
|
||||
r = Result::Win;
|
||||
|
||||
RPS todo = Which(ToRPS(them), r);
|
||||
|
||||
total += Points(ToRPS(us), ToRPS(them));
|
||||
new_total += Points(todo, ToRPS(them));
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "New Total: " << new_total << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
300
2022/3/data.txt
Normal file
300
2022/3/data.txt
Normal file
@@ -0,0 +1,300 @@
|
||||
vGFhvGvvSdfwqhqvmCPnlFPnCNPcCFcWcr
|
||||
ZbWZDMgsTHsrNNLJcJnsJl
|
||||
HbBWQgZVZZBzbgZphwjqpmmVfdGmjG
|
||||
vvCJLGnthChvtrvCCnRbTRqRPRBtbTRfPRRl
|
||||
djZSgHNNwjqcdWlbcbfc
|
||||
pFgMSfpMfzMDZFSgSjGJQQnCvMCVLnnJQLGC
|
||||
gVhQWQpcWZVwwHVvFvnnnnDFdL
|
||||
lzbPlztjltztzSjfGcPdTHLTHFCnnHCLndFGGd
|
||||
jsNbzbczclttSlfbqlljRQMJRMMpJwRZhspZgJRM
|
||||
hLJvfGcNDttSGvJtvSSJcqbqFBBWbjQqDrqbjDDjjb
|
||||
lTswlzZdssgFpdPwZpMQnCjngCCjWBQBWWQqng
|
||||
PRZMpzPZTdVZTfJvFvLFRctJcf
|
||||
JHbQtHVHHLLbTJmmZddgdgwhllMNhhhTgg
|
||||
spqpNGDjDPMhCFChMj
|
||||
DBSDDGnpSDsDWqWczcvSqWvsBtJJLLZrRVZLJRbBZNVrBHrV
|
||||
GwGhfhPhpHccvwSwrTsmsCjDmqTfbDqjss
|
||||
tQntQcNRJMFnnVQFFctJqCsRmsTjjbDqDlTqTbWT
|
||||
NZdVBZZNFzMFNNNvGprZcLGPGrrpcP
|
||||
SvCPLrrlCSvZLrCPPBNPRvNLQBbpmbdggQTTfpfQgpgTqbbb
|
||||
HVjHwMVwWtdMGwtwMwdhDFgbJgJqTmFMfFfmmfTTpq
|
||||
whtHVcjDtHWtsWdwVGVHthDPzRrNSsCRLrLRlZNzZSNzNR
|
||||
rjrlCCBtbtntwPPt
|
||||
FvfJHqBJQWWgWgWLwnMwMLbzvhwTTp
|
||||
WqHgWqBFgGfQgHfVdQFfVfrDllSsRSDmVmRCZZmSSSSZ
|
||||
gjnppCgGHNPrqqmFnnbr
|
||||
tGltVlJRtLRlrqcJcqZDqBJc
|
||||
VvhLlvWltWdVltRTLTfgwSjGNHhggQNQNjps
|
||||
HDWjCNfQjmwgWhcwPPVbZGcpMb
|
||||
sFltFBRRSRJBSSsBlSSnRLPZbVGMVPZpMpPZpcMrFZMc
|
||||
BLTBsstlqBRRBSvJJBsHdgdDNHCQHvbdCjQNNW
|
||||
lRGzWLZNFwJVbVVGcJ
|
||||
HqqpjPvHQnJgVgTnbdTV
|
||||
rVvjBQHQrQhCrzlzWrRlDZ
|
||||
jZjTZRSjZnhGZhzGnG
|
||||
HbnPHrCbBDMnhcrVLWWLLWWg
|
||||
MBwbCNDDptwNMttjdSnsqSRSFFdjtj
|
||||
bSfvcsNsDdccHHQm
|
||||
ljrlplvBhDHDHHHHJl
|
||||
jgpzhrzRrvhFRFrzFnWfZtTwSWZPbbqNbsTqsW
|
||||
vvCTvcDzHcgtvWjvcDcvgBCgwTdPFPpwpwmTSwwmdPwZpfZh
|
||||
rNLMNVqLGNrVsRNJNsPnGnnfnpSFGdfddndd
|
||||
VPQsMbVsPbzzvgCzgv
|
||||
wPsrqprHQQZsChZn
|
||||
cjgFLwWDlDltfLmTCnmWCnZZChCQ
|
||||
FccccSLGFwjVlfVLLtgdSPSpMpBMdMBRRdHdBp
|
||||
mQQcpmCCprrfLQqZVGqLGv
|
||||
PtsJdsMtTTTvFqLTnnqbGZ
|
||||
HjldthsHWztJzstZhBcHDDgpNpCpmrpgSD
|
||||
lCmhDljDJgWggcnh
|
||||
LdQrbdTDQGfGLPdqqFrHwRJcWRHgHBWHBJ
|
||||
sLqsGtDqdGQfSTsqtfqqVMzjCzlvllZljNpCsMMl
|
||||
CfLCZCCqqHlhSSrrtpRjpL
|
||||
mWQbnQZVTWwNdwmDSbpbrFptjDrjRj
|
||||
PJWVnTWPVnnclqqBsCCZHP
|
||||
tqvtbNCgqJSgZgZvSncrrcGjBGhcnVcR
|
||||
DswGQQQdRcjBnRDn
|
||||
sMdlFMQQpfZbvlNtZGgN
|
||||
RMlPllHtrlrlcZLsZfLcfwdDGD
|
||||
QppnQhTBgwQDJsGzLQ
|
||||
gTjnmjvphDSNMbtMbtMRHNVr
|
||||
RHHcChrVVChCWQmRnMZmnmbTbGmFnqTT
|
||||
gpzpfpszDwvDDNdwjdstnSMMHGMqvZnFTTZqbq
|
||||
DsDdpfppwHsgJdjzfdDjdssLPlRccPQQrJcchPQWWQRhlQcr
|
||||
rsrjQjnRnQZZqMmMMVqs
|
||||
WTSTdvJLvTGJTGCMGvzBBpVVqqFVzBzVmf
|
||||
tTSJhGLJbJhLJRRbHPQbnHHMrl
|
||||
GGgMgBJHWHhLWMhWhgfrhgWLzmsmlzTtzHmsmlszRtszRVlT
|
||||
bvScppfcQfcQSFCQpnPqwwTdRTvmzVssvswtddsv
|
||||
ZDpqnPbQbPPnQbFbfSPSqbQJhGrjgMZBhWLrLrBBBBJWhg
|
||||
hQCCGCNhDmGFJsTt
|
||||
fcggBBpvBSrtsRTpRmpD
|
||||
wflWlBlfnvfWWgMNPPLhPnzhPmLQ
|
||||
pcGGTvVpcQLLzSPPPpVBVQwngNqgsJqgJgqSngsJMqJg
|
||||
RZDFGhtCDGmWfWsNdwJhnMgwswqJ
|
||||
ZCGjRGjZllFGHvvcTPjPTQpB
|
||||
FDVsWrFZnnnfNRJdgBBBMLsJLH
|
||||
wcThcTphvCThwTlblpzwGlpLRgHJWLgHLBHdHWJLBLWR
|
||||
mwcbPmClwlzlwvvbTmWbQSjZmZSrDnSNVZfVFnZf
|
||||
tMlttlFRSrcSFcwQSRwSzrMMPPGGPGLWgNfTNTcLPNPGBPPG
|
||||
pbZVCDTqnCjVDHnHVnhBPBBbhBhbhgLgmWLh
|
||||
qZCJZJqqjjCVvvRQltlzTrJtMMMw
|
||||
QvvdBDdMbdFFJrMMjjmjCfCntC
|
||||
lHTPsNLPcfVZLnfj
|
||||
GgsWpHPpTPWpNsGvgdnDbQRQFRbdQg
|
||||
jPNwllsVZjhslSjwGShZMdJDmmdmWLtMDDPHMPFd
|
||||
QbvpDrbBrtMbbHJmcH
|
||||
vznvzBRpBprQBqQZjNswwZDnSlGjZl
|
||||
PdNTzLQPLrVMzGcMtt
|
||||
FsSvDrvmrwDggHGwgV
|
||||
vlpZpZmfnmFTlTWJWdbrdh
|
||||
mZmnggMTSJrrmnrbmTbngJMtwPvwzzRvPGhQdGZPGPLvGvRd
|
||||
FFVBNHVlFlDfCsWwLwPzzhGPCvzhQv
|
||||
qBHLsDcfqFfDDfsFLNcNNBFsrgpMpnJSbnmTnrtmbMSqnpnr
|
||||
qjBNwBPNPspqddssbsTsMDhTDrThQb
|
||||
gvzZSZzFbgHnrHmn
|
||||
fcvfZcRSZFGfZcvFbGttcPfpVjWVwqBqdwNdwNNpqV
|
||||
RrTmtTrqznrnRCSqJrWlWDbhWVnfVDVWdclV
|
||||
QBBgHQGvHHQswLHQQLGLHdLhfhlZZFlsscVDZfWfDhVlZZ
|
||||
dLBMPpGPjLHPHPBHjjgQjHQztSJRztmrNCSCmSpmprrrrz
|
||||
HHWJgjjsJrPBWBjgWgDvbbvtbNDNVtttMPPp
|
||||
SnLTlhhNSntRVVLFVbbb
|
||||
ChqdcNTNqqJCrQrQrrBC
|
||||
BvfLLngFLDrrlDFDDnGmGlmzqzdGqMMWWwWW
|
||||
RVsPbsbVZbjctccCcsCSPmdNqMqMWddwqVzhhNHwHd
|
||||
tcsjPZRctZTSbbtSbtsSjZznnJfJBrfJgLvJJDDBvpTrgp
|
||||
LJJsNdtJQtbWRJQttjGhjVnjcnzcsczGqj
|
||||
MDPPlvCwrTlZfMMvTlPTdVcVhVVjchSBrjccSnnq
|
||||
lgZCvTTZfMgHLptdRgmR
|
||||
gCDrJRNgJDZRCwMgqGbtVVjTjlFbbTtR
|
||||
mccnfcnSQScdvdcQQQpWdnWSjPqTbFFlbPqbPVGNjTPjtN
|
||||
NnzmpWmBBzzpzDgwhDghrZrw
|
||||
wcbVDBQwVBFQLFQDQcqQcLcJfpHJjmljGgMHfcfgGgjf
|
||||
PtnWMtSnlgJmWWmm
|
||||
nThPtRnzntstvrtRPqDFLMLdDwBBFLQDBT
|
||||
zshqnVqTwqHqZQgZDSZjpFjFFF
|
||||
PsBRvttdcgFFBSmc
|
||||
GlPsbLtrvrrrtJlCTnVTlwwfnhwVqH
|
||||
CvVVnFwWZnZwJZMNlCMNMpbMrrQG
|
||||
cpghqzqqtzbGMjTNclGN
|
||||
PqLBsgqBsSfBffShVmvRVwWsFpwZVpsn
|
||||
LzsLSScvscqNdGdgddQjCDbzhpCDbRbhDpDDwDwt
|
||||
ZlMBBBnlMFVFHVMJflJjJBfhRnCbCDpRttRPDCbWpCRbpW
|
||||
mlrFmJrmscNGmsjm
|
||||
FqQjLRjfvTFvlPHHNPMBDDNDPR
|
||||
chWptpcWTzBPMsMMMBHW
|
||||
zcJghwJZpZcgnctccdzzpGQrbQbblFFlTCCFTbdCFCFq
|
||||
QcwNpCcQzpwtCGPPPnrGrfHfvN
|
||||
FgjhhhjMVFVjqRRqDBVBqvMZvdrHnPZWZvsnZHdWnv
|
||||
ShBFhDVghhTBgBBFRRgRCmCPCcpPbwCmLTcCmbpb
|
||||
ZzlzsBzZnWnsBhFRvfvvLfWqfvMv
|
||||
GgQGjjddHHPwpHpTGjPdHMvtvwJqLtJRFlRFRqMwLc
|
||||
dgbbdjpGGgTHGGgQgdpmpgblrBrhrhCBSSznChsVhBsmNB
|
||||
PhSwPdnpsmSWWcjjDFNqnc
|
||||
GJGCTLbTZTrlfflVLFchHDHHDFcVVN
|
||||
RhlhrllQZhCsPvRBvMtSvw
|
||||
GVgnrgTWGVGjLVjWSpvvNmPTmpQmzvhf
|
||||
tBbBDsFtszzSSbPZbh
|
||||
BqlqdcqSJtFMdMjWrnGCWRrWGG
|
||||
sJVJsQhMhPPSQMwdHRmmsmmwRmsr
|
||||
zLFjLDTBFNWWwrqrffldlRdFRq
|
||||
BLjzjTpzLpzWGTbQpMJvVMQwQhhMQM
|
||||
RqSztDRhJDLmRMLlfvsP
|
||||
dMdMMHZCsnbdvmbP
|
||||
VHcZVVcZTwTQpgHQcgFMFBpDDzBqqqDhqJSjSjJjSD
|
||||
rdMnMGjdHhfnjqWWDJPpGWPtvW
|
||||
PTBSQSSzZSBSCzQFFSlZTFSvcZpWWcJvtJppvZpLLcDVcv
|
||||
sgQCsBmmlFCPFFzTgTBgdNnrNndnMrrrfbrNjf
|
||||
bpZdggTjHbgLglpHjldvHpjdhTVzmhzzzFPzmhFsFQSFnhhN
|
||||
rPCDBcCCMPGcWDNNWQzQQSNQnNzQ
|
||||
fCCJtDtGGGfGBtGqBrrcfRBcvPwpLgdZZvHdljvqpvdwbpvl
|
||||
qpmsNldnlHlCqQlHsHNHwJpJMtwvvvjMvfWjpDtt
|
||||
TccVBScrzBzzTGPbVTPQhWjfMjwwRtJtjMtWDWWfDS
|
||||
FQFbzBGczGBFLnFmmqsCLg
|
||||
qpblblvpvJzStJDrhrnGrdhDfFqf
|
||||
ggNQNwBgmTcgCBTBTQQjNfDCnZRRRrRGCnrFfdnhrC
|
||||
mjVFHQTHNjTwcmpzJzHltltbSssS
|
||||
WChWmdcmzndhFcZrrbvrVMVssj
|
||||
NQLDlDplpSJGpLfRRMZVBBGjVsGbbjbBZsGv
|
||||
QNDfNqlpLgSfNfNgNfpgpqwndwWwnCCnnTFMdHndzn
|
||||
ZGRPTngTZMSGMGnhSgRjQHsPbqjmsWHQCQWbNN
|
||||
BFLLfpzVDBfDdlfQcsbVcNmQsqqbcC
|
||||
zFvdplLDLtzFmrrwMMtTrShZ
|
||||
nTdmnVCGqTsSBTqv
|
||||
HlMPwMlHfPSfBBmFBfSL
|
||||
trHHwRHRwMHPMJQJHnDhbdRhdpCZmChNnd
|
||||
lwHWjzplvHqWHGsMLsLwLfgdfLdg
|
||||
tPJNPQmQmSGcTtFmctGmSCBgsBBRbLBRVdLVLCBBLgVf
|
||||
FPtTPQNPrPPQctTcNPSQJJPDjlzplnGDDjWWplWHhGvpnr
|
||||
jwvvDbvsRsrrjrfvfrrZsPpCpmPJJPqlqWmzRJRTqq
|
||||
HdLttdSQHdLHMMtNdLMSTtHpCmPplWhCzmzmPWlJhlNplP
|
||||
BTSLtLLQtnVZDnffbwfw
|
||||
snvQdrtrQprWpgmGLp
|
||||
FhzwlwHccBcljFBSDmHmLpgRmPDCffWL
|
||||
zFhllqjczzwJqqSqlZMsvJgVNMTbssVNnQbb
|
||||
dLZHrWjWPFZWZnPjZttjddFnMDVMGJMQqvMVGVRVpjVpGVvv
|
||||
zhzTwTlfTwCsShSgNhfzsQQqvMQStQMDGJJGvGQVvq
|
||||
TTwCBfsfBwhzwTBCzlmHZdLmBBbtLnLbFnnF
|
||||
BhBRLFmlBlmhgShHmhSlZlFgvbQNwvcsvMCcsQCwNQvNMsBw
|
||||
ttWddDjrfjDcssscDbvH
|
||||
jfjfPWdzdfjdnWpjtrzqnhmJGJFhSJRHSmSmlqlHmq
|
||||
QvJTgvsvghHRHHNbZvNZTRSzBBCLrDqzrfDDtJSqSLBC
|
||||
cPPwdcFFPDwfFrBrFfFfrC
|
||||
nppwdplpRvllsgDH
|
||||
BGLLWLLwHVZwHnNhwsMsrqMqhh
|
||||
STlTpDpmjzmjjjgccqdsbNbBhlNnNMhsqs
|
||||
pjmgjfSDSzmSgFzRZQfRRZLBVLVtZZ
|
||||
WHjddztMtVLNNFFTmbFPFPRw
|
||||
bJnvpQfqccQJZfpcbvCphcFGDPFGRwDGDDGwGsmPFnPF
|
||||
rvffQJZJqrpZCJZJQrQpvBvStlSWSzVSWBbzBLzjtjWWWj
|
||||
SJFMSMGSDLTsFgHvHL
|
||||
mNzRrRRzjzqqgPHvLTHjlvWg
|
||||
ZLbRpRnRnCrbmnmrRRNnwbGfMwDwfDDdSVMdVJdd
|
||||
nsqTbhcDssPsPWsnchPJMSTSMmJMwTSTCJJfJw
|
||||
DHvFvvdHpvpGFHDMVVJVplCCVpggCl
|
||||
RdQjtvHtDQNGsZqzcqPqbNcq
|
||||
GFzRjczzQJnLjJvvTj
|
||||
mSfHrNHDzHDrDSSSBvTZLTNqWJWBWLlv
|
||||
PfgCmfPzDVrtHsddVMsRFcVFQM
|
||||
sfBgfBfBsHBHFGhsqfjgQZtQQMdZgbZQptbM
|
||||
rNLRSzRTrrvvLSTWGpjpNZdQPtGtMdNM
|
||||
wvSWLwzTGTCcwwwJwvwcrcRcVfFBqhhVhDqhBllBfFqBCDCs
|
||||
LbTpDTcMTSzzMLhScnDnSppNQwVNZFBVnFsrwQQZrQrQrN
|
||||
tJtJCRlGWljGWCtjJZVPsJBsVwQmrQNN
|
||||
fvHRftqjGfWGwtfGqvLTzDTzzzchSbMDTd
|
||||
JJhWZlhqLDHtBDrqrB
|
||||
bwwmfrSmbmFjVSFQwSdpDvGdpPnRvDtHpGtGPG
|
||||
VgFfcSQfFgmLLrNThllTZc
|
||||
QmfvrpnvrrJGnBSCFTBMSWFS
|
||||
NVMggbVPzCTgDFDD
|
||||
NRqHRZjVRZdRVdZwNPrMrchGhGpcGfvhQlHJ
|
||||
nlBdCldndlZTttSSBBccPfGWLLHcTTcWPbbW
|
||||
jpsFzFmzDzNzDGChGcGGmPQHQf
|
||||
CNzqvvVJNFqvgRtlqRtdnwSZ
|
||||
MJtDbNHDDpmVPJVzzjLm
|
||||
RslhvlfRTWvWWRwfllSZngmggznjSPznLjmSnz
|
||||
TlhffRwWQhChDqbBQLFHqNrb
|
||||
HWnmSbzflWltlzLfWWDzjMBvCjjCTCgcMvzBBB
|
||||
qRRRZJwhZFGdRNfghVjMVVgfcghC
|
||||
QFFqwNNNwdNZZpqqZfnDSHmmlDLtWtHWlQmD
|
||||
JrFdNTTLRBTJrFVrBNdVLFBdlHbzQQsQzbPJtpbtltWsHbQw
|
||||
gZffDfMlCfjCSqMcpHPWHszstzHjQwpb
|
||||
GMnvfGlfvSqvcMMDgDDcfnqSVFRdmTmVdNBTdmRmBFVnLLBT
|
||||
ZvRHtDcZntLZssMssQBrMdnC
|
||||
jglqlVdlbqgVWjJMbrrBCpmQBBfrpm
|
||||
GqVVPPjPNjFVllNjJjFDvzTLZRvcLRLvTGdGDv
|
||||
fDVzvVfzzZPMsMbb
|
||||
LHtBwLBdhFgdHLLthRwFGGMsmrHMmmbZSmqbMGGG
|
||||
bblRwbTRlllfVQnCQn
|
||||
fVZzjRzpzpVCRPZhVWQvvLsWWWFQlmjWmG
|
||||
JDHgJdtwbZqJqsWBBDLlQlvLms
|
||||
cHHtdbqwrqbbtSbTgSTcVCMRZnRRVNhVPNMPpfMc
|
||||
fCMPBBdpMpsqMssQccnV
|
||||
TlwGWDjDZHLjZHHlLGmnlnNcRllsJcqtsJRV
|
||||
ZHhZHThLLrGwjDDjLwGWWWSjPpbpzrvBFBFdBBbqvCbpFfpg
|
||||
bvDfDPtCVfFFVdWWpmLRmzWzzdBW
|
||||
jgZTghhjrGrsswrsghHrlgTGzSRmMLwpJMSMzWLLWRzpRRSc
|
||||
lpjTpGHlpsNGTHllHrCFnDNPtVnvfQtQtQNP
|
||||
BwlQcwZBwwwQNqJTrrsRGCDTNt
|
||||
bMpVPSfRvCbCtTqsCs
|
||||
dPSRfRpPPjjmLMgZBZBLZZwFQnZn
|
||||
TsVfggTqVnsLVTdTpmDdRhwPRtPRDRwD
|
||||
ljHBSWZvvFWvBFPppnQPwnpmzR
|
||||
MSHSjbBclBSjccLJgqgnLVqTbsTT
|
||||
zncfVgRzVJgnTfVqNHvZJZNJNMpHbdvH
|
||||
PCBpsLjPPmMGdHNdHBHZ
|
||||
jSLlrhLPDWLrPrDCLPCfnpzcVRFcRTnlVncntT
|
||||
ccvSgjHtRjcjSvjvSrBjzSHHwnJPbgwPPZVVVZnPpZlpwnlT
|
||||
ffqNqGGsGWqLTNqZwdndPnnJJpZVJW
|
||||
sNmqhsCMQsMTmjrcmrHrRj
|
||||
gWWWzNVJDwDzVWVDGbGNnhTnHLsmhmhfsQTNSmHd
|
||||
vtMPZvrZvqtqBHljrqSnnmTfLfdnQsjhjmhL
|
||||
MMPZPBqZCrBtvZcrBlDbGbbbzHJCbbRwgwDz
|
||||
hGSRhsMswhcNNGwhwncMnCqCJNrHJPJJrJtCJdqHJm
|
||||
BgVTzWBdTfCmfCJH
|
||||
dlbVFvvWVZhSRQDMnlhc
|
||||
WfpzBZmgJlQVGvWF
|
||||
wHSbrHwmccnrmrHsClGqFGbQjQjjQJQQGv
|
||||
SHPwwsRcrrNtrNSsphmZLzpfzhghZPdD
|
||||
DFDPRpmgbPQtmgBBQDDNJTMMBZsqsZGqGZTGCGSqWG
|
||||
fVvVVLcJVzlvzhqfSTCsZsMGMHqq
|
||||
zJdrrdnzcLlwczwbQmQngRDQPbtDpQ
|
||||
HDZZrpFqwRrQfBqhjjlVlQ
|
||||
czTgvvWPNgPGcTlsQflCVshClC
|
||||
PgNvtSJNvGVMMzNzgGvPGGLHFDdFdmZSZRdDdRrmpFwL
|
||||
SVHNVFVPBHJqHhgFCgzLmCwppm
|
||||
DvDdsGZljDlfdZnjnnZGMzLpRgLfMCLmzfPLhmgp
|
||||
jZDZlrvrZTrTrTQrDsjslHNJqtWbWHbqbPBWNVQWBJ
|
||||
NmGGBdWWJDJTTZHm
|
||||
hFVhcqFjncpcppSjqfppqDvzDDDbbDZvDZZbHfJgvJ
|
||||
jrPqnnHnqSPwPGWPdWst
|
||||
BfhbwMwbbPbHPPPlrdJjrlMJLrJVTd
|
||||
pnQnGnWDjnJdlJCh
|
||||
qshsWvpttzNNQDtzRRPvwfcPHBBBHwbw
|
||||
SHzGRQjhwwhGzjjwRjfBqpqbNCqNnnqqQqPlQC
|
||||
TZtgLmZgVmgdFgmZtdrbNqnqlNlpblnlrnBd
|
||||
DvgmvvZgmWJJjwHHhJSzps
|
||||
JjlrlJjPJgDjJjJnDRDjNwGGqMvSddvPvwQddqSVvq
|
||||
SLpphFLhFZhWLzvswwWqsqVVQWdv
|
||||
FSHtTLZpfzRDDrJgRNjT
|
||||
wjCMvrMlqqWHvWqddrHqgnBNhcffthhVLtpgLBnw
|
||||
GbQFZzZZphnpgNZV
|
||||
FhFzRTDRPzsRQGQGTFlllrJHjdsJlHMqjjHr
|
||||
LqDcTbmJcqSJSTmnrTcmJrfffplfjZsGZfGGZfQLdplj
|
||||
hWddgBvzWFZfPsQlGh
|
||||
RBWBRCdHtgHttVVzHBVNNNDwSTDcSSSbScDDwbwbnmRS
|
||||
FFPzwlZVVrzFFlFLVlllZdHCHPQMnJQQbhhChdhCbb
|
||||
BRRqGBgRfqvgvBDDDTRgghNCMMTQNNbVJMNJJdbbdT
|
||||
DfpgjGfsRWrFVzwLcs
|
||||
PMTSdSmFjhFpNTqvppvRBrRBrDqB
|
||||
HnZZznJbzGZGlZtZWHlJGcGcwMvQBsrwRDQvcDgrgDgrqRvq
|
||||
HGlGfnJZfMMCfNhm
|
||||
nRssqlqVRppVwdMMQwFgtRFz
|
||||
smTvLLTvvNLtwMMQNg
|
||||
CmPGBvZGWvBSGGDmTZjZlhpJcpHDJsbDnlrrprpl
|
||||
djcQGNQqdGdGqMCgndwgCLDMgW
|
||||
nvBvHpBppnvPPnJTBWLJVMwVfWJfCbfWgW
|
||||
hsHHpBsvRTHpsPszTBTTsRTslGqGqlcqlScnqmhZmmZSZSjl
|
||||
DddBHCmfWCBTDBHTHfMpzhzpJJMJsFrGrz
|
||||
tPVPmbnttjPnZvSvSbnmZPZPNpNGMpJNzzNrGJpvhsshMpFs
|
||||
mwnZcbmmStbVtVjbZVlcLTBlcLCRHRDWCWWW
|
81
2022/3/main.cpp
Normal file
81
2022/3/main.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int score(char c)
|
||||
{
|
||||
if(c >= 'a' && c <= 'z')
|
||||
return (c - 'a') + 1;
|
||||
return (c - 'A') + 1 + 26;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
const size_t half = line.size() / 2;
|
||||
std::string right = line.substr(half);
|
||||
for(int i = 0; i < half; ++i)
|
||||
{
|
||||
if(right.contains(line[i]))
|
||||
{
|
||||
total += score(line[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Part 2:
|
||||
static std::vector<std::string> lines;
|
||||
lines.push_back(line);
|
||||
if(lines.size() == 3)
|
||||
{
|
||||
// get all letters it could be from first line
|
||||
std::set<char> options;
|
||||
for(const char c : lines[0])
|
||||
options.insert(c);
|
||||
|
||||
// remove if not a duplicate
|
||||
std::set<char> to_remove;
|
||||
for(auto i = 1; i < 3; ++i) // remaining two lines
|
||||
{
|
||||
for(const char c : options)
|
||||
if(!lines[i].contains(c))
|
||||
to_remove.insert(c);
|
||||
for(const char c : to_remove)
|
||||
options.erase(c);
|
||||
}
|
||||
|
||||
if(options.size() != 1)
|
||||
{
|
||||
std::cerr << "Error: More than one remaining option: ";
|
||||
for(const char c : options)
|
||||
std::cout << c << ",";
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
total_pt2 += score(*(options.begin()));
|
||||
|
||||
lines.clear(); // reset
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2022/4/Makefile
Normal file
2
2022/4/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
1000
2022/4/data.txt
Normal file
1000
2022/4/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
79
2022/4/main.cpp
Normal file
79
2022/4/main.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
std::vector<std::string> SplitStr(std::string str, const std::string &delim)
|
||||
{
|
||||
std::vector<std::string> rtn;
|
||||
|
||||
for(auto split = str.find(delim); split != std::string::npos; split = str.find(delim))
|
||||
{
|
||||
rtn.push_back(str.substr(0, split));
|
||||
str = str.substr(split + delim.size()); // chop off beginning
|
||||
}
|
||||
if(str.size())
|
||||
rtn.push_back(str);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
auto sections = SplitStr(line, ",");
|
||||
if(sections.size() != 2)
|
||||
{
|
||||
std::cerr << "Incorrect amount of data for line: " << line << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
auto elf_a = SplitStr(sections[0], "-");
|
||||
auto elf_b = SplitStr(sections[1], "-");
|
||||
|
||||
if(elf_a.size() != 2 || elf_b.size() != 2)
|
||||
{
|
||||
std::cerr << "Incorrect amount of data for line: " << line << std::endl;
|
||||
exit(-2);
|
||||
}
|
||||
|
||||
int elf_a_min = std::atoi(elf_a[0].c_str());
|
||||
int elf_a_max = std::atoi(elf_a[1].c_str());
|
||||
int elf_b_min = std::atoi(elf_b[0].c_str());
|
||||
int elf_b_max = std::atoi(elf_b[1].c_str());
|
||||
|
||||
if((elf_a_min <= elf_b_min && elf_a_max >= elf_b_max) ||
|
||||
(elf_b_min <= elf_a_min && elf_b_max >= elf_a_max))
|
||||
++total;
|
||||
|
||||
// sort
|
||||
if(elf_a_min > elf_b_min)
|
||||
{
|
||||
std::swap(elf_a_min, elf_b_min);
|
||||
std::swap(elf_a_max, elf_b_max);
|
||||
}
|
||||
|
||||
if(elf_b_min <= elf_a_max)
|
||||
++total_pt2;
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
1
2022/5/Makefile
Symbolic link
1
2022/5/Makefile
Symbolic link
@@ -0,0 +1 @@
|
||||
../4/Makefile
|
512
2022/5/data.txt
Normal file
512
2022/5/data.txt
Normal file
@@ -0,0 +1,512 @@
|
||||
[B] [L] [J]
|
||||
[B] [Q] [R] [D] [T]
|
||||
[G] [H] [H] [M] [N] [F]
|
||||
[J] [N] [D] [F] [J] [H] [B]
|
||||
[Q] [F] [W] [S] [V] [N] [F] [N]
|
||||
[W] [N] [H] [M] [L] [B] [R] [T] [Q]
|
||||
[L] [T] [C] [R] [R] [J] [W] [Z] [L]
|
||||
[S] [J] [S] [T] [T] [M] [D] [B] [H]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 5 from 4 to 5
|
||||
move 2 from 5 to 8
|
||||
move 2 from 9 to 1
|
||||
move 2 from 9 to 1
|
||||
move 1 from 5 to 3
|
||||
move 10 from 5 to 8
|
||||
move 1 from 4 to 7
|
||||
move 1 from 1 to 2
|
||||
move 5 from 3 to 7
|
||||
move 1 from 2 to 8
|
||||
move 21 from 8 to 5
|
||||
move 13 from 5 to 7
|
||||
move 2 from 9 to 4
|
||||
move 1 from 7 to 4
|
||||
move 5 from 1 to 4
|
||||
move 1 from 5 to 7
|
||||
move 2 from 2 to 7
|
||||
move 1 from 3 to 2
|
||||
move 1 from 1 to 6
|
||||
move 7 from 5 to 9
|
||||
move 16 from 7 to 4
|
||||
move 7 from 9 to 3
|
||||
move 1 from 7 to 5
|
||||
move 1 from 3 to 8
|
||||
move 3 from 2 to 7
|
||||
move 1 from 8 to 9
|
||||
move 3 from 3 to 6
|
||||
move 21 from 4 to 9
|
||||
move 1 from 5 to 7
|
||||
move 4 from 4 to 9
|
||||
move 8 from 6 to 3
|
||||
move 6 from 7 to 1
|
||||
move 12 from 9 to 8
|
||||
move 6 from 7 to 2
|
||||
move 3 from 6 to 5
|
||||
move 1 from 6 to 9
|
||||
move 4 from 8 to 6
|
||||
move 3 from 8 to 5
|
||||
move 4 from 1 to 8
|
||||
move 4 from 6 to 1
|
||||
move 2 from 1 to 3
|
||||
move 1 from 5 to 8
|
||||
move 2 from 2 to 8
|
||||
move 5 from 8 to 3
|
||||
move 4 from 2 to 7
|
||||
move 5 from 8 to 1
|
||||
move 2 from 1 to 7
|
||||
move 1 from 8 to 2
|
||||
move 2 from 1 to 7
|
||||
move 11 from 9 to 2
|
||||
move 1 from 8 to 5
|
||||
move 2 from 9 to 4
|
||||
move 3 from 9 to 5
|
||||
move 2 from 5 to 1
|
||||
move 6 from 5 to 8
|
||||
move 2 from 4 to 2
|
||||
move 1 from 5 to 6
|
||||
move 7 from 1 to 8
|
||||
move 2 from 2 to 7
|
||||
move 13 from 8 to 1
|
||||
move 16 from 3 to 1
|
||||
move 3 from 2 to 1
|
||||
move 12 from 7 to 6
|
||||
move 15 from 1 to 8
|
||||
move 2 from 3 to 8
|
||||
move 16 from 1 to 2
|
||||
move 24 from 2 to 8
|
||||
move 1 from 1 to 5
|
||||
move 1 from 5 to 8
|
||||
move 3 from 6 to 7
|
||||
move 26 from 8 to 3
|
||||
move 20 from 3 to 9
|
||||
move 1 from 2 to 9
|
||||
move 16 from 9 to 3
|
||||
move 14 from 3 to 1
|
||||
move 13 from 1 to 6
|
||||
move 3 from 3 to 4
|
||||
move 3 from 9 to 4
|
||||
move 1 from 7 to 8
|
||||
move 5 from 8 to 2
|
||||
move 8 from 8 to 5
|
||||
move 18 from 6 to 1
|
||||
move 4 from 8 to 5
|
||||
move 6 from 4 to 1
|
||||
move 2 from 2 to 5
|
||||
move 5 from 3 to 8
|
||||
move 5 from 8 to 7
|
||||
move 2 from 5 to 8
|
||||
move 5 from 5 to 4
|
||||
move 3 from 2 to 8
|
||||
move 22 from 1 to 2
|
||||
move 1 from 1 to 2
|
||||
move 5 from 8 to 2
|
||||
move 2 from 5 to 2
|
||||
move 1 from 1 to 6
|
||||
move 5 from 5 to 2
|
||||
move 1 from 9 to 8
|
||||
move 5 from 4 to 1
|
||||
move 6 from 6 to 9
|
||||
move 3 from 1 to 9
|
||||
move 1 from 1 to 7
|
||||
move 8 from 9 to 6
|
||||
move 6 from 7 to 1
|
||||
move 5 from 6 to 5
|
||||
move 27 from 2 to 1
|
||||
move 4 from 5 to 7
|
||||
move 9 from 1 to 5
|
||||
move 1 from 9 to 1
|
||||
move 3 from 6 to 2
|
||||
move 9 from 2 to 1
|
||||
move 2 from 7 to 2
|
||||
move 1 from 8 to 7
|
||||
move 10 from 5 to 9
|
||||
move 1 from 9 to 7
|
||||
move 25 from 1 to 8
|
||||
move 6 from 7 to 4
|
||||
move 11 from 1 to 7
|
||||
move 3 from 8 to 1
|
||||
move 3 from 2 to 6
|
||||
move 3 from 8 to 9
|
||||
move 11 from 8 to 6
|
||||
move 1 from 2 to 6
|
||||
move 12 from 6 to 4
|
||||
move 13 from 4 to 5
|
||||
move 1 from 6 to 1
|
||||
move 3 from 7 to 5
|
||||
move 5 from 8 to 7
|
||||
move 1 from 7 to 1
|
||||
move 5 from 1 to 6
|
||||
move 3 from 6 to 4
|
||||
move 3 from 8 to 6
|
||||
move 2 from 5 to 2
|
||||
move 12 from 5 to 9
|
||||
move 5 from 6 to 2
|
||||
move 2 from 5 to 9
|
||||
move 6 from 4 to 9
|
||||
move 11 from 7 to 3
|
||||
move 1 from 2 to 5
|
||||
move 1 from 7 to 8
|
||||
move 1 from 5 to 7
|
||||
move 1 from 7 to 1
|
||||
move 1 from 8 to 1
|
||||
move 2 from 4 to 7
|
||||
move 2 from 6 to 8
|
||||
move 5 from 3 to 6
|
||||
move 2 from 7 to 2
|
||||
move 2 from 2 to 9
|
||||
move 1 from 2 to 9
|
||||
move 1 from 1 to 6
|
||||
move 35 from 9 to 7
|
||||
move 2 from 8 to 7
|
||||
move 3 from 3 to 8
|
||||
move 5 from 2 to 4
|
||||
move 3 from 3 to 7
|
||||
move 2 from 4 to 7
|
||||
move 4 from 6 to 5
|
||||
move 4 from 5 to 9
|
||||
move 3 from 4 to 5
|
||||
move 1 from 8 to 3
|
||||
move 4 from 9 to 8
|
||||
move 1 from 9 to 6
|
||||
move 38 from 7 to 2
|
||||
move 1 from 3 to 5
|
||||
move 1 from 1 to 7
|
||||
move 4 from 7 to 3
|
||||
move 3 from 6 to 1
|
||||
move 22 from 2 to 7
|
||||
move 1 from 5 to 8
|
||||
move 7 from 8 to 4
|
||||
move 8 from 2 to 8
|
||||
move 3 from 5 to 1
|
||||
move 4 from 3 to 9
|
||||
move 1 from 8 to 3
|
||||
move 1 from 3 to 7
|
||||
move 2 from 2 to 3
|
||||
move 5 from 8 to 9
|
||||
move 3 from 9 to 1
|
||||
move 2 from 1 to 7
|
||||
move 6 from 2 to 3
|
||||
move 6 from 3 to 1
|
||||
move 2 from 3 to 6
|
||||
move 1 from 6 to 1
|
||||
move 14 from 7 to 2
|
||||
move 4 from 1 to 6
|
||||
move 8 from 1 to 3
|
||||
move 4 from 3 to 6
|
||||
move 3 from 9 to 5
|
||||
move 1 from 8 to 6
|
||||
move 1 from 8 to 4
|
||||
move 9 from 7 to 1
|
||||
move 8 from 2 to 4
|
||||
move 4 from 2 to 9
|
||||
move 2 from 2 to 1
|
||||
move 3 from 5 to 8
|
||||
move 1 from 8 to 6
|
||||
move 1 from 7 to 8
|
||||
move 1 from 6 to 5
|
||||
move 3 from 9 to 5
|
||||
move 2 from 9 to 5
|
||||
move 4 from 3 to 9
|
||||
move 3 from 6 to 3
|
||||
move 3 from 6 to 9
|
||||
move 9 from 4 to 1
|
||||
move 1 from 9 to 8
|
||||
move 3 from 3 to 6
|
||||
move 2 from 7 to 4
|
||||
move 4 from 8 to 5
|
||||
move 7 from 5 to 6
|
||||
move 19 from 1 to 9
|
||||
move 5 from 9 to 3
|
||||
move 2 from 1 to 6
|
||||
move 1 from 4 to 6
|
||||
move 4 from 3 to 2
|
||||
move 21 from 9 to 7
|
||||
move 1 from 1 to 2
|
||||
move 1 from 9 to 1
|
||||
move 1 from 1 to 8
|
||||
move 16 from 7 to 6
|
||||
move 24 from 6 to 5
|
||||
move 7 from 4 to 5
|
||||
move 1 from 8 to 3
|
||||
move 2 from 2 to 8
|
||||
move 31 from 5 to 8
|
||||
move 1 from 4 to 6
|
||||
move 2 from 6 to 9
|
||||
move 1 from 7 to 4
|
||||
move 3 from 7 to 9
|
||||
move 1 from 4 to 8
|
||||
move 2 from 3 to 5
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 7
|
||||
move 1 from 7 to 9
|
||||
move 24 from 8 to 6
|
||||
move 1 from 8 to 1
|
||||
move 30 from 6 to 1
|
||||
move 2 from 5 to 2
|
||||
move 1 from 6 to 9
|
||||
move 6 from 9 to 7
|
||||
move 1 from 6 to 4
|
||||
move 1 from 4 to 6
|
||||
move 23 from 1 to 3
|
||||
move 21 from 3 to 4
|
||||
move 4 from 2 to 6
|
||||
move 3 from 6 to 1
|
||||
move 1 from 5 to 1
|
||||
move 4 from 1 to 9
|
||||
move 3 from 9 to 6
|
||||
move 8 from 1 to 6
|
||||
move 4 from 8 to 5
|
||||
move 2 from 7 to 5
|
||||
move 7 from 4 to 3
|
||||
move 3 from 4 to 9
|
||||
move 9 from 3 to 9
|
||||
move 1 from 7 to 6
|
||||
move 6 from 5 to 8
|
||||
move 14 from 6 to 2
|
||||
move 4 from 8 to 4
|
||||
move 7 from 4 to 5
|
||||
move 1 from 7 to 9
|
||||
move 6 from 4 to 3
|
||||
move 13 from 2 to 6
|
||||
move 5 from 3 to 7
|
||||
move 1 from 3 to 8
|
||||
move 1 from 8 to 2
|
||||
move 4 from 8 to 3
|
||||
move 6 from 6 to 4
|
||||
move 2 from 2 to 8
|
||||
move 5 from 4 to 7
|
||||
move 3 from 7 to 5
|
||||
move 1 from 7 to 9
|
||||
move 2 from 3 to 9
|
||||
move 3 from 7 to 3
|
||||
move 1 from 7 to 9
|
||||
move 1 from 7 to 9
|
||||
move 3 from 4 to 1
|
||||
move 6 from 6 to 1
|
||||
move 2 from 7 to 5
|
||||
move 1 from 3 to 5
|
||||
move 11 from 9 to 4
|
||||
move 9 from 4 to 5
|
||||
move 3 from 3 to 4
|
||||
move 1 from 3 to 9
|
||||
move 2 from 8 to 1
|
||||
move 9 from 1 to 8
|
||||
move 22 from 5 to 8
|
||||
move 2 from 1 to 3
|
||||
move 3 from 4 to 6
|
||||
move 14 from 8 to 9
|
||||
move 1 from 3 to 9
|
||||
move 19 from 9 to 3
|
||||
move 3 from 9 to 4
|
||||
move 2 from 7 to 2
|
||||
move 1 from 4 to 6
|
||||
move 1 from 3 to 8
|
||||
move 8 from 3 to 1
|
||||
move 2 from 9 to 6
|
||||
move 1 from 2 to 5
|
||||
move 3 from 4 to 9
|
||||
move 1 from 2 to 3
|
||||
move 20 from 8 to 3
|
||||
move 4 from 9 to 5
|
||||
move 1 from 4 to 2
|
||||
move 26 from 3 to 5
|
||||
move 1 from 8 to 3
|
||||
move 8 from 1 to 4
|
||||
move 1 from 3 to 7
|
||||
move 1 from 2 to 1
|
||||
move 1 from 1 to 6
|
||||
move 1 from 6 to 7
|
||||
move 4 from 5 to 3
|
||||
move 3 from 4 to 2
|
||||
move 5 from 5 to 3
|
||||
move 2 from 2 to 6
|
||||
move 3 from 3 to 5
|
||||
move 2 from 4 to 8
|
||||
move 5 from 3 to 9
|
||||
move 5 from 9 to 8
|
||||
move 19 from 5 to 9
|
||||
move 1 from 5 to 2
|
||||
move 2 from 7 to 1
|
||||
move 1 from 1 to 7
|
||||
move 1 from 7 to 4
|
||||
move 13 from 9 to 3
|
||||
move 8 from 6 to 2
|
||||
move 10 from 3 to 5
|
||||
move 14 from 5 to 4
|
||||
move 7 from 8 to 4
|
||||
move 1 from 6 to 2
|
||||
move 6 from 3 to 8
|
||||
move 4 from 9 to 7
|
||||
move 2 from 9 to 8
|
||||
move 1 from 7 to 1
|
||||
move 3 from 2 to 7
|
||||
move 1 from 5 to 3
|
||||
move 7 from 8 to 6
|
||||
move 5 from 6 to 2
|
||||
move 8 from 4 to 5
|
||||
move 3 from 5 to 8
|
||||
move 3 from 8 to 6
|
||||
move 5 from 7 to 9
|
||||
move 5 from 3 to 6
|
||||
move 1 from 9 to 4
|
||||
move 17 from 4 to 7
|
||||
move 1 from 8 to 1
|
||||
move 12 from 7 to 8
|
||||
move 3 from 1 to 4
|
||||
move 2 from 4 to 6
|
||||
move 8 from 6 to 1
|
||||
move 4 from 6 to 3
|
||||
move 1 from 7 to 8
|
||||
move 5 from 5 to 8
|
||||
move 4 from 7 to 1
|
||||
move 3 from 2 to 6
|
||||
move 2 from 5 to 1
|
||||
move 6 from 1 to 6
|
||||
move 4 from 3 to 5
|
||||
move 4 from 5 to 3
|
||||
move 1 from 4 to 8
|
||||
move 3 from 3 to 2
|
||||
move 17 from 8 to 4
|
||||
move 6 from 6 to 3
|
||||
move 14 from 4 to 9
|
||||
move 1 from 3 to 8
|
||||
move 1 from 7 to 4
|
||||
move 3 from 8 to 3
|
||||
move 5 from 2 to 5
|
||||
move 6 from 1 to 7
|
||||
move 2 from 6 to 4
|
||||
move 4 from 5 to 7
|
||||
move 1 from 1 to 5
|
||||
move 1 from 6 to 3
|
||||
move 10 from 7 to 4
|
||||
move 1 from 5 to 4
|
||||
move 1 from 2 to 3
|
||||
move 15 from 4 to 5
|
||||
move 3 from 3 to 1
|
||||
move 6 from 2 to 6
|
||||
move 1 from 2 to 3
|
||||
move 2 from 4 to 7
|
||||
move 2 from 7 to 8
|
||||
move 1 from 4 to 2
|
||||
move 2 from 1 to 7
|
||||
move 1 from 7 to 2
|
||||
move 12 from 9 to 1
|
||||
move 4 from 9 to 5
|
||||
move 4 from 6 to 2
|
||||
move 1 from 7 to 3
|
||||
move 6 from 2 to 4
|
||||
move 1 from 8 to 5
|
||||
move 2 from 4 to 2
|
||||
move 11 from 1 to 7
|
||||
move 3 from 1 to 4
|
||||
move 17 from 5 to 6
|
||||
move 15 from 6 to 4
|
||||
move 1 from 8 to 9
|
||||
move 10 from 4 to 1
|
||||
move 1 from 3 to 9
|
||||
move 2 from 6 to 5
|
||||
move 1 from 2 to 6
|
||||
move 4 from 5 to 6
|
||||
move 4 from 1 to 2
|
||||
move 6 from 6 to 7
|
||||
move 2 from 2 to 6
|
||||
move 9 from 4 to 9
|
||||
move 6 from 1 to 2
|
||||
move 3 from 4 to 1
|
||||
move 10 from 9 to 8
|
||||
move 4 from 2 to 1
|
||||
move 1 from 1 to 2
|
||||
move 5 from 8 to 6
|
||||
move 1 from 2 to 7
|
||||
move 1 from 9 to 4
|
||||
move 2 from 6 to 9
|
||||
move 13 from 7 to 2
|
||||
move 5 from 7 to 5
|
||||
move 2 from 5 to 2
|
||||
move 1 from 4 to 5
|
||||
move 4 from 8 to 4
|
||||
move 17 from 2 to 6
|
||||
move 3 from 4 to 6
|
||||
move 2 from 9 to 1
|
||||
move 7 from 6 to 8
|
||||
move 1 from 5 to 2
|
||||
move 1 from 4 to 1
|
||||
move 2 from 9 to 4
|
||||
move 1 from 3 to 9
|
||||
move 4 from 3 to 7
|
||||
move 2 from 8 to 5
|
||||
move 3 from 7 to 5
|
||||
move 10 from 5 to 8
|
||||
move 2 from 2 to 4
|
||||
move 6 from 1 to 2
|
||||
move 4 from 6 to 3
|
||||
move 8 from 2 to 6
|
||||
move 1 from 7 to 4
|
||||
move 5 from 4 to 5
|
||||
move 7 from 6 to 7
|
||||
move 5 from 3 to 5
|
||||
move 5 from 5 to 2
|
||||
move 4 from 8 to 1
|
||||
move 6 from 1 to 6
|
||||
move 3 from 3 to 2
|
||||
move 22 from 6 to 2
|
||||
move 1 from 9 to 7
|
||||
move 8 from 8 to 6
|
||||
move 1 from 7 to 6
|
||||
move 2 from 5 to 7
|
||||
move 4 from 8 to 5
|
||||
move 7 from 6 to 7
|
||||
move 2 from 6 to 4
|
||||
move 14 from 2 to 1
|
||||
move 7 from 1 to 3
|
||||
move 12 from 7 to 3
|
||||
move 1 from 4 to 3
|
||||
move 2 from 5 to 8
|
||||
move 2 from 8 to 1
|
||||
move 1 from 4 to 3
|
||||
move 6 from 2 to 9
|
||||
move 6 from 9 to 2
|
||||
move 2 from 2 to 7
|
||||
move 6 from 7 to 5
|
||||
move 13 from 3 to 5
|
||||
move 5 from 2 to 6
|
||||
move 5 from 6 to 1
|
||||
move 2 from 3 to 6
|
||||
move 1 from 6 to 5
|
||||
move 1 from 6 to 1
|
||||
move 3 from 1 to 9
|
||||
move 6 from 2 to 7
|
||||
move 1 from 2 to 3
|
||||
move 24 from 5 to 2
|
||||
move 7 from 3 to 7
|
||||
move 13 from 7 to 9
|
||||
move 4 from 1 to 9
|
||||
move 4 from 1 to 6
|
||||
move 1 from 5 to 6
|
||||
move 16 from 9 to 5
|
||||
move 1 from 6 to 4
|
||||
move 1 from 5 to 2
|
||||
move 5 from 1 to 3
|
||||
move 11 from 2 to 1
|
||||
move 4 from 9 to 6
|
||||
move 1 from 4 to 7
|
||||
move 2 from 3 to 4
|
||||
move 6 from 6 to 9
|
||||
move 1 from 1 to 3
|
||||
move 2 from 9 to 4
|
||||
move 1 from 7 to 9
|
||||
move 4 from 2 to 9
|
||||
move 8 from 9 to 2
|
||||
move 3 from 3 to 2
|
||||
move 1 from 9 to 4
|
||||
move 5 from 1 to 7
|
||||
move 1 from 4 to 8
|
||||
move 2 from 1 to 9
|
||||
move 1 from 8 to 7
|
||||
move 6 from 5 to 3
|
||||
move 1 from 5 to 1
|
||||
move 5 from 2 to 3
|
||||
move 4 from 1 to 5
|
||||
move 4 from 7 to 1
|
||||
move 8 from 5 to 8
|
119
2022/5/main.cpp
Normal file
119
2022/5/main.cpp
Normal file
@@ -0,0 +1,119 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
void DebugOutput(std::vector<std::vector<char>> &stacks)
|
||||
{
|
||||
// DEBUG:
|
||||
for(const auto &st : stacks)
|
||||
{
|
||||
std::cout << "Stack: " << std::endl;
|
||||
for(const auto &ch : st)
|
||||
std::cout << "[" << ch << "]" << std::endl;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::string> SplitStr(std::string str, const std::string &delim)
|
||||
{
|
||||
std::vector<std::string> rtn;
|
||||
|
||||
for(auto split = str.find(delim); split != std::string::npos; split = str.find(delim))
|
||||
{
|
||||
rtn.push_back(str.substr(0, split));
|
||||
str = str.substr(split + delim.size()); // chop off beginning
|
||||
}
|
||||
if(str.size())
|
||||
rtn.push_back(str);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::vector<std::vector<char>> stacks;
|
||||
std::vector<std::vector<char>> stacks2;
|
||||
|
||||
// Step 1: Parse Starting Position
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
break;
|
||||
|
||||
stacks.resize((line.size() + 1) / 4);
|
||||
for(auto idx = 0; (idx * 4) < line.size(); ++idx)
|
||||
if(line[1 + idx * 4] != ' ')
|
||||
stacks[idx].push_back(line[1 + idx * 4]);
|
||||
}
|
||||
|
||||
// Step 2: Clean up data:
|
||||
for(auto &st : stacks)
|
||||
{
|
||||
// clear out last line of each, seeing as how they're just index numbers:
|
||||
st.pop_back();
|
||||
// reverse list since we parsed top to bottom and inserted backwards...
|
||||
std::reverse(st.begin(), st.end());
|
||||
}
|
||||
|
||||
// DebugOutput(stacks);
|
||||
stacks2 = stacks;
|
||||
|
||||
// Step 3: Parse Actions
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
auto actions = SplitStr(line, " ");
|
||||
if(actions.size() != 6)
|
||||
{
|
||||
std::cerr << "Data corrupt: " << line << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
long amt = std::atoi(actions[1].c_str());
|
||||
long from = std::atoi(actions[3].c_str()) - 1;
|
||||
long to = std::atoi(actions[5].c_str()) - 1;
|
||||
|
||||
// Part 1:
|
||||
for(auto i = 0; i < amt; ++i)
|
||||
{
|
||||
stacks[to].push_back(stacks[from].back());
|
||||
stacks[from].pop_back();
|
||||
}
|
||||
|
||||
// Part 2:
|
||||
std::stack<char> temp;
|
||||
for(auto i = 0; i < amt; ++i)
|
||||
{
|
||||
temp.push(stacks2[from].back());
|
||||
stacks2[from].pop_back();
|
||||
}
|
||||
for(auto i = 0; i < amt; ++i)
|
||||
{
|
||||
stacks2[to].push_back(temp.top());
|
||||
temp.pop();
|
||||
}
|
||||
}
|
||||
|
||||
// DebugOutput(stacks);
|
||||
|
||||
for(const auto &st : stacks)
|
||||
std::cout << st.back();
|
||||
std::cout << std::endl;
|
||||
for(const auto &st : stacks2)
|
||||
std::cout << st.back();
|
||||
std::cout << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
6
2022/6/Makefile
Normal file
6
2022/6/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
all: a.out b.out
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
||||
|
||||
b.out: main2.cpp
|
||||
clang++ -std=c++2b -g -O0 main2.cpp -o b.out
|
BIN
2022/6/b.out
Executable file
BIN
2022/6/b.out
Executable file
Binary file not shown.
1
2022/6/data.txt
Normal file
1
2022/6/data.txt
Normal file
@@ -0,0 +1 @@
|
||||
hqhnqhqshhslswsffchfcfbblvlblqlggfwwqfwwqdddbbbhzhjjrqjqbjqjwqjwqwhwrrmcrrjqjjlllcvcrrnpptzpzmmswmmzrzjrrfcrfccpbpzzvrrdndllttwftwwgzzwhwggdvdnnlrnncscbcfcctchcdchdccztzgzjjtdtcdtcchrrgpgzgsgpsggvtvppdccfhcfclfcfdfnddlbbptbtdbtdtjdjgdjjzljlssgbgcgqcqzccfnftfjjsgstggsngsscvssjzjnjtntvnvssrqqhtqtvqtvvjbvvbnvvqvmvrmmdsdvdwwnbnvbnvvcgvcczcfzftfsfrfsfttldtdrrgrgmgbbdvvbqbhqbqlqsqbsbpbgbvgbgwwrswrwrwttvnnzdnzzwggrmrfmmvllzwlwzzlvlbvllgsllpnlnvncvcvqqrwwcmcczhchzczbccdwcwvwzwwvddlwlhljlqjqnncntnctczzmwmlmccpggljlssqswsmmpvmvwvrrcpcrprmprrtdrtdrrsjsmshmmdpdlppbnbvvmmflmmjvjhvhjvjsjbjwjvvblvbvlbbllwlslvljvlvdvdgvgcchnhpnhnvhhtfhhvssczztlzzgvvqqghqgqssdscsnsrsmrmmwgwmgmlmdmggbgzbgzgdzdzccghgfgddtntftddpdrdrmrjmmmzttqmttnwngggtgtqtqnqhnqqpnnntrntrnnshhjtjzzfqqblqqlblslflmlttcwtwzzrlrnrcrrrgtrrftfhthzhggwggvgvvfvddcnddfjddzqzrrvtrvrfrrgpgrgngsgddlmddzgzppdzzjzhjhjhqqbpbvvlrvrsvrvnrrsgsttndnbngnppmlppvgvfggvcvrvnnsnfnnfqfwwppnddrrfqqgbqqfmmlnlnngwgcgjgnjgjsgjgqjjnccdttpqttswwcgcmgmccrppmqmbbfwwvdwdfwfjwfjjblldsdrdvvgcvcwwllfpllcslsvssnvsnvvhnvnvwwcgwccslsbbnlbnbrrrtprptpdpdvdttgsgwswppcdchhqbqcbqbzbgbbstshthsttqgtqtpqqzhhwhghwwmbbdlbbtlltsllbvbnvvmqvqtvqvttlwtltmmrttwgtwwfdddwcchtchhbthbbclczzqbzzpvvwzwswggjddntnrnnwmnnbdbmbccqgqvvsnvvqbvbzvvzmvzzrfrlfrfhhdvddnmnnmhmqhhrhlrldljlbljjgqqvdvhhgmgvgddmmznndmmhssznsswvwdvdzdhhscssntnftfmmrggbmbmgmlltctbtbntnqqscqcscrcrhrlhhdchhzccvvbfvvpfffbwbsbjjmgmwgmgppjnpjphhlmhhpwwhwzhhhzbbzzcbchhpnnptpvphhsdsccffqbqllchlhlwlcljlppnccqsstzstswtwwljwjmmpttvqqspsjjclljqqlhqqtnnbrrsbrbjjllrmrjmjzmmclmclmmcvvbddhnnmhmbbwqqqhrqqtqmqbqdbdtdvvcscshccmffhqffdgdcgddljdjbdbjbdbrrtjjtnntpntpnpmnpmpgghffrnfrnnmdnmnhmmjcjffftrrttfwfvwvcwwrmwmpwmmnvntthmmgmbbcdclcppjhpjhjwwlppgsszqqwggmttfrfqflfsfmmmhchshmmjtjjgdjjnnsvsmsnwcgdfqljmnphlfdrhpggfqnhnszgpndhdqcgfhtdcgbsbtmhvnnrmqzqqcjdqndzbnrhwjvbvcldmnwltgpqbmstntnggtbqjzzqrfdsfttdfrcnsrpwrjrjqbgtjfmlwsrzdbdqvbtczgsjqhtgmctjfmdglfrsvqtgwpbqghzgzdfwzhbdhlmhdvhwjrdhhtjptvwpmjnmfcjdmdczmczvdqwvbgtvlwvwnvdlbqfshmlmvzzcmjbtpwpwgsqhfsgljzhbppcztfjdntzcvllqnzrqjwfjrlgvhmbpvbtqjrdzcsmcjzcdsmvcmhrbhgnscnfrfmscqsqpqplbrzhsrlsvvpmfdtdmtlrtvspmlljmfpshfmstjgnrrwmqlbnwbndcfdstrtqtnzpfqlcgrzmsnmhllljdgtmvftjttbwhqzcqwbwdbshgcqrptfjwbbfsjnvzztlbdchqrlbbrcnsswmhwphfwrbnvrncbrthprmltlwwlfpbqhdfqzwwcwjgqzdnvmhwpzpbtpwwvzcpfcsfqpwjljzzfwzmlfvhsccppzlzjlrvlpdtjpcptnvqjwtdbzrqwnfwmmjndflqqggczrfjlpdfjffctprnmhfdqvnzbfvhszzdmngnlmwzfdrbvlvjnmbllgrczssqcrhbmnpmqlrzgmqmhgsvcdlqnmlhlzvqzhnccbctslzlbcpdvqltqncpcrzwdchrqmwfwlcbcvfnnpjntfrznqdjsdtzqjjttddwvnfqmznhflblzvvtbwdzrrlqlmndzzzwnpbhhlvlbswfjtbnhlccscbnfgjtwbfdlwvzszwnwzhlbcdpvgqjcrpzsvvnfwqcqvrmhzhggvmzwggdpbfrdscjwhsdsbbjcnzldhzcvqtjrhsbfjlrlpvtcqhnnsvslfrdjvjhfhdcfzqchpvvhzbpqglqlrdttrdtndzhnzhtqndghtgmpsnhptprqzhbbdcrgmbvrvqmbptqgnmsccwmhrlpddvmhjntllwrzqwnsjchnblcgndjtmpswwgcstdftqcbhzgttrhnpvrhspjznhhvrlpdqbzzrvzjphcswhljdldvsrdhzltwgrcsvqwnhtqqjjrjgrplzmsnjhzrfbtqgdfgnbpvjrfzrrpdphgzrfbswdhzgbzswqtwwdtrvvswmjvwhqddfzjhgdqsfnwbmlcfwtmpldrdpwjwggbpmncvbghzjmpsqpvnmbhjfzzpsjdgmrtnndhzrphjzdbgrrnthtrfnspdngbdmwbnfjlsndqswfsvfqftqlgqjpfsfpmdbsjfrptvbpvflqgvlmmbchhghhrwmvdlrhlsdtvjjchwglcrwfsfnnbhjbtccbjsfwrbzrvgsbfnvzghhrqblqchjvdtrrbrwwwmfnczzmmrqdggsfrqbldbbfbbcthtsvpcnlbjjztwvhctbrjltqdwbzmrrfslbmjpnqwllbvjzgfsfqqtwbgwgclgdflshfhwggwdqlgbmdmdqglrtfwbddtsltmsvswhgjtqwtnrncpdzhnpfqcjnjzmtbjfzpjwgfbfggmsmfdhfbjctnhchpgfspthdbfpmvrmdbbspvwzqqwnmfwdnnblbcjszbccgflngnjjwsqshfbhjwgzrmvsgnrdbgwfhdvpmznpnvznfcqdclztcptjrrpbmpztwwbvlvtmngfhmfbfmrjbjzlrcvgllrlgthltstnwmffntqrwsrndlzqhztwpcwbdjjztgdzmgtthcvtvnjzzhvstfqhgddddgdsrbcqzqspjrncphhtbnslzphrtfqphffjrrlgwbrwqfzzqvzhnffcwvrncttgplshccglvchvlcbnlthhmzvcrfjvjqfsjjzzgqlpslfwngqnbgcwffpcqhlmlhvwssrpjbrcbftpzbbpptzrdqwpzpdjhtwbvwcqbfnwtflfgzgttglpcwdnzsmjffgfftdnpzlpszmzrrhvlzdfpgbzqlvvfslnndcmjvvpwzwcdzpcttfwbsdswmfqbbhbfbjvbvtspbbhmphzjsjcmmzpvvzhtvzlgwlqqvbnrgtszvghjfmchrwwhpmbsvfmgvqdtmvdtjppchbsgqrtgtnzczqmpgjdbmmflfpjbcdmhldwpgdtdvsbzhztjzfhcsbndfjntbldjnqwdffqspfnlplbtcdjtwdjhldtsdfrnmpfhzghnpcqlhhgblmqjvwhndqfbccvzzlbzbdprvcpwjjhrqnjptwssbjhgvpgtfzqwrzjvbdgwtnmptvdjrffcmbzmzcmrfbjv
|
56
2022/6/main.cpp
Normal file
56
2022/6/main.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include <deque>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
bool Unique(const std::deque<char> &buf)
|
||||
{
|
||||
std::set<char> s;
|
||||
for(const char &ch : buf)
|
||||
s.insert(ch);
|
||||
return (s.size() == 4);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
std::deque<char> buf;
|
||||
|
||||
int idx = 0;
|
||||
for(const char &ch : line)
|
||||
{
|
||||
++idx;
|
||||
buf.push_back(ch);
|
||||
if(buf.size() >= 4)
|
||||
{
|
||||
while(buf.size() > 4)
|
||||
buf.pop_front();
|
||||
|
||||
if(Unique(buf))
|
||||
{
|
||||
std::cout << "At index " << idx << ": ";
|
||||
for(const char &ch : buf)
|
||||
std::cout << ch;
|
||||
std::cout << std::endl;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
52
2022/6/main2.cpp
Normal file
52
2022/6/main2.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
std::vector<char> buf;
|
||||
|
||||
int idx = 0;
|
||||
for(const char &ch : line)
|
||||
{
|
||||
++idx;
|
||||
|
||||
// clear out from beginning up until this character is found:
|
||||
auto i = std::find(buf.begin(), buf.end(), ch);
|
||||
if(i != buf.end())
|
||||
buf.erase(buf.begin(), i+1);
|
||||
|
||||
buf.push_back(ch);
|
||||
|
||||
if(buf.size() == 4)
|
||||
{
|
||||
std::cout << "Start-of-Packet at index " << idx << ": ";
|
||||
for(const char &ch : buf)
|
||||
std::cout << ch;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
else if(buf.size() == 14)
|
||||
{
|
||||
std::cout << "Start-of-Message at index " << idx << ": ";
|
||||
for(const char &ch : buf)
|
||||
std::cout << ch;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
21
2022/7/File.cpp
Normal file
21
2022/7/File.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include "File.h"
|
||||
|
||||
File::File(const std::string &set_filename, unsigned long set_size)
|
||||
{
|
||||
this->size = set_size;
|
||||
this->filename = set_filename;
|
||||
}
|
||||
|
||||
File::~File()
|
||||
{
|
||||
}
|
||||
|
||||
const std::string& File::Filename() const
|
||||
{
|
||||
return filename;
|
||||
}
|
||||
|
||||
unsigned long File::Size() const
|
||||
{
|
||||
return size;
|
||||
}
|
19
2022/7/File.h
Normal file
19
2022/7/File.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef ADVENT_DVEREB_FILE_H
|
||||
#define ADVENT_DVEREB_FILE_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class File {
|
||||
public:
|
||||
File(const std::string &set_filename, unsigned long set_size);
|
||||
virtual ~File();
|
||||
|
||||
const std::string& Filename() const;
|
||||
virtual unsigned long Size() const;
|
||||
|
||||
protected:
|
||||
unsigned long size;
|
||||
std::string filename;
|
||||
};
|
||||
|
||||
#endif
|
58
2022/7/Folder.cpp
Normal file
58
2022/7/Folder.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "Folder.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
Folder::Folder(const std::string &filename)
|
||||
: File(filename, 0)
|
||||
{
|
||||
}
|
||||
|
||||
unsigned long Folder::Size() const
|
||||
{
|
||||
unsigned long size = 0;
|
||||
for(const auto *file : files)
|
||||
size += file->Size();
|
||||
return size;
|
||||
}
|
||||
|
||||
void Folder::AddFile(const std::string &filename,
|
||||
unsigned long size)
|
||||
{
|
||||
// make sure the file doesn't already exist:
|
||||
if(std::find_if(files.begin(), files.end(),
|
||||
[&](const File *file) {
|
||||
return file->Filename() == filename;
|
||||
}) != files.end())
|
||||
{
|
||||
std::cerr << "Folder \"" << this->Filename() << "\" already contains "
|
||||
<< "the file \"" << filename << "\"." << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
// increment this folder's size total:
|
||||
this->size += size;
|
||||
|
||||
// add the file:
|
||||
files.push_back(new File(filename, size));
|
||||
}
|
||||
|
||||
void Folder::AddFolder(const std::string &name)
|
||||
{
|
||||
if(std::find_if(files.begin(), files.end(),
|
||||
[&](const File *file) {
|
||||
return file->Filename() == name;
|
||||
}) != files.end())
|
||||
{
|
||||
std::cout << "NOTE: Folder \"" << this->Filename() << "\" already contains "
|
||||
<< "the subfolder \"" << name << "\"." << std::endl;
|
||||
// exit(-1);
|
||||
}
|
||||
|
||||
files.push_back(new Folder(name));
|
||||
}
|
||||
|
||||
const std::vector<File*>& Folder::Files() const
|
||||
{
|
||||
return files;
|
||||
}
|
22
2022/7/Folder.h
Normal file
22
2022/7/Folder.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef ADVENT_DVEREB_FOLDER_H
|
||||
#define ADVENT_DVEREB_FOLDER_H
|
||||
|
||||
#include "File.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class Folder : public File {
|
||||
public:
|
||||
Folder(const std::string &filename);
|
||||
|
||||
unsigned long Size() const override;
|
||||
void AddFile(const std::string &filename, unsigned long size);
|
||||
void AddFolder(const std::string &name);
|
||||
const std::vector<File*>& Files() const;
|
||||
|
||||
private:
|
||||
std::vector<File*> files;
|
||||
};
|
||||
|
||||
#endif
|
2
2022/7/Makefile
Normal file
2
2022/7/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp File.h File.cpp Folder.h Folder.cpp SplitStr.h
|
||||
clang++ -std=c++2b -g -O0 main.cpp File.cpp Folder.cpp
|
22
2022/7/SplitStr.h
Normal file
22
2022/7/SplitStr.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef ADVENT_DVEREB_SPLITSTR_H
|
||||
#define ADVENT_DVEREB_SPLITSTR_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
std::vector<std::string> SplitStr(std::string str, const std::string &delim)
|
||||
{
|
||||
std::vector<std::string> rtn;
|
||||
|
||||
for(auto split = str.find(delim); split != std::string::npos; split = str.find(delim))
|
||||
{
|
||||
rtn.push_back(str.substr(0, split));
|
||||
str = str.substr(split + delim.size()); // chop off beginning
|
||||
}
|
||||
if(str.size())
|
||||
rtn.push_back(str);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
#endif
|
1013
2022/7/data.txt
Normal file
1013
2022/7/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
170
2022/7/main.cpp
Normal file
170
2022/7/main.cpp
Normal file
@@ -0,0 +1,170 @@
|
||||
#include "Folder.h"
|
||||
#include "SplitStr.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
void DebugOutput(File *file)
|
||||
{
|
||||
static int indent = -1;
|
||||
++indent;
|
||||
for(auto i = 0; i < indent; ++i)
|
||||
std::cout << " ";
|
||||
|
||||
Folder *folder = dynamic_cast<Folder*>(file);
|
||||
if(folder)
|
||||
{
|
||||
std::cout << "Contents of folder: " << folder->Filename()
|
||||
<< ", size: " << folder->Size()
|
||||
<< std::endl;
|
||||
for(File *file : folder->Files())
|
||||
DebugOutput(file);
|
||||
}
|
||||
else
|
||||
std::cout << "- " << file->Filename()
|
||||
<< ", size: " << file->Size()
|
||||
<< std::endl;
|
||||
--indent;
|
||||
}
|
||||
|
||||
unsigned long PartOne(File *file, unsigned long &grand_total)
|
||||
{
|
||||
unsigned long rtn = 0;
|
||||
Folder *folder = dynamic_cast<Folder*>(file);
|
||||
if(folder)
|
||||
{
|
||||
for(File *file : folder->Files())
|
||||
rtn += PartOne(file, grand_total);
|
||||
if(rtn <= 100000)
|
||||
{
|
||||
grand_total += rtn;
|
||||
std::cout << "Folder \"" << folder->Filename() << "\" has a size of " << rtn
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
rtn += file->Size();
|
||||
return rtn;
|
||||
}
|
||||
|
||||
void PartTwo(File *file, unsigned long at_least, File *&smallest)
|
||||
{
|
||||
Folder *folder = dynamic_cast<Folder*>(file);
|
||||
if(folder)
|
||||
{
|
||||
if(folder->Size() >= at_least && folder->Size() < smallest->Size())
|
||||
{
|
||||
std::cout << "New smallest size of " << folder->Size() << " by folder \""
|
||||
<< folder->Filename() << "\"." << std::endl;
|
||||
smallest = file;
|
||||
}
|
||||
|
||||
for(File *file : folder->Files())
|
||||
PartTwo(file, at_least, smallest);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void Parse(Folder &root)
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
std::stack<Folder*> dir_stack;
|
||||
dir_stack.push(&root);
|
||||
|
||||
// Step 1: Parse:
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
if(line.starts_with("$ ls"))
|
||||
continue;
|
||||
else if(line.starts_with("$ cd"))
|
||||
{
|
||||
auto to = line.substr(5);
|
||||
if(to == "/")
|
||||
{
|
||||
while(dir_stack.size() > 1)
|
||||
dir_stack.pop();
|
||||
}
|
||||
else if(to == "..")
|
||||
{
|
||||
if(dir_stack.size() > 1)
|
||||
dir_stack.pop();
|
||||
}
|
||||
else
|
||||
{
|
||||
auto existing = std::find_if(dir_stack.top()->Files().begin(),
|
||||
dir_stack.top()->Files().end(),
|
||||
[&to](const File *f){
|
||||
return f->Filename() == to;
|
||||
});
|
||||
if(existing != dir_stack.top()->Files().end()) // found!
|
||||
{
|
||||
// Check to see if it's a folder, first:
|
||||
Folder *folder = dynamic_cast<Folder*>(*existing);
|
||||
if(folder)
|
||||
dir_stack.push(folder);
|
||||
else
|
||||
{
|
||||
std::cerr << (*existing)->Filename() << " is a file, not a folder."
|
||||
<< std::endl;
|
||||
exit(-3);
|
||||
}
|
||||
}
|
||||
else
|
||||
std::cerr << "could not navigate to \"" << to << "\" from \""
|
||||
<< dir_stack.top()->Filename() << "\"." << std::endl;
|
||||
}
|
||||
}
|
||||
else if(line.starts_with("dir "))
|
||||
{
|
||||
dir_stack.top()->AddFolder(line.substr(4));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto values = SplitStr(line, " ");
|
||||
dir_stack.top()->AddFile(values[1], std::atol(values[0].c_str()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
Folder root("/");
|
||||
Parse(root);
|
||||
|
||||
// Step 1.5: Debug output:
|
||||
DebugOutput(&root);
|
||||
|
||||
unsigned long grand_total = 0;
|
||||
PartOne(&root, grand_total);
|
||||
|
||||
std::cout << "Grand Total (part 1): " << grand_total << std::endl;
|
||||
|
||||
const unsigned long max_space = 70000000;
|
||||
const unsigned long space_needed = 30000000;
|
||||
const unsigned long currently_used = root.Size();
|
||||
const unsigned long currently_unused = max_space - currently_used;
|
||||
const unsigned long amt_to_remove = space_needed - currently_unused;
|
||||
|
||||
File *file_to_remove = &root;
|
||||
PartTwo(&root, amt_to_remove, file_to_remove);
|
||||
|
||||
std::cout << "Remove \"" << file_to_remove->Filename() << "\" to free up "
|
||||
<< file_to_remove->Size() << " which is the smallest amount >= "
|
||||
<< amt_to_remove << " (part 2)." << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2022/8/Makefile
Normal file
2
2022/8/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
99
2022/8/data.txt
Normal file
99
2022/8/data.txt
Normal file
@@ -0,0 +1,99 @@
|
||||
020110220332333020110144320304042020444223003535441353331002333431100300241023221210123003331021020
|
||||
002120010112022233203323334422340102033151553341235324543343233301202102130210343113312320222102020
|
||||
000000000301021002423224442341031145215244543444223314545524515335404222310244314423023331200102012
|
||||
011200302010212334422213334343335452314532352111122533515334412241512412033340322004232020212310011
|
||||
110111200102310120411101020333232255345143342245212323552344535253214434143032323213200301101020121
|
||||
122001020113011314043121413025543341512335111452355331355351515421515411500421204113413212021112302
|
||||
011210211003201420103123304513544114145311452334355144111521441452154223512022101102111221311323311
|
||||
011030200312240341224434214241313322323544154242345656634321531531424124544551344224331443202111303
|
||||
031023120224010220144244342511241334331166432443322363352643453525244443222142533014331212133113031
|
||||
331033331100013013431114214253543323143222523423236646456363626622312534521454454123324132323233200
|
||||
313320023430241044213221132131122135436564345625426422255326234363243521151144414344130023210131130
|
||||
002203011410101343345413454143416333665335233566235623536644652644522345535525153521230411343303211
|
||||
022030323311323124542521154345356626352343324652424464566645425223224521453553252234321033403323130
|
||||
331222243010032043452454232565665256426536435254566436633323343652534544214412242551144312310221231
|
||||
231133233004211422411531255443363333555345434532475762623642433466363266634413551244254134333243030
|
||||
020231113200002214145443133533534653326664654474363645366343345466265644554325342415122332200024311
|
||||
311032340032414323451542554464466352256347635357637447736577667463426532442564245132242343241314212
|
||||
210342413212232542421452232234546643373633347344743377376553465333423522425436534352355150302110320
|
||||
012302042023135125251364365232626547463576733637455663764376436734352545425434331543241124042312202
|
||||
304042410233125532432523224245663443763753734647533535565636563665334542556665554245524241400402122
|
||||
100324144335411111343624365526556753335435457754653754663647544353454443256623466532421524442220212
|
||||
004310002315421423634565264237567445665436743333467647547754434765353667542365233361541321530411122
|
||||
340100133133254351662534562377644656735477678648447854646765556636735646456562322345353223545130204
|
||||
223422234555541234336653556365464346366386775667444744567758637737757667635354324626442355153142402
|
||||
301202352352311332364654446567354376644665887886878854847858588356564773766244445222614543212440041
|
||||
121010254322255546522625235356663453785775455846758588786788567566653645763532436352663334521520342
|
||||
223123122512444365553626454767563488464886467858877655766685458675437556363673526236645213411512224
|
||||
003314511142456453664565476333555654845565878476575468776548666885476777366354622652365442341232330
|
||||
100434351354142623236353735657745766665557455465675844665578767675874476556574642555262344222545124
|
||||
310035122251134332246455666547787878577677667587668567788744875844888844364453536232254344234442004
|
||||
332355524421462334544344655646458867688886798865795569865997666688465755335745555656646243433122421
|
||||
212252432545222565265377376368574784887787696558698987968675547855656555445333366624445325141553342
|
||||
113535121253534442546646364347455675758878676575695576785998796454646647555637657565266546254424513
|
||||
023531155256556443573534665476784478579889966685965558767695667786588646763565366352565623135242132
|
||||
332235311465633455637577656876574774599858977857599877979855878694546488485435736564352255345534352
|
||||
423312331346353345545646578646466549968669789766955768696578957665488458568376747735452426221223133
|
||||
042131555255526335474354376567744577697576655686887997959968659596857774864465577464334245541411144
|
||||
314335533542324633457667677854784879668896688676989899996875778858675674784535777333543532331142411
|
||||
342431321343652634443346854886679789759856968779866777899677797959996774647753365556465426225312415
|
||||
443122331352464374355445874586585857875568898788666678776787986756859447544446666763365552244452322
|
||||
434332122456323647344556476668759666569568769987679766689798887678765548587477474536465533643451422
|
||||
012515214225433447464677777487776597697976998888987789798887796967785955887765466437333665342324523
|
||||
151212435544622335634548655777875966867886867777679699887698988956977857868655457465635544364542154
|
||||
425332155643342656676678888575989888788767888899689899798688796666757955465858667777362363434424542
|
||||
531532414223243445466348848575895777968779899997887798776667989655588765447757447347342252524115215
|
||||
155245334655555376575664568856876978978787888977789987998877778796686666588544843473375333466131323
|
||||
442223263655353573545578848875879796997899897789887987979686977788898887848487563664644353624212355
|
||||
532342436423523433743374566649565796978689677778887988977986779775985585775684847364464225436344143
|
||||
144131162643455446377457566657777998676869667898877798979888978868889578745676553337663625625354412
|
||||
212531125562654464546354657756555595879978788779777999979988869895856856488587466676673534564554215
|
||||
515521136425625643733788668547967896969879989899779977888986996776697776777887634766746536654352314
|
||||
533115456346557773554457648785576555967877979777897997977979879979889786544548474557775226255314122
|
||||
432554142445363766476368787846679896977899887779797978979969889696765986666844737665565256236231155
|
||||
125253442625345476646468778468579567787976888987879797899978977695756855477657433457362446432521533
|
||||
451335344244435635354545558745856999567779868887799878899867977959975677866558447464563253543641554
|
||||
412221312464362643575387865576575778679997969899879799897898997777656968646646747476434353234412443
|
||||
132123436534443354553586484485777568678779897878779989966877968659558598445764456573762542646254544
|
||||
024143156436353736354736885476858987768978898698789976987668878886568974574565737457544455543452243
|
||||
413135313643263775675578866878568599957868689889887898688888897699957964455656556464353643525222353
|
||||
151155234625524455454576866886566769799886776697778986968676996687578554546778475347663665445441542
|
||||
225335432336665664467554464786765996688599897886876679899878795577796866847588643664352344525425543
|
||||
231314414363454365656445447648785668665699968677877867679686575989979554888874435546345632362455211
|
||||
215225154624264466667536475884866766856799777898688869799678789658958655666655664763723652345235254
|
||||
035354151466424636347656474544888889966575676978876877797665689589954588444647355553546242434541533
|
||||
001253252266442433343367457848868577696576876956987767987878766766685545864636355333223636351531525
|
||||
432114153244234344474473336455665467595685659677769775776598955788485844764764774633253355345153344
|
||||
440231335123622442356777766866685464699576999777998779679677676798556674878735743562224245652132511
|
||||
321533313113424533355576556587855784598797699998756887876998858868457756543476743664332364153212141
|
||||
003415211213442534357575744467674686668987887956977567898997789587764784753377657636326255155213240
|
||||
224445525333436434526743474634674544887785577959758998579798555487687877644644777665225554533252422
|
||||
114025431113445462556535777346657775747764689775588768859877487468477864653336547436625221413353402
|
||||
444431445545324552322733365535555774656466544687955795855665775645668663457547655566226341423452434
|
||||
410445115125126462226236353755455888548674587788447578688475766447586446763443644432535242233435244
|
||||
124340412535436432636663557555763744747854587474866557668648548584743443577534342355356535325312231
|
||||
200313132541126432532542747437536486654767558545587875558487658465577773437664544545354413212211212
|
||||
101333454545223643623655465756576356785656755457885765456674785763465474656725224222541315314114031
|
||||
131233142323341366245232435554365765545574774767785475776848668453355554474332533326544433554514201
|
||||
321411402434455156645353526473756763444567846554465464446465455445745336435566265254512531525210112
|
||||
030131034355454454644464565464475577344753366858566476585577545346763733342656446563454444451042420
|
||||
123233024345514531322525463344645673755773347575544437475656346736346777342352464432215452454013411
|
||||
014322323421235432556233655455544546633674634474456664346664375533773475562242423541545331424443423
|
||||
103044012005453352356343445634325645434337637364655565435774676736733553262634342435541343244030000
|
||||
320224321434222311444445623462256346445463567453434633465443337646352226626622452524224345304403330
|
||||
212420324020443535541356556336654222753455556557453353546474577342535554563532343321131244211234443
|
||||
122201202000423112251512562424625443344753367744337643545467743645523543344535431154212330403302410
|
||||
302200224224202341324112146243633653523426575646533673677763345633345645554351214352331400423031333
|
||||
123001320330302415435532414224224226352235334353577574436324344226425624263133551342153034141032032
|
||||
213131040401103044255424155325562642646633364323565455323646566426224245451451423431324433130343033
|
||||
231211142003310021532152553311226325626362465244625533422332633634454451545253314415220400420413203
|
||||
312320130422410131322514243524545532465435666446335525623552365342455442353243151122403024303312021
|
||||
133332233112042420435241253424143243654366264342464546256332442465235435334432132240241304411322221
|
||||
333302213333240222002452421142454145262355663455246362444253326353144344554554324413300122011222021
|
||||
202310030210410440001115535553444131333333663342464256255352255253344353414423520402213424030101331
|
||||
020120023231001430421410113431542415212332151336254445313532121145524443121220343020012020230032230
|
||||
210023323121322121303302233233245321224455333332343322323215223451525532222223304043001030230132022
|
||||
002222021003231011234340303045243412535411232132142332533521354111141433134004443142111110122121100
|
||||
022122131333022231003311233440122445251415343142141523345254553214425533033042143220401300010213100
|
||||
122110132221332212341431023220242412121544355542132225542445544553234342030402442141111321103231211
|
||||
122021200131211021314010312001241211235253115315252213451111223452204220130001212341202130012001221
|
200
2022/8/main.cpp
Normal file
200
2022/8/main.cpp
Normal file
@@ -0,0 +1,200 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
long ScenicScore(int set_x, int set_y, std::vector<std::vector<int>> &trees)
|
||||
{
|
||||
const int tree_val = trees[set_y][set_x];
|
||||
|
||||
int score_up = 0;
|
||||
int score_down = 0;
|
||||
int score_left = 0;
|
||||
int score_right = 0;
|
||||
|
||||
// up
|
||||
for(int y = set_y - 1; y >= 0; --y)
|
||||
{
|
||||
++score_up;
|
||||
if(trees[y][set_x] >= tree_val)
|
||||
break;
|
||||
}
|
||||
// down
|
||||
for(int y = set_y + 1; y < trees.size(); ++y)
|
||||
{
|
||||
++score_down;
|
||||
if(trees[y][set_x] >= tree_val)
|
||||
break;
|
||||
}
|
||||
// left
|
||||
for(int x = set_x - 1; x >= 0; --x)
|
||||
{
|
||||
++score_left;
|
||||
if(trees[set_y][x] >= tree_val)
|
||||
break;
|
||||
}
|
||||
// right
|
||||
for(int x = set_x + 1; x < trees[set_y].size(); ++x)
|
||||
{
|
||||
++score_right;
|
||||
if(trees[set_y][x] >= tree_val)
|
||||
break;
|
||||
}
|
||||
|
||||
return score_up * score_down * score_left * score_right;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<std::vector<int>> trees;
|
||||
|
||||
// Parse:
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
trees.push_back({});
|
||||
for(const char &ch : line)
|
||||
trees.back().push_back(ch - '0');
|
||||
}
|
||||
|
||||
std::set<std::pair<int, int>> visible_coordinates;
|
||||
for(auto y = 0; y < trees.size(); ++y)
|
||||
{
|
||||
visible_coordinates.insert({0,y});
|
||||
visible_coordinates.insert({trees[y].size()-1,y});
|
||||
}
|
||||
for(auto x = 1; x < trees[0].size() - 1; ++x)
|
||||
{
|
||||
visible_coordinates.insert({x,0});
|
||||
visible_coordinates.insert({x,trees.size()-1});
|
||||
}
|
||||
|
||||
// left to right, right to left IN EACH ROW:
|
||||
std::vector<int> points;
|
||||
for(auto y = 1; y < trees.size() - 1; ++y)
|
||||
{
|
||||
points.clear();
|
||||
|
||||
// initialize list with the first value
|
||||
points.push_back(trees[y][0]);
|
||||
|
||||
// iterate through the rest:
|
||||
for(auto x = 1; x < trees[y].size(); ++x)
|
||||
{
|
||||
// if it's higher than the most recent one:
|
||||
const auto val = trees[y][x];
|
||||
if(val > points.back())
|
||||
{
|
||||
points.push_back(val);
|
||||
visible_coordinates.insert({x,y});
|
||||
}
|
||||
}
|
||||
}
|
||||
for(auto y = 1; y < trees.size() - 1; ++y)
|
||||
{
|
||||
points.clear();
|
||||
|
||||
// initialize list with the first value
|
||||
points.push_back(trees[y][trees.size()-1]);
|
||||
|
||||
// iterate through the rest:
|
||||
for(auto x = trees[y].size() - 2; x > 0; --x)
|
||||
{
|
||||
// if it's higher than the most recent one:
|
||||
const auto val = trees[y][x];
|
||||
if(val > points.back())
|
||||
{
|
||||
points.push_back(val);
|
||||
visible_coordinates.insert({x,y});
|
||||
}
|
||||
}
|
||||
}
|
||||
for(auto x = 1; x < trees[0].size() - 1; ++x)
|
||||
{
|
||||
points.clear();
|
||||
|
||||
// initialize list with the first value
|
||||
points.push_back(trees[0][x]);
|
||||
|
||||
// iterate through the rest:
|
||||
for(auto y = 1; y < trees.size(); ++y)
|
||||
{
|
||||
// if it's higher than the most recent one:
|
||||
const auto val = trees[y][x];
|
||||
if(val > points.back())
|
||||
{
|
||||
points.push_back(val);
|
||||
visible_coordinates.insert({x,y});
|
||||
}
|
||||
}
|
||||
}
|
||||
for(auto x = 1; x < trees[0].size() - 1; ++x)
|
||||
{
|
||||
points.clear();
|
||||
|
||||
// initialize list with the first value
|
||||
points.push_back(trees[trees.size()-1][x]);
|
||||
|
||||
// iterate through the rest:
|
||||
for(auto y = trees.size()-2; y > 0; --y)
|
||||
{
|
||||
// if it's higher than the most recent one:
|
||||
const auto val = trees[y][x];
|
||||
if(val > points.back())
|
||||
{
|
||||
points.push_back(val);
|
||||
visible_coordinates.insert({x,y});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
total += visible_coordinates.size();
|
||||
|
||||
for(auto y = 0; y < trees.size(); ++y)
|
||||
{
|
||||
for(auto x = 0; x < trees[y].size(); ++x)
|
||||
{
|
||||
if(visible_coordinates.contains({x,y}))
|
||||
std::cout << "\033[1;31m"; // red
|
||||
else
|
||||
std::cout << "\033[0m"; // default white
|
||||
std::cout << trees[y][x];
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
std::cout << "\033[0m"; // default white
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
|
||||
long highest_scenic = 0;
|
||||
for(auto y = 0; y < trees.size(); ++y)
|
||||
{
|
||||
for(auto x = 0; x < trees.size(); ++x)
|
||||
{
|
||||
auto score = ScenicScore(x, y, trees);
|
||||
if(score > highest_scenic)
|
||||
{
|
||||
highest_scenic = score;
|
||||
std::cout << "New highest: " << score << " at " << x << "," << y << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
total_pt2 = highest_scenic;
|
||||
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2022/9/Makefile
Normal file
2
2022/9/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
2000
2022/9/data.txt
Normal file
2000
2022/9/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
8
2022/9/data_test.txt
Normal file
8
2022/9/data_test.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
R 4
|
||||
U 4
|
||||
L 3
|
||||
D 1
|
||||
R 4
|
||||
D 1
|
||||
L 5
|
||||
R 2
|
169
2022/9/main.cpp
Normal file
169
2022/9/main.cpp
Normal file
@@ -0,0 +1,169 @@
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
void ApplyMovement(std::pair<int, int> &head,
|
||||
std::pair<int, int> &tail)
|
||||
{
|
||||
const int x_diff = head.first - tail.first;
|
||||
const int y_diff = head.second - tail.second;
|
||||
if(std::abs(x_diff) > 1) // 2 away
|
||||
{
|
||||
tail.first += (head.first - tail.first) / 2;
|
||||
if(std::abs(y_diff) > 1) // 2 away due to diagonally following!!!
|
||||
tail.second += (head.second - tail.second) / 2;
|
||||
else
|
||||
// snap to axis since you're already on it or you're one away
|
||||
tail.second = head.second;
|
||||
}
|
||||
if(std::abs(y_diff) > 1) // 2 away
|
||||
{
|
||||
tail.second += (head.second - tail.second) / 2;
|
||||
if(std::abs(x_diff) > 1) // 2 away due to diagonally following!!!
|
||||
tail.first += (head.first - tail.first) / 2;
|
||||
else
|
||||
// snap to axis since you're already on it or you're one away
|
||||
tail.first = head.first;
|
||||
}
|
||||
}
|
||||
|
||||
void DebugPrint(std::vector<std::pair<int, int> > &points,
|
||||
std::set<std::pair<int, int> > &visited_positions,
|
||||
std::set<std::pair<int, int> > &visited_positions_part2)
|
||||
{
|
||||
int x_min = points[0].first;
|
||||
int y_min = points[0].second;
|
||||
int x_max = points[0].first;
|
||||
int y_max = points[0].second;
|
||||
|
||||
for(auto &pos : visited_positions)
|
||||
{
|
||||
x_min = std::min(x_min, pos.first);
|
||||
x_max = std::max(x_max, pos.first);
|
||||
y_min = std::min(y_min, pos.second);
|
||||
y_max = std::max(y_max, pos.second);
|
||||
}
|
||||
for(auto &pos : visited_positions_part2)
|
||||
{
|
||||
x_min = std::min(x_min, pos.first);
|
||||
x_max = std::max(x_max, pos.first);
|
||||
y_min = std::min(y_min, pos.second);
|
||||
y_max = std::max(y_max, pos.second);
|
||||
}
|
||||
|
||||
for(auto i = 0; i < 50; ++i)
|
||||
std::cout << std::endl;
|
||||
std::cout << "X: " << x_min << " - " << x_max << std::endl;
|
||||
std::cout << "Y: " << y_min << " - " << y_max << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
for(auto y = y_min; y <= y_max; ++y)
|
||||
{
|
||||
for(auto x = x_min; x <= x_max; ++x)
|
||||
{
|
||||
if(points[0].first == x && points[0].second == y)
|
||||
std::cout << "\033[1;30mH"; // head
|
||||
else if(points[1].first == x && points[1].second == y)
|
||||
std::cout << "\033[1;25m1"; // tail
|
||||
else if(points[2].first == x && points[2].second == y)
|
||||
std::cout << "\033[1;25m2"; // tail
|
||||
else if(points[3].first == x && points[3].second == y)
|
||||
std::cout << "\033[1;25m3"; // tail
|
||||
else if(points[4].first == x && points[4].second == y)
|
||||
std::cout << "\033[1;25m4"; // tail
|
||||
else if(points[5].first == x && points[5].second == y)
|
||||
std::cout << "\033[1;25m5"; // tail
|
||||
else if(points[6].first == x && points[6].second == y)
|
||||
std::cout << "\033[1;25m6"; // tail
|
||||
else if(points[7].first == x && points[7].second == y)
|
||||
std::cout << "\033[1;25m7"; // tail
|
||||
else if(points[8].first == x && points[8].second == y)
|
||||
std::cout << "\033[1;25m8"; // tail
|
||||
else if(points[9].first == x && points[9].second == y)
|
||||
std::cout << "\033[1;25m9"; // tail
|
||||
else if(visited_positions.contains({x, y}))
|
||||
std::cout << "\033[1;31mX"; // red
|
||||
else if(visited_positions_part2.contains({x, y}))
|
||||
std::cout << "\033[1;20mY"; // ??
|
||||
else
|
||||
std::cout << "\033[0m-"; // default white
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
std::cout << "\033[0m"; // default white
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::set<std::pair<int, int> > visited_positions;
|
||||
std::set<std::pair<int, int> > visited_positions_part2;
|
||||
|
||||
std::vector<std::pair<int, int> > points;
|
||||
for(auto i = 0; i < 10; ++i)
|
||||
points.push_back({0,0});
|
||||
|
||||
char dir;
|
||||
int amt;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
dir = line[0];
|
||||
amt = std::atoi(line.substr(2).c_str());
|
||||
|
||||
for(auto i = 0; i < amt; ++i)
|
||||
{
|
||||
// Move head:
|
||||
switch(dir)
|
||||
{
|
||||
case 'U':
|
||||
points[0].second--;
|
||||
break;
|
||||
case 'D':
|
||||
points[0].second++;
|
||||
break;
|
||||
case 'L':
|
||||
points[0].first--;
|
||||
break;
|
||||
case 'R':
|
||||
points[0].first++;
|
||||
break;
|
||||
}
|
||||
|
||||
// Follow with tail:
|
||||
for(auto i = 0; i < points.size() - 1; ++i)
|
||||
ApplyMovement(points[i], points[i+1]);
|
||||
|
||||
visited_positions.insert(points[1]);
|
||||
visited_positions_part2.insert(points.back());
|
||||
|
||||
DebugPrint(points, visited_positions, visited_positions_part2);
|
||||
usleep(100000);
|
||||
}
|
||||
}
|
||||
|
||||
DebugPrint(points, visited_positions, visited_positions_part2);
|
||||
total = visited_positions.size();
|
||||
total_pt2 = visited_positions_part2.size();
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2022/starter/Makefile
Normal file
2
2022/starter/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
29
2022/starter/main.cpp
Normal file
29
2022/starter/main.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2023/1/Makefile
Normal file
2
2023/1/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
1000
2023/1/data.txt
Normal file
1000
2023/1/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
7
2023/1/data_test.txt
Normal file
7
2023/1/data_test.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
126
2023/1/main.cpp
Normal file
126
2023/1/main.cpp
Normal file
@@ -0,0 +1,126 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::map<std::string, std::string> values =
|
||||
{
|
||||
{ "0", "0" },
|
||||
{ "1", "1" },
|
||||
{ "2", "2" },
|
||||
{ "3", "3" },
|
||||
{ "4", "4" },
|
||||
{ "5", "5" },
|
||||
{ "6", "6" },
|
||||
{ "7", "7" },
|
||||
{ "8", "8" },
|
||||
{ "9", "9" },
|
||||
// { "zero", 0 },
|
||||
{ "one", "1" },
|
||||
{ "two", "2" },
|
||||
{ "three", "3" },
|
||||
{ "four", "4" },
|
||||
{ "five", "5" },
|
||||
{ "six", "6" },
|
||||
{ "seven", "7" },
|
||||
{ "eight", "8" },
|
||||
{ "nine", "9" }
|
||||
};
|
||||
|
||||
auto GetDigit = [&](const std::string &line, int i, bool ascending, std::string &result) {
|
||||
std::vector<std::string> tests;
|
||||
if(ascending)
|
||||
{
|
||||
tests.push_back(line.substr(i, 1)); // single digits
|
||||
if(i < line.size() - 2)
|
||||
tests.push_back(line.substr(i, 3)); // three-letter words
|
||||
if(i < line.size() - 3)
|
||||
tests.push_back(line.substr(i, 4)); // four-letter words
|
||||
if(i < line.size() - 4)
|
||||
tests.push_back(line.substr(i, 5)); // five-letter words
|
||||
}
|
||||
else
|
||||
{
|
||||
if(i < line.size() - 4)
|
||||
tests.push_back(line.substr(i, 5)); // five-letter words
|
||||
if(i < line.size() - 3)
|
||||
tests.push_back(line.substr(i, 4)); // four-letter words
|
||||
if(i < line.size() - 2)
|
||||
tests.push_back(line.substr(i, 3)); // three-letter words
|
||||
tests.push_back(line.substr(i, 1)); // single digits
|
||||
}
|
||||
|
||||
for(auto test : tests)
|
||||
{
|
||||
if(values.contains(test))
|
||||
{
|
||||
result = values.at(test);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
std::string first = "";
|
||||
std::string last = "";
|
||||
|
||||
// first
|
||||
for(auto i = 0; i < line.size(); ++i)
|
||||
{
|
||||
std::string result;
|
||||
if(GetDigit(line, i, true, result))
|
||||
{
|
||||
first = result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(first == "")
|
||||
std::cerr << "Missing digit in line: " << line << std::endl;
|
||||
|
||||
// last
|
||||
for(auto i = 0; i < line.size(); ++i)
|
||||
{
|
||||
std::string result;
|
||||
if(GetDigit(line, line.size() - i - 1, false, result))
|
||||
{
|
||||
last = result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(last == "")
|
||||
std::cerr << "Missing digit in line: " << line << std::endl;
|
||||
|
||||
std::string val = first + last;
|
||||
int val_int = std::atoi(val.c_str());
|
||||
std::cout << val_int << std::endl;
|
||||
total_pt2 += val_int;
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2023/1_old/Makefile
Normal file
2
2023/1_old/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -g -std=c++20 main.cpp
|
1000
2023/1_old/input.txt
Normal file
1000
2023/1_old/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
7
2023/1_old/input2.txt
Normal file
7
2023/1_old/input2.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
134
2023/1_old/main.cpp
Normal file
134
2023/1_old/main.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
#include <cctype>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#define INPUT_FILE "input2.txt"
|
||||
|
||||
int ParseNumLine1(const std::string &line);
|
||||
int ParseNumLine2(const std::string &line);
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs(INPUT_FILE);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Couldn't open " INPUT_FILE "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
long result1 = 0;
|
||||
long result2 = 0;
|
||||
for(std::string line = ""; std::getline(ifs, line); )
|
||||
{
|
||||
result1 += ParseNumLine1(line);
|
||||
result2 += ParseNumLine2(line);
|
||||
}
|
||||
|
||||
std::cout << "Part 1 Result: " << result1 << std::endl;
|
||||
std::cout << "Part 2 Result: " << result2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ParseNumLine1(const std::string &line)
|
||||
{
|
||||
char found[3] = { '\0', '\0', '\0' };
|
||||
bool found_first = false;
|
||||
for(auto &ch : line)
|
||||
{
|
||||
if(std::isdigit(ch))
|
||||
{
|
||||
if(!found_first)
|
||||
{
|
||||
found[0] = ch;
|
||||
found_first = true;
|
||||
}
|
||||
|
||||
// same as first, if only one
|
||||
found[1] = ch;
|
||||
}
|
||||
}
|
||||
return std::atoi(found);
|
||||
}
|
||||
|
||||
int ParseNumLine2(const std::string &line)
|
||||
{
|
||||
char found[3] = { '\0', '\0', '\0' };
|
||||
bool found_first = false;
|
||||
for(auto &ch : line)
|
||||
{
|
||||
if(std::isdigit(ch))
|
||||
{
|
||||
if(!found_first)
|
||||
{
|
||||
found[0] = ch;
|
||||
found_first = true;
|
||||
}
|
||||
|
||||
// same as first, if only one
|
||||
found[1] = ch;
|
||||
}
|
||||
else
|
||||
{
|
||||
const static std::vector<std::string> available = {
|
||||
"one",
|
||||
"two",
|
||||
"three",
|
||||
"four",
|
||||
"five",
|
||||
"six",
|
||||
"seven",
|
||||
"eight",
|
||||
"nine",
|
||||
};
|
||||
|
||||
int num = 0;
|
||||
for(auto i = 0; i < line.size(); ++i)
|
||||
{
|
||||
for(auto w = 0; w < available.size(); ++w)
|
||||
{
|
||||
const std::string &word = available[w];
|
||||
if(line.size() - i < word.size())
|
||||
continue; // not enough letters for this word
|
||||
|
||||
bool word_matches = true;
|
||||
for(auto letter = 0; i + letter < line.size() && word_matches; ++letter)
|
||||
{
|
||||
if(line[i + letter] != word[letter])
|
||||
{
|
||||
word_matches = false;
|
||||
break;
|
||||
}
|
||||
if(letter == word.size() - 1)
|
||||
{
|
||||
num = w + 1;
|
||||
// std::cout << "Found: ";
|
||||
// for(auto a = 0; a <= letter; ++a)
|
||||
// std::cout << line[i + a];
|
||||
// std::cout << " == " << available[w] << " @ " << letter << std::endl;
|
||||
break; // true!
|
||||
}
|
||||
}
|
||||
if(word_matches)
|
||||
break;
|
||||
}
|
||||
|
||||
if(num)
|
||||
{
|
||||
if(!found_first)
|
||||
{
|
||||
found[0] = num + '0';
|
||||
found_first = true;
|
||||
}
|
||||
|
||||
found[1] = num + '0';
|
||||
|
||||
num = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << "Return: " << found << " == " << std::atoi(found) << std::endl;
|
||||
return std::atoi(found);
|
||||
}
|
4
2023/1_old/sample.txt
Normal file
4
2023/1_old/sample.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
2
2024/2/Makefile
Normal file
2
2024/2/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main_pt2.cpp
|
||||
clang++ -std=c++2b -g -O0 main_pt2.cpp
|
1000
2024/2/data.txt
Normal file
1000
2024/2/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
6
2024/2/data_test.txt
Normal file
6
2024/2/data_test.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
7 6 4 2 1
|
||||
1 2 7 8 9
|
||||
9 7 6 2 1
|
||||
1 3 2 4 5
|
||||
8 6 4 4 1
|
||||
1 3 6 7 9
|
83
2024/2/main.cpp
Normal file
83
2024/2/main.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
std::istringstream input(line);
|
||||
long *last = nullptr;
|
||||
bool *increasing = nullptr;
|
||||
bool safe = true;
|
||||
for(std::string value; std::getline(input, value, ' '); )
|
||||
{
|
||||
long current;
|
||||
// Get the value:
|
||||
try {
|
||||
current = std::atoi(value.c_str());
|
||||
} catch (const std::exception &e) {
|
||||
break;
|
||||
}
|
||||
|
||||
// See if it's the first value:
|
||||
if(!last)
|
||||
{
|
||||
last = new long(current);
|
||||
continue;
|
||||
}
|
||||
|
||||
// See if it's the second value:
|
||||
if(!increasing)
|
||||
{
|
||||
increasing = new bool(current > *last);
|
||||
}
|
||||
|
||||
auto diff = current - *last;
|
||||
if(*increasing &&
|
||||
(diff < 1 || diff > 3))
|
||||
{
|
||||
safe = false;
|
||||
break;
|
||||
}
|
||||
if(!*increasing &&
|
||||
(diff < -3 || diff > -1))
|
||||
{
|
||||
safe = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if(last)
|
||||
*last = current;
|
||||
}
|
||||
if(increasing && last // actually made it through at least 2 values
|
||||
&& safe)
|
||||
total++;
|
||||
|
||||
if(increasing)
|
||||
delete increasing, increasing = nullptr;
|
||||
if(last)
|
||||
delete last, last = nullptr;
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
146
2024/2/main_pt2.cpp
Normal file
146
2024/2/main_pt2.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
bool GroupSafe(const std::vector<long> &group);
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<std::vector<long>> data;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
// add a row for this line:
|
||||
data.push_back({});
|
||||
|
||||
std::istringstream input(line);
|
||||
// for each value in the line:
|
||||
for(std::string value; std::getline(input, value, ' '); )
|
||||
{
|
||||
try {
|
||||
// add it to the row
|
||||
data.back().push_back(std::atoi(value.c_str()));
|
||||
} catch (const std::exception &e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DEBUG:
|
||||
// for(auto row : data)
|
||||
// {
|
||||
// for(auto col : row)
|
||||
// std::cout << col << " ";
|
||||
// std::cout << std::endl;
|
||||
// }
|
||||
|
||||
for(auto group : data)
|
||||
{
|
||||
switch(group.size())
|
||||
{
|
||||
case 0:
|
||||
// Go to next line
|
||||
continue;
|
||||
break;
|
||||
case 1:
|
||||
// Can't be increasing or decreasing because it's the only one, so I guess safe?
|
||||
++total;
|
||||
++total_pt2;
|
||||
continue;
|
||||
break;
|
||||
};
|
||||
|
||||
bool safe = true;
|
||||
|
||||
if(GroupSafe(group))
|
||||
++total;
|
||||
else
|
||||
{
|
||||
bool re_safe = false;
|
||||
for(auto i = 0; i < group.size(); ++i)
|
||||
{
|
||||
std::vector<long> check;
|
||||
if(i != 0)
|
||||
check = { group.begin(), group.begin() + i };
|
||||
if(i < group.size() - 1)
|
||||
check.insert(check.end(), group.begin() + i + 1, group.end());
|
||||
if(GroupSafe(check))
|
||||
{
|
||||
re_safe = true;
|
||||
++total_pt2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!re_safe)
|
||||
{
|
||||
std::cout << "Bad: ";
|
||||
for(auto val : group)
|
||||
std::cout << val << " ";
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total + total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool GroupSafe(const std::vector<long> &group)
|
||||
{
|
||||
bool increasing = false;
|
||||
for(auto i = 0; i < group.size() - 1; ++i)
|
||||
{
|
||||
if(group[i] == group[i+1])
|
||||
continue;
|
||||
increasing = group[i] < group[i+1];
|
||||
break;
|
||||
}
|
||||
|
||||
bool safe = true;
|
||||
int *last = nullptr;
|
||||
for(auto i = 0; i < group.size(); ++i)
|
||||
{
|
||||
auto next = group[i];
|
||||
|
||||
if(!last)
|
||||
{
|
||||
last = new int(next);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(increasing &&
|
||||
(next - *last < 1 || next - *last > 3))
|
||||
safe = false;
|
||||
else if(!increasing &&
|
||||
(next - *last < -3 || next - *last > -1))
|
||||
safe = false;
|
||||
|
||||
if(!safe)
|
||||
break;
|
||||
|
||||
*last = next;
|
||||
}
|
||||
|
||||
if(last)
|
||||
delete last, last = nullptr;
|
||||
|
||||
return safe;
|
||||
}
|
2
2024/3/Makefile
Normal file
2
2024/3/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp #-fsanitize=address -fno-omit-frame-pointer
|
6
2024/3/data.txt
Normal file
6
2024/3/data.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
mul(168,87)}*:mul(911,800)(%,)where()#&&$mul(734,19)?when()why(){$:?mul(829,495)do()mul(724,312){;^mul(520,383) mul(137,485)select()-mul(700,211) <(who()who()/mul(295,600)]~<select()'$why()do()when()mul(310,255)^}where()who()(!+mul(16,916),)what()@:@#where()mul(918,822),when()~/)mul(177,722)<&]:who()where()>mul(439,650)?+$mul(349,399)mul(807,317)what()?@[%mul(674,778)!mul(104,928)~[!!mul(60,636){where()when()&@why()-+mul(742,28)select()why()'&why()@>select()mul(527,483)mul(797,855)how()mul(502,647)what() {(*'}%mul(688,600))!??,+$mul(538,127)&from(),>~&*mul(963,787)~mul(820,259)~}~how()>do()what()^<}[?{'mul(202,9)$select(795,484);from()<!mul(913,93)/{{what()#-select()how()]mul(520,288),^&what()mul(583,623)mul(657,601)>;^@what()mul(671,74)&@how(151,76)!?:{mul(933,567)/)&select()do()>+,~?>mul(627,488) *mul(437,91){!#}%?how()who()mul(741,704)select():where()mul(258,129),&why():)mul(770,13)@ from()?-!what()$mul(229,613)from() select()why()};select()mul(59,263)where()from(97,930)?where()mul(514,278)(-don't()&$[how()why(783,866)&who(589,80)#; mul(130,239)don't()mul(195,249),~>>who()mul(945,698) /}how()>mul(983,248)[~why()({from()-(how()?mul(206,469)&>~who()]mul(661,410)how()&mul(768,601)/!--select()>,%mul(455,805)(}]how();<who(735,631)why()mul(216,340))what(181,514)mul(736,427)^when()]$%where()'<;mul(754,836)*@!why()select()]mul(869,551)~mul(752,713) <(~&@#mul(124,162)why()/mul(512,273); /where()why()mul(471,915)/(where():?}mul(608,515){[@:'select()[][ mul(983,96)%where(),why(){~-+]mul(102,860):#?select()%who(105,947):who(416,728)mul(765,635)@(mul(898,549)$where(580,81){mul(497,154)>/from())mul(728,180)'(what()[mul(915,20)who()+&don't()select()^)}$!who()+>mul(481,439)- *mul(332,923)when()-why()!mul(625,335)?mul(156,134)why()*'$:mul(104,186)^?#>/mul(605,863),,?mul(161,457)!#~,#~>/mul(514how()where(),'$;'$+)mul(207,90)&>$how()mul(394,95),where()'mul(827,742)how()[from()(]:/why()$+mul(46,294)>who()who()^@[^mul(500,356){]{mul(989,398)(}: mul(300,17):how()who()%?#@why()!mul(362,556)>$mul(29,294)who()<;when()mul(108,898),#<<~-*(where()@mul(86,710),'-$&what()(mul(573,832)),?{mul(953,794)why()^what()-*,/?)mul(511,634):how()/how()'what()what()mul(709,593)]mul(721,842)(!&why()where()&mul(259,304/$[*why()+#mul(932,748)? {mul(979,591)mul(576,282)(-when():^,select()>@mul(146,41){[<#(#'*}mul(615,174)&>when()what()&(mul(914,488)[~why(267,875)mul(167,385)+<%~}@![why()mul(221,316):,;[:@(!who()mul(340,617)&*how()%mul(151,744) >},-)'?mul(414,238)mul(100,868)%%what()where()mul(467,880):mul(266,276)!@!#'who()'mul(500,629)[#^select()*+how()(mul(538,599):* [;'mul(919,315)mul(760,200) <$/$}{why()'(mul(794,683)from()**'$,}}mul(915,608)>$$mul(114,893)what()select()do():^from()??from()from()^mul(316,793)>'/when()+mul(199,368)[~mul(539,838) ^(*??%mul(162,286){mul(647,357)who()$(>what()?,why()>from()mul(239,449){select()who()mul(408,790)mul(567,879)
|
||||
when(),who()[what()mul(874,22)mul*'mul(908,653)>~)@mul(773,355)#mul(716,195) ?@who()mul(128,574)^select(),{:mul(799,387)who()-)+]select()'mul[mul(153,811)from(854,516)select()'(',#mul(760,387from()mul(434,344)@?what(),&!'mul(108,675) 'who()%>+why()mul>]%select()[mul(793,13)mul(333,332)~why()/what()mul(774,658)**mul(375,739)[)*what()what(),>::>mul(702,335)%}{-@'~who();mul(992,903)}where()$(~@)'%mul(488,891)where()*);why()what():{&why()mul(29,881)&]where()where()~*mul(886,964)}&):where()who(){?mul(60,664)why()from()< +select()[when(789,49)$mul(40,510)<how()who()mul(755,503)mul(851,686)?#;}{{from()~'do()>from()~ who()>?from(431,14)%[mul(313,439)mul(999,227)[how()']what()(%,don't()who()><{#~'where()?mul(796,988)what()$/why()#select()/#what();mul(401{~mul(949,141)when()why())/^$$}^(mul(472,738){]:+mul(372,612)mul(647,895)>&$***mul(619,883)(;^mul(864,456-}#/?mul(68,612)~,}>from()!>-when()mul(997,365)mul(524,378)where()where()/!mul(301,937) ++?^what()mul(656,303)}{}mul(953,842);select()select()~[)<mul(617,87)where()what(517,442)~{mul(412,205)-?^?from()],+mul#?%#mul(389,357)how()!$<mul(809,511)who()>do() !;!mul(344,321)from()mul(819,403)+how()where()where()<($mul(908(,>%*why()what()^mul(533,374)-,select()mul(905,803)mul(140,691)what()([mul(874,79)]?how()what()?->mul(344,908)$#&#;from()!mul(256,631){where()#@,]~*:why()mul(225,679)where()?[mul(141,585)+)@~#how()mul(933,177)((+select()mul(312,241)+mul(247,632)how()^[,&from():where()%mul(663,72)![@@when()mul(274,536)>who()@mul(269,240)mul(732,115)!%@'%mul(479,836)-why()mul(502,828)#mul(548,385))mul(312,586)/&{//+{^mul(275,705)where(377,884)$ *!who()mul(382,713)+<@(<>)[select()'don't()mul(182,291)select()]:*select()where(872,531)what()&)mul(361,941)why()/+mul(832,469),-$)mul(753,874)^when(){,@mul(865,352),+#what()mul(749,612)!?#]from(),#mul(734,31)when()^mul(992,318)mul(396,187where()mul(134,182)&<&%$[>,mul(527,215)mul(400,794)'~what()mul(427,148)where()from()<<mul(867,258)<>-mul(495,578)where()}-don't()select()%+^{]what()where()mul(730,966)%$where()'mul(507,416)from()~)how(488,343) %<%>$mul(486,368)what()why()[mul}^^{who()what()[select()'why()who()mul(214,853)from()how(301,437)^):)]how()mul(657,161))(^@select()'mul(313,702)(mul(486,323)*&;&why(){'&how()-mul(911,603)-what()%mul(519,498))select():from()mul(652,991)!!/,mul(308,418)- &#+(who())~)mul(749,786);what()(mul(731,76)<!mul(572,33)/%:;select()from()mul(509,810)~mul(861,431)>do(){&what()$+-^how()mul(214,122)mul(540,414)from()mul(640,157)select()< #:;]^mul~mul(705,467)(?[}when()>where()?mul(45,584)~when()^;mul(519,782)}#when()+[mul(670,319?>]mul(451,604):mul(646,328)when()^mul(326,180)why();who();'$mul(642,425)from();?+when()]mul(907,636)what()%;do()what()?{who()mul(974,27)>{how()(^}mul(357,294)${~[@mul(983,221)who(){(!~from()^mul(128,197)*mul(942,48)>:+]{/from()#mul(237,772)<+select()@mul(361,84);why()]!)who()}+mul(740,305)&,[>]how()mul(660,613):)from()do() select()?when()%select() (mul(835,437)why();)</? how()mul(417,353)-( !select(480,286)mul(935,409)who()/*^+$mul(48,5)>how()mul(819<%/{how(675,621)where()@(>from()mul(722,49)
|
||||
+)do()%;!who()who(772,423)]$<-mul(328,361))mul(149,957))do(){#!where()>#what()(select()/mul(756,781) *-select()?why(713,643)mul(514,277)$]how()/^mul(7,203)%when()how()who()mul(389,589~]who()*>$^@mul(129,92)~;mul(759,369)how()*!&from()/when()%mul(650,562),*who()*'%when()mul(236,299) }?how()how():don't(),who()how()'why()who()what()@mul(322,510):-@:$@^mul(634,343)-what()#what()from(38,805),<+mul*where(835,107)where()&where(816,43)(%{mul(617,254)where()!^![ who()?;<mul(166,155),$*:<mul(827>/~*;why()mul(788,442))-what())!?(mul(662,916)mul(401,521)mul(234,405)+~,{>from() :{select()mul(635,416)+[~[,mul(562,550)mul(152,551)#]mul(164,957)~<what()#where()>from() mul(761$who()?--<where()+mul(795,259)[~{?<select()&:mul(229,87)mul(864,182)how()?mul(974,34),mul(627-mul(177,523);,^mul(45,82)[-!}mul(370,437)(#:];:(mul(818,270)'}^]when()how(934,258)don't()'{+*why()}mul(530,297)]^/$from()<who()*$mul(842,310)from()^/)%select())+mul(482why()select()&from(415,942)!]how()why()mul(279,984)~when()>}~'/who()when();mul(796,168)what()mul(199,983)>:]when()?why() mul(410,263) when()how()?mul(413,448)]mul(825,830)# mul$mul(261,686)@~{>{what(276,567)mul(341,638)who(){?*$[why(831,759)^ from()mul(741,711)'who()select(){mul(61,52)[what(){%don't():who()@mul(219!)?];where();' *mul(371,514)>[:mul(53,428!mul(538,853)]$#~do()@mul(200%{$$[$#$)mul(57,357)/mul(399,855)~<(*@~what()(@mul(814select():what()]~[#mul(507,982)**mul(68,893)}#mul(631,348)from()mul(205,133)mul(497,687from() !mul(728,117)[;)'@/}@{mul(678,169)who()@$@@~%how()mul(959,969)%@^&{~! ]%mul(324,123)'from()who()}^%mul(763,855)from()^when()#{ /from()#]mul(316,502)what())^<^%%mul(813,959)&why()~~-?-mul(798,375)$>{#'why()&:,why()mul(83,95)(don't()mul(798,687)when(506,624)from()(,how()^: ]>mul(149,563)why()~mul(41,612)-:?when()^/)mul(974,373)>when()?how()*mul(36,761)what(){&@)mul(390,671)when()mul(696,964,@when()@$/?~>~mul(548,987)select()what()% who();$mul(80,587)&^{+,don't()?what()*why(),( mul(124-^>how()/>'mul(155,901)?<;when()!!mul(90,13))/'^from()&[,)mul(805,998):@select()/~from()+(^/mul(823,626)%where()select()how()%&>mul(257,517))#->mul(304,899))mul(255?mul(302,286)>?@<mul(777,721)^&what() !from()/*where()mul(817,696)why()#+&who()why(351,81)}where()$mul(237,864)<&(do()^?from():*{<who()select())mul(975,616),{+where()/@@who()mul(549,977)@<)when(),mul(508+<$mul(716,515)^,-]who()#select()<+mul(118,226how()mul(543,380)(how()?select()from()@}mul(28,144);;'>mul(899,21)@mul(619,488)$->&^@from()(*-mul(266,282)/]from()@who(109,244)()mul(98,720)why()what()>;% mul(681,256)#~)]from()@&mul(517,40)@@what())mul(725,452)mul(852,71)?$mul(612,673*select()what())#mul(120,4),where()who())mul(808,259)who()'^~mul(325,215)!>select()~mul(853,581)%why()mul(652,100)%<select()##what()~mul(237,441)when()!how(753,120)^mul(890,518)from():,who(196,65)+#$ mul(664,43)}%^how()/from()[[when()mul(39,906)mul(324,714)#[#from()mul(569,489)'<who()*@mul(167,880)*select(){>^@don't()/,when()~what(),+&mul(975,420){+*when()]^how()*why()who()mul(448,331)!/when()~mul(235,190)^$}+*++{#mul(96,137):?%where()mul(511,78)};^{&:when()!don't()&when()''&#:{mul(205,318)*!where()?when()~/&from(733,701)?mul*#&#where()where()]{select()mul(474,265)from(755,678)why()!;#]'>-]mul(132,817);&)]^*what()[mul(831,118)select()<mul(181,530)%)mul,])!<>+how()how()mul(292,875)%&select()[@*mul(868,274)&@select(),{mul(427,903)/@]mul(620,307-+what()select()-where()mul(206,860)-mul(937,784):where()!+mul(347,517)#!/usr/bin/perl(select()~from()mul(730-,what()!where(360,351)what()*how(600,916)mul(929,974)
|
||||
~]#<!when()[~*<mul(132-+why()#%*~:@mul(416,703){@#';>mul(190,848)?{from() }where()<mul(527,529)-mul(209,184)?[what()when()mul(77,529)why()how()<#who(360,918)-mul(417,741)where()what(269,273)from()(mul(322,695)select()@^][don't()]mul(739,357)']when(789,549)/:&when()>mul(532,685)#+~^&]^where(947,658){mul(835,556)mul(785,197)@mul(20,129)>(%*$?,%^]mul(309,855)(!select(){[?](mul(408,217)+;who()why()-&$ ,$mul(824,38)&mul(848,553)@where()who(774,973)-[;mul(590,491)what()'/mul(625,672)!}~~%>-{]-mul(113,831)}+//>(what()mul(822,256):<*$!select()mul(743,335)how()^* (<mul(341,513)do() {,(how()*,^&mul(777,587){>^what()'{[,select(249,901)mul(795,853)@$;mul(486,10)>>?~mulwhere()<~}mul(375,790)/}when()*!mul~-select(){select()select()<]don't()''-'mul(934,731)select()';*select()&why()mul(280,932>mul(530,961)how(),-{how()&what()>(mul(285,204)who()+select()>~>?/<)mul(791,587)from();~mul(142,801),from()~>when()mul(636,737)mul(122,583)select()mul(29,534)[<}>~?;++,mul(853,461)where()&/where()>do()what()where()mul(224,748)when()(from()$%>mul(537,689)@how()from(97,626)%!mul(854,118)when(998,592)-+>how()'when()/mul(548,649)who()who()#) &@!,do()}[^[@mul(154,777)mul(96,225)when()mul(951,144)what()mul(358,785)select()+from()what()-$mul(507,770);select()where()where()mul(696,121)who()when()]&$}how()what(){mul(63,669)+*where()/why()mul}&@where()!?'@;mul(81,559)*]how(372,376)mul(602,773)+mul(511,514)) (,}mul!#%$where()from()%~?>+mul(451,596);from()mul(719,514)^who(533,943)}how()@mul(382,562)!#[,@*)>mul(234,778)&-mul(280,479){, [do()how()!&{mul(971,30)'@why()) ?:+>don't()where()%from()/*&&!mul(551,129)where()!when()@@>[$mul(266,378)&mul(354,236)where()who()mul(198,648)when()~<[what()what()mul(215,213)mul(687,432){,mul(595,927)+<why()*@how()*{%mul(764,459)>who(829,436)^+mul(424,283)@why(),mul(169,939)/[*from()> %!(mul(537,425)%^mul(352,791)*#when()when()-&;what()mul(904,80) select() how()how()mul(34,66)@%<mul(276,65)where()when()how()})mul(52,448)who();select()mul(692,130)what()${%&^%mul(444,170)[)(,<mul(297,209)%&]select(170,397)$mul(577,234),select()^:~,[*>do()mul(921,346)/#what()mul(49,901)mul(734,885)/)(:mul(553,997)(who()mul(62,853)from(535,930);where()#what()mul(457,969)&(+(*}why()mul(317,972)where()when()$do()why() why():~%:^mul(447,529){mul(612,477)how()$when()mul(66,532)>$$*mul(945+*<how(289,725) who() what()how()how()}mul(304,883)select()^':{/':'-mul(715,525)!mul(270,804)from()::['when()why()mul(93,166),-when()!mul(736,616)+;mul(531,606)<how()&[+&mul(967-^'}+-}from()mul(178,389)who()<*mul(116,273)#);#select()mul(628,521)@}where()<where()(;how(376,88)<mul(99,450)}<how()$mul(612(mul(214,455)?:mul(841,59)~~mul(162,250)^]#&>*^)who()mul(291,880)/mul(903,311)*;how()mul(58,539)]-@+&%),what()mul(501,878)*[[mul(626,427)]}how()?when()[mul(280,653)/when()]-<mul(765,466)~-<(select()}{){do()from()*where()!;mul(701,836)'~mul(529,579);!:'+@/'mul(54,282)^<'mul(792,927)&mul(470,236)who() @ ])+??mul(693,230#+~?:-^mul(814,574)from()<when()@#mul(430,705)where(),when()@*$!what()$how()mul(95,323)who()when()mul(38,704)@{where()why(),from()where()[{<mul(455,604)}where()from()~mul(719,681)mul(131why()^where(389,683)**mul(331,541)-}{mul(320,970)
|
||||
:}#mul(737,307) *?)~,]mul(740,642))><mul(666,137)why()where()where()from()why()$ mul(709when(),select()*]when()(mul(510,937)&+>where()why()mul(235,299){;select()mul(543,852)>mul(456,133)(>mul(671,153)'?*who()(mul(12,640)<{##+mul(432,266)*>)'[~>$~?mul(816,840)what()-mul(698,399)how()mul(45,603))~*what()mul(737,715){when()why()~from()mul(995,968)where()mul(262,96)^?who(){; )from()who(615,278)mulhow()mul(838,616)}from())mul(865,576))~-;how()mul(192,403)))[-$]^select(),mul(184,369)#why()*^;)(do()#,'mul(423,897);)]what()/[$]mul(867,533)select(138,395)*-how()mul+#<why()}[~{mul(925,163)<mul(798,343):mul(137,381)~/>;mul(515,882)]:(mul(364,946)&!&,how()select()- mul(111,167):~$from()^]don't()&mul(829,425)!'/how()where()]/<what()mul(521,742)mul(316,792)mul(311,104)from()<%mul(869,189)^&why()[&:mul(683,138)how()mul(533,311)from()%what()@mul(785;select()~?{}++where()mul(102,590)}&what()}(^[<:mul(997,376)'@/$;mul(25,111)~+$]^;+?mul(786,845)@why()&mul(737,79)''from(340,968) how()where()^?mul(803$select()*why()!select()*/%-mul(450,746)who()-(from()where()when(525,894)mul(110,878)-%select()$)@;mul(445)]-~~*/)&mul(205,632)$[^}select(599,536)how()how()who()]mul(952,986)who()/#*:]who()+/mul(346,355)^where() don't()@who()?+&;mul(617,393)&how()>mul(195,257)*mul(953,79);who()when()$,from()<>why()mul(529,405)from()&mul(492,793)&#*[;+;-mul(331,898)?/{+}mul(424,343)$~[mul(523,74)why();mul(772,703):;mul(17,157)! }why()/]!^mul(979,338when()$?mul(898,616)}why(359,279)+from()what())}$from()!mul(612,784)(where()mul(640,368){#!mul(69,807)]how()( #mul(739,987)'*~&%who()!}@mul(834,525)when())::$mul(122,894)%+^(who()@when()%mul>when()from()?mul(464,80)$^! !/@?@,mul-what()!!@:[mul(283,21)([how()[mul(11,617)]}where()/mul(976,268)mul(843,731)<how()why()[mul(601,412)%how()!]@*why(136,791) -mul(371,365)@~$*'~[/ mul(15,594)how(),/{#-}>'mul(676,131)where()}{(]'where()mul(459,88);(where():mul(64,747);[&$})+select()&;mul(750#[{;*&mul(458,334)?where()select()%)mul what()?when()mul(808,879)what()*}-$+from()where()@mul(152,857)'#%where() /<:+?mul(304,149)from()!<when(865,985)mul(238,815))~!+<)@from()mul(401,975)%&mul(625>*!mul(802,11)!*select(),; )-;how()mul(199,993)/!when()^;[)mul(577,723)!?^who()+what()<mul(489,809)~what(625,812)<?;*#)how()do()!(]who()what()where()*from()+mul(705,108)(who()why(815,180)[]^[mul(821,379)&^(&<,%mul(197,678)%-what()mul(944,295)select()how()!mul(357,711))$-what()'&)'mul(114,910)}<*@-from(688,563)[mul(279,269)from()}$mul(707,287)<;*+what()*>when()mul(447,881)+'(+&@&do()mul(192]what()%/mul(463,832)mul?^*>why()where()from()what(){*mul(456,920) $where(911,93)select()+who()select()}don't()}!how()what()~+what()mul(404,558)>,>{(?{'&,mul(936,304);mul(232,989~;>]who()mul(582,897)*!mul(11,23),~>!{<who()$>mul(542,522)^;,from()(?mul(177,928)how(985,316)}who()@](-#why()mul>~why(851,863)[)!@>mul(101,448)select()+?%&select()~((mul(11,450)how()^)mul(344,639)}+;mul(343,648)^why()!where()&{/'#mul(9,810)where()-%mul(877,263)&select();where(240,275)[mul(289,282)how()&<{who()} ['do(){mul(818,421)/}$]mul(617,829)~['why()?&~)mul(741,559)mul(133,701)$]:@&mul(594,307)[',how()^{how()mul(388,657!({'mul(492,896)#@/why()why()mul(127,225)}>where()-/,^mul(219,314))mul(682,893)what()why(){(,from()(?mul(219,360)what()' ](mul(80,569)
|
||||
select(82,585)mul(693,510)%$what()from()mul(740,749){~'<]mul(281,263)when()(!?>/% +mul(116,41)-*-when(506,165)?^}mul(651,943){~,/what(){#{!mul(629,41)/mul(74,998)?mul(525,86)&how()do()+/%mul(15,103)#select(671,57)from()who()]mul(309,559)%>mul(311,459)'when()@#mul(980,750)when()+%how()how()~:mul(484,554) )+{ - :]mul(113,626)[^<%,mul(187,326)*:!]*!mul(374,45)from(),mul(41,137),^)-,#when()?who()mul(93,289)select(853,56)]^where()mul(43,349)*where()mul(406,653)from()from()*&*mul(486,350);)*~how()mul(817,387)>>when()who():mul(417,224)^!&{from()}@mul(342,365)why()^who()+~!}when()do()why()when(939,686)^)((mul(160,438)what()>mul(23,766)+]*mul(618,433[/~where()[;why()what(){mul(292,318)*$why(664,963)how(68,975)why()who(276,89)where()!why(777,555){mul(875,358)@'[#who();)mul(198,992)?:(?~where()what()how()-'mul(956,332)mul(889,561)from()((what()mul(753,443)#>? , -mul(267,527):when()+mul(225,923)>>?^mul(726,980)~when()'mul(760,283)!;why(),;when()mul(358,713)//select()]%^{why()*'mul(406,429,(: {how()!^;mul(363,272)--where()*:select()when()?when()mul(242,130);why()>:!&why()$mul(386,685)@!}>when()why()>how()how(872,684)mul(418,627)why()[{:[-%mul(946,701)(}mul(10,874)&mul(109,151)],mul(676,79:;]}),mul(206,822)mul(228,261)-how()?]+mul(295,706)/]@( how()-mul(558,819)@::!>where()*when()?}mul(709,558)*)~;?}> how()from()mul(489,495)[*where():}(*%mul(189,692)how()/where()why()(mul(895,190))]<select();'who()when(309,317)mul(204,524)from(),&# mul(563,48)what()mul(207,241)&mul(450,18)when()what()select()^]{$why(565,783): mul(422,431){,}?+how()what()where()mul(782,229)[%}:~mul(994,946)){,$*,mul(84,333)#?@^]mul(324,259)<mul(723,626)*)/select()mul(22,373)from()mul(158,952) #mul(862,250)'$#;{mul(816,365)&$who(930,819) mul(440,442)^@@mul(35,883))>{+mul(904,446)~(?-*:select():]?mul(21,770){&?/what()mul(810,761)( <{#^why()select()mul(542,583)mul(517,719)*who()]mul(229,391)^:,;where()who()[&mul(181,416)>when()( %+{mul(376,885)+}/}*what()[%when()mul(412,213)who() mul(151,478)do()+when()mul(683,117)@how()[@>(*%mul(666,434)%+mul(83,30)^}:mul(983,213)@-what()mul(36,788)';%-#+]#mul(575,6)#when()'&@who()<$ who()mul(764,292)<,where()where()mul(230,519)<<^('mul(384,769)%,what()@who()when()where()when()mul(104,361)&select()what()-!mul(523,283)do()mul(920,551)mul(589,394)$(select()?#>&*'mul(672,365)+:]@$)mul(373,982)mul(810,292)-mul(990,386)?mul(372,766)where(),]^mul(651,898)from()from(){?;select()mul(293,197)why()( [;&^~@mul(505,310)what()what()select():]-what(873,670)mul(885,505);-#{';-how(967,119)select() mul(956,774)mul(51,516)mul(756,597)^~select()how()%&from()mul(463,747)&why()who()())mul(193,948)from()when()what()why()from():select()%select();mul(143,694)(mul(448,194)@<(-where(536,660)?select()mul(280,832)select()#^}mul(296,908)where()@{> #*do(); ;how()mul(417,4)mul(939,57)&'~?-'(#do())[where()+<<where()mul(223,643):%/mul(367,601)}*}[mul(451,653)why()<when()from();(#<;mul(960,745)>%:?(}mul(975,356):,select(275,833),#?(when()&]
|
1
2024/3/data_test.txt
Normal file
1
2024/3/data_test.txt
Normal file
@@ -0,0 +1 @@
|
||||
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
74
2024/3/main.cpp
Normal file
74
2024/3/main.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <regex>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
bool multiplying = true;
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
std::regex pattern("do\\(\\)|don't\\(\\)|mul\\((\\d+),(\\d+)\\)");
|
||||
auto pattern_begin = std::sregex_iterator(line.begin(), line.end(), pattern);
|
||||
auto pattern_end = std::sregex_iterator();
|
||||
|
||||
for (std::sregex_iterator i = pattern_begin; i != pattern_end; ++i)
|
||||
{
|
||||
std::string result = i->str();
|
||||
|
||||
if(i->str() == "do()")
|
||||
multiplying = true;
|
||||
else if(i->str() == "don't()")
|
||||
multiplying = false;
|
||||
else
|
||||
{
|
||||
std::smatch::iterator ip_it = i->begin();
|
||||
std::vector<long> numbers;
|
||||
for (std::advance(ip_it, 1);
|
||||
ip_it != i->end();
|
||||
advance(ip_it, 1))
|
||||
{
|
||||
std::string n = *ip_it;
|
||||
try {
|
||||
numbers.push_back(std::atoi(n.c_str()));
|
||||
} catch(const std::exception &e) {
|
||||
std::cout << "ERROR: " << e.what() << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
long result = 1;
|
||||
if(numbers.size())
|
||||
{
|
||||
for(auto n : numbers)
|
||||
result *= n;
|
||||
|
||||
if(multiplying)
|
||||
total_pt2 += result;
|
||||
total += result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2024/4/Makefile
Normal file
2
2024/4/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
140
2024/4/data.txt
Normal file
140
2024/4/data.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
MMSAXXMMMMSMSMXMXSSMAMSMSXMASMMAXMASMMSMMAMXXMASXMXXXMSASXSSMMXSAMXXMAXXSMSMSMXXAMXAXMMMSMXAMMASMSMXAMXXMMMMSMSXSAAMXMMMSAMXSMMMMMSAMMSMSXXX
|
||||
MASMMSMMAMMAMMASXMXXAMXMSXAAXAXAMXMXMASXXASXSSSMXXMAMAASXXSAMXASASASXSSMMASAAMSMSMSXSAAAAMMMSMMMMAMSASMMMMXAAXXAXMMSAMMSAMXAAMASAMMASAAMSMMS
|
||||
MMSMASMSAMMAMSMSAASMMSAMSMMXXMMXXASXSXXASXSAASAMXAAAMMSAMXSXMMMSAMASMAAXMAXMAMSAAMAAMMMSASAAAAXASMMAAMMAXAMMSSMXMMASASXSAMMSMSAXAXSAMMMSXMAA
|
||||
XSXMXSASASXMMMASMMMAXXAMXAXMXSAMSXSASMXMSSMMMXMSSSSXSMMASASASAMMAMSMMSMMMMSSMAMSMMXSSMMMMAMMSSMASXMMXMXXMSSXAAAAMMAMSMXSAMAAAMMSSMMASAMSAMSS
|
||||
MMMSMMAMAMXAAXXXMXMXMMMMSMMAMMAMXAMAMXSXMAXAMAXXAAXMAXSAMASASMSSSMAAXMAAAAAAMXMXSXAMXAXSXSMMAMMAMAXXXMSMAAXXMMSXSAASXMASAMSXSSMXAASAMMMSAMMX
|
||||
MAAAAMAMXMSMMXMASMXXMASXSAMSASMMSAMXMAMMSMMXSMSMMMMXMMMSMMMMMMXAMXSMMXXSMSXXMASXMMAXSMMSXMAMMSMXSAMXAAMMMMSMXAXASMSAMXMSMMMAMXXSMMMXSXMMXMAS
|
||||
SMMXMXASAMASAAMAMAXMSMXASMMMMSAMXMMXMASAAAMMAMAXXAMMSAAXXXAMSXMXMXMAAMMXXMXMSASAXSXMASAXAMMMXAMMSXMXSSSXXXXAMMSMXMAXMSXSAAMAMAAXXSXMMAMXAMAS
|
||||
AMSSMXMXMMAMSSMAXSAMXSMAMAASXSMSAMXASASXSAMSASMSSXMAXMSSSSSMAAMXMMSAMAAMMSAMAMSMMMMAXMMSAMSASASAXASAMXAXSMMXMXMXASAMXSASMMMAMXSMMSAMSAMMXMAS
|
||||
SAAAMMSSMMAMAMXMMXAMAXMXMSXSAMXSMXSASASAMMXSASMXAXAMXSAMAAAMSAMSXAMAMXMAASASMAXXXXASXAXMXXSASAMXXAMAMMMAASMMSAXMAMASAMAMAMXSMMAXAMMMMAMXAXAM
|
||||
AMSSMXAAASMMMMSMAMAMASXSMMMMAMAXMXSAMXMMXSAMXMMSMMSMMMASMXMAMAAXMSXMSSXMMSAMXAMMMSAXMMMSMXMAMAXMASXMMAXMMMXASXSXMSXMAMXMAMAMAMSMXSXMSAASMMAS
|
||||
XMAMAMMMMMAMXAAMSSSMAAAASAAMMMSXMAMAMXSAAXAXXMASXAAAASAMXAAASMMXXMASAMAXMMMXMXSAAXMMAAAAAXAASXMMAMAASMSSXXMXSMSAASMMXMSSSSMSAMAAASAMXSMSAMXA
|
||||
AMMXXMSAMXMMMSMSAAXMASXMSXSMSAXASMSMMAMMSSMMSMASXSXSMSXSMXMMXMSMSMMMASXMXAMMMASMSMASMMSSMMMAMXAMXSMMMAAMMXMSMASMMMAMAXMAAAXXASMSMSAMAAXMASMS
|
||||
XMSMSAMMSSXAAMMMMSMMXMXXXMXXMASAMXAXMAXMXAXAXAAXAMAMXMASAAMXMASAMMMSAMXSSMMAMMSAXXAMAXXAASXMSSXMMMMSMMMSAAMAMXMAAAXSAMMMMMXMMMAAXSMMSSMMAMAM
|
||||
XAAAMAXSAMSXSMASAAMSAMMSMMMAMAMMMMMXSASXSMMXSMXMXMAMAMSMSXSASMMSMAXMMMAMMMSXMASMXMMSSMMMMMAAAXMXMAAXASASMMSASXSSMSAMAXXXASAAASXSXMAMAAAMAMAM
|
||||
SAMXMMMMMMMMMMAMXSMSXSAAAXSXMXAMXMSAMXSAAXAMMASMXMXMSMMAAXXXSXAAXXSASMXSAAMXMASXMAXAAXAAAMMMMSMSMMMSAMXSAMXMMAAXAMASAMXMASXSXMXXASMMXSAMXMAS
|
||||
XXXMAAAXMAXAXMMMAMXMMMXSSMXXXXSAMXMASMMXMMSSMAMMAAMMXAMMMSMASMSSSMSAMMAMMXSAMASMMSMMSSXSMSAMXAAAAMAAXAAMXMASMSSMXMXMAMSAMXMMMMSSMMAAXMMSASAA
|
||||
XXSXSSSXSASXMSAAXXSXAAAXMASXMXMAMXSAMAMAXMXMMXSSXMXAXXMXAAMXMAXMAXMAMMSXSASXSAMXAAAMAMXAMXMSSSSSSMXMAMXXAMXSAAMAXMAMSXSAMMAXAAAAXSMMXSASXSMM
|
||||
AMXAMXXAMXXXAMXSMAMMMSSMXSMASASASXMMSASXSXXMAMMMAAMMSMMASXSXMSASXMSMMAAAXAMMSXMMSMSMASMMMAAXXAAAAAXAXMMSSSMMMMMSMXMXXASMMXMMMMSXMMAMXMASXMMX
|
||||
MSAXMAMSMSMMMMAXMAMXAAAAMASAMASAMMAXSASAMAMMMAASMMSAAAMXMAMMMMMMAMXSMXMMMAMAMAMAXAMMMMMXMMXXMMSMMSMSMAAXXAXAAMMMMSMMMAMAMXXASMMXSSMMAMXMXMAA
|
||||
XSAXMXMAAXXAXAAXSXSMMSSMAXMXSMMXMSMMMMMAMSAMXXXSXAMXSMSASAMMXSASAMAXXAAXSMMSSMMAXAMXMAMMMMMSMAAXXXAAXMMSSSMMMMAAMAMAMAMAMXSXSAMXMAAXMAMSASAS
|
||||
XSAASAMMXMSMSMMXMAMAXXMASXAASAMMAAAMXMSMMMSSXSSMMMSAMXMASXMXMSASMSSSMSSMXMAXAXMMSSMMXASAAAAAMMSXMMSMMSMMAMMSXXXMSASXSXSAMXSMMXMAXSMXXMMAAAXX
|
||||
MMAMMAMXXMXMAAMAMSMSSMSXMMMMSAMXSXSMXXSAMXAXMXAASAXAXXMAMASMAMMMXAXAAAAMSMMSXMAMAXXMSASXSMSMSAXAXAXXASAMXMAAMXSASASAMXXXXMMAXMSSXMSMMMSMMMMX
|
||||
AMXMMAMSMMASMMSAMMAMXAMMXXSXSXMMXXAXXAMXAMXXMXSMMAMSMSMXSAMASXMMMMSXMSXMMAXMASXMASXMAAMAXXAXMASMMSSMMXXMAMMXSAAMXMMASMMMMMSSMXAMXAASAAAXXAXM
|
||||
XSASMSXMASAMSASXMMAMMAMSMXMMSASASXXMXMSMSSMMSAMXSAMAAAAMMXXXXXMASMSXAMAMSSMSAMMMASXMMSMAMMMSMAAXAXXMSXSMXXAAMMMAXXXAMAAAAMAMXMASMMMXMXSXXMSS
|
||||
XMAXAAXSMMMMSMMAMSXMXAAAASAASAMAXAASXAAMAAAMSASAMASMSMSMMMSSMXSASASMXMAMSMAMASMMASAXAXMAXAXAMMMMXMAMXASASMMSMXMSMSASXSMSMSASXMASAMSMSXMAASAX
|
||||
ASAMXMASXMMASAMSMAASXSMXSMMXMMMXMSAMMXMMSMMMMMMXMAMAXAMASAXAAAMAMAMAXSMMXSAMSMMXAMAMMMMMSMXMXXXXAMAMMAMAMXMAMXAXAASMXXXXXMXMXXAMAMAAMAMSMMAS
|
||||
MXMSXXXMAXMASAMXMMXSAXXMMAXAMSSMXMAASXSAXAAMAMXMASMXXASMMMSMMMMXMAMMMMAMAXXXXMSMSSSMAAXXAXAAMXMMXXAMSAMXMASMSSSSSMMXXMXMAMMXMASXXSMXMSMAXMMM
|
||||
MAMXXMMSSMMMSMSXMXMMAMSSSMMMSMAXXXAMXAMMSSMSASAMMAAMMMMAAAAXAMXMMXSXASAMSMXMMAAAXAMMMMSAAMSXSAASXSMXSMXMXMASAAAAAXSMMXSAAMSAMXMAMXXAMXMMXMAS
|
||||
SASAMXAAAXXXMASMXAMMSMAAAXMXAMMMMSSMMXMXAXMSXSAMXMSXSSSSMSSXXMAXXAAXAXXMAXMMMSMMMMMMSASMSMAASMMMAAXASASMSSMMMSMXMASASAMSMSMXSMSXSASMSASXMSAS
|
||||
SMSASMMSSMMXMSMMSXSAAMMSMMSSMSXXAAAMXXXMASAMMSAMXXXAMXMXMAMXMSASMSMMSXMSMSAXMASXAXAXMASAMXMXMSMMMMMXXAASAAASXMXMMXSAMMXAXAAAMAMAMASASMSAXMXM
|
||||
MAXAMXMMXMMMMAAAXAMMXMMXAAMAMXXMXSSMXXMMXSXMASAMMMMMMSMSMSSMMAAAAXXAXXXAMAAXSASMMMXSMMMMMSXAAMXSAXSXMMMMXSMMXSAMXAMAMMSSMMSMMAMSMAMAMAMMMXAM
|
||||
SXMAMXXMAMSAMSMMMAMAASXMMXXAMXMAMMXAMMXSAMXXAXMMAAAAXMAMAAAAXMMMXMMXSXSAMXAMMXSAMXMXAAAAAXXMSMASXSMAXSASXMASXSASMMXAMXAMAXAMSMSXAXMXMXMAMMXM
|
||||
XMAXXMAXMSMXXAMXMSMSMSAMASMAMXASASXSAAAMASAMXSASXSSSXMAMMSSMMXMXAMMMSASMMMSXSXSAMSMSMSSSXMXXXMASXAMMMMASMMAMXSAMXMAXSMASXMXXXMAMXSMMMASAMAAA
|
||||
MASASMMSMAMSSMSAAAAXASXMAMAAAMXMSMAXMMXSAMAXAAXMAXAXASMXMXMAASMSXXAAMAMMAMXAXXSXMAXAMMMXAXMAMSXMMAMSMMAMXMASXXAMMSXSAMAMAASMSXSSXSAASASASXSS
|
||||
ASMAXMAAMMXMAMSMSMSMMSAMXSSMSAAMAMMMASAMXSXMXSMMXSASXMXAXAXXXAASAMMSMSSSMSMAMMMMSSSMXSASXMSAMXAMXXAAAMASXMAMXXAXXAXSAMASMMMAXMASAMSMMASAMAAX
|
||||
SAMXMMSMSSSMMMXMAMAAASAMMXMAXMXSAMASAMMAMXAXSAMXAMAMMASXMSSSSMAMAASXMMAAAXXAMXAAXMAMAMXMMMMMSMSMASXMXMAMXMMXSMMMMMXMMSMXAAMAMSAMMMXSMMMXMSMS
|
||||
XXSXXAXSMAAAASXSMSSSMMASMMMMMSAMXSXMAMSAASMMXAMMMXSMXAMMAXXAAXMMXMXASMSMMMSMMSMSSXXMXSAMAAAXAAAXXXAXXMXMSXSASAAMAMAAXMASMMMSAMAXXXXAXMASMAAA
|
||||
MASMMMSAMSMMMAAAAXAMXSAAMAAAAAMAAMMSAMSXMSASXSMSMAXMMXXMMXMXAMXXMMSAMAXAXAMXXAMAMASMMSASXSSSMSMSMSMMXSAAXAMAXAXSMMMSMMAAASAMXSSMSMSMMXAXSMSM
|
||||
MAMXAMXMXMASMMSMMMSMMMMSSMMSSMXMXSAAXXXMASAMXAAXMASASAXXSMSAMSAMMMMMXSMXMASMSMMXSASAMSXMAAAAAAAXAAMMASMSMMMSMMMMXSXXAMXSMMMSMMMAAAAXMXMXMXXX
|
||||
MSSSSSSXMXMXAXXXXAAXAAMAMXMAXXASAMXSXSMSMMMMSMMMAAMAMXSAAAAXSMMXSAMXXXXAMMAAMMMMMASXMXASAMXMMMSMSMSMASAXXXAXAXMAXMASXMAXAAMXMAMSMSSMSAMAASMS
|
||||
AXAMXAAAAAMSSMMXMSMSSSMSMSMAXXAMMMXXAMAAXMSAAAMMSXMXMAMMMMMSMAMAMXXAAMSXSSSXMAAAMXMXXXAMAXMASXMAAAMMMMMMAMSMMXMAMAMXAMASXMSASAMXMAMXSASMXSAX
|
||||
XMXMMSMMMMXXAAXMAAXXAMXAASMSMSSMSMAMAMSMSAMSSSMAAASAXAAAMMXMMAMMSSMMXAASXAAAMMSMMASASMSSSMAAAAMMMSMMXAAXSAMXSMSSMXMSAMMSMASMSSMMMXSXSAMXAXMX
|
||||
MXXXAAXSXSMSAMXAXMXMMMMMMMAXAAAAAMXMAMXAMXMMMAMMSXMASMSSMSAMSXSXAAAAMMXSMMMMMXAMSAXMXAAAMMSAMXXXXXAMSSSMASMAXAAAAAAXASMMMAMASAMXXAXASXSMMMSS
|
||||
ASMMSMSAASAMMSMSAXSSMSASMMSMMMMSMSAMMAMXMASASXMAXAMAXMAMAMMXAMXMMSMMSSXMASXXXAAMMMMXMAMAMAAXSAMSASMMAXMMAMXSMMMSMAMSAMXAMSSMSAMXSMMMMMMASAAX
|
||||
XAAMASMMXMAMAMAMMXAAAXAXAAAXAXXAAMXMAAXASXSASXMASAMXSMXMAMSXMMMAXXAXAAASAMMSAMMMAXAAMAMXMAMAMXMSAMMMXSMMMSSMASAXXAMMMMXXMAXXXAMAMAAAAXSAMMSM
|
||||
SSXMMMMXMMMMMSMAXSMMMMSMMSSSSSSSSMASMSMMXMMAMXMMXXXMAMXMSXMASMASXMSMSSXMXSXSASMSMSXSSXXAMMASMSAMAMXXAMAAMSXSAMXXMMSXAASXXMASMMMMSSSXSMMMSAXX
|
||||
AXAXXXSAMSAMXMXMASASAMXAXMAAXAXXAMXSAAAMAAMAMXSAAMMMAXMAXASAXASXMAMAMMMSMMASXMAAAXAXMMMAMXAXAXASAMMMXMMMXMAMXXSXSAXXMXMXAMAXAAMMMAAAMMSSMASX
|
||||
MSMMXXMAMAAMMMMMASMMMMSAMMMMMMMSMMMMMMASXSAASXAMSMAXSMMXMAMASMAXAMMAMXAAAMAMAMSMXMXMAAXAMMMSASXMXAXSXSASXMXXSASASAXSMSSXXMSSSMMAMMMMMAMAMMMX
|
||||
MAASXSSMMSSMXAAMASXXAAMXMXAMXXMSSMASXXXMAMMMMMXMAXMMMXMSSSMXMMAMSXSAMMSSSMSSXMAMXSAMXMSMSAMMMMAASXMAMSAMXMAMXAMAMMMSAAMXSXMAXMMMSAXSMMMAMAXM
|
||||
MAXAAAXSAXAXSSMMMSXXMXMAMXMXSAMXAMSMMSMSAMXAXXAASMSAMAMXAAMXXXMSAASMSAAAMAAXMSASASASAXAXMXSXSSMMMMMAXMMMMMASMXMXMASMMMMAXAMMMSAMXMSXAMXAMSXS
|
||||
MSXMMMMMMSMMMXMSSMXSAMMSMAXSXAASXMASAAXXASMMXSAMMASXSASMMMMMSMSAMMMSAXMXMXMAXSASASASXXXMAAAMXAMSSXSXSAAAXSASXAMASXSMSSMMMXMAAXASXMAXSMSMSMAA
|
||||
SMAMASXXAAAAXAAXAAMMAMAXSMXSAMXXXSASMMSXMMAMAMMAMAMASASASXSXAMXAXAXAMMXMAMXMAMAMXMAMAXSSMSSMSAMXSAXXXXSSMMASMMSASXMXAAAAMSAMMSMMMMAXMAAXAMMM
|
||||
MXMMASMXSMSXSASXMMMSXMAMAMASXMMMXMAXMXSAMSAMAXAASXSMMAMXAAXMMMAMXMXSXMAMAMAMMXASAMAMXMMAAAMMSAMXMXMASMXMAMAMXXAXXAMMSMMMMAAXXAXAAMMSMSMSMSMS
|
||||
SMAMASMAMMMMMAMXXMMSXMMSSMASAAAMAMSMMASAASASXSSMSAAXMXMXMAMAASAMMSAMXSASASXSXMASASXXMAXMMMSAXXXASXAAAMASXMMSAMXSSMMAMXSASXMMSSSSXSAAXAMAAAAM
|
||||
AMAMSXMAMAAAMMMMMSMMAMAAMMXSMSXMXSAAMASAMSAMAAMXMAMAXXMSXAASXSASAMASMSXSASAMAMASMMAAAMMXAAMAXMMXMASXXMASXXXSASAMAMMMMASAMAMXXAAAAXXMMXXMSMSM
|
||||
MXMXAMSSSSSMSAXAAAAAAMMMSMXMMMMSMSMSMXXXAMXMMMXXMAXAAMAMSMXAAMXMXSAMXXMMAMASXMASAMMMMMAAMMSSXXAXSXXMXMASMMMSAMXSMSMXMXMSMMXSMMMMMMMSASXMMAMX
|
||||
XASXSXSAMMAMXAMMSSXMXXXXSXAXAAXAASAMMMMMMSSXXXMSSMMSMAAXAXMMXMASXSMSMMASMSAMAMXXAMSXSAXXXXAMMSSMSASMAMASXAAMXMASXAMAMMAXMSAXAXAMXAAMMSAAXMAX
|
||||
MXSAAXMAMMSMMXXMAMMMXMAMMSMSSMSASMAMMAMAMAMXMMAMAMXMMSSSMSXSASXSASAAXMAAAMMSSMSSSMSAXMASMMMSAMXAMAMXAMMMMSSMXMASXXMASMAMAMASXMMASMMAAMMMMXMS
|
||||
XAMMMXSMMAAAMXAMAXSSMSXAXAMAAMXMXMXMXSMAMASASMMSAMSSMAXAXXAXASAMMMSMXMMSXSXMAAMAMAMXMXMMAASAMMMSMAMSXSAMXMAAAMMSXXSASMXMXMXMMASAXASMXMMXAAMA
|
||||
MAMXXMMAMAXAMSXMASAAAMSXMASMMMAMMSMMXMMAMMXASAAMMMAAMASXSMSMAMAMAAMMXXAMMSASMMMXMXMAAAMSSMSAMXAXXXMAASMMAXMMMXAXAMXASAMMXMXAAAMMSXAASXSXSSXM
|
||||
MMSXMASAMSSSXXXMMAXMMMSMSMMAMSXSAAASAMSMSAMSMMMSMMSXMMMMAAAMXMSSMXSASMXMXSAMXSXSMSSMMXMAXMMMMSSSMMMMMMASMMSAASMSSXSAXAAMASXSMXSAMXMMMXAAXXMX
|
||||
XAAAMXXXXMAMXXXXMASXSXMAAXMXMAAMXMXMAMAAMMMXAXAXXXMAXAAAMSMSSXMAXAXXMMMSMMXMSAAAAAAMASMMSSXSXXAAXXAXASAMXASMXMAAAASAMSSSMSAMXMMXSAXXSMSMMAAS
|
||||
MSSSMSSMMMXMSAMXMASXAAMSMSSSMSSMSXASXMSSSMSSSMSSXAXXSSMMXMAAMMSAMXSMAXAAXSMXXMSMMMXMAXASXXAAMMXMMMXSAMMSMXSXAMSMMMMSMAAAXSAMSXMASXSAAAMXMXMX
|
||||
XXAMAAAMASAAXXMMSAMXSSMMXAAMAMAMXMMSAAAAAXAAXAXXXMAXXXASMMMMXXXMXMAXAAMXSMXMMMXAXMSMSSXMMMSMXSAAAAXMXMAAMXSXAXXMASXMMSSSMSAMXXMXSAMMMMMASXMM
|
||||
MMMMMMMSAXMSMMMAMAXAMMAXMMSMXMXSAMXSMMMSMMMSMMMMMMSXAXXAXMXSXMXMSMSAMXSSMMAMMXSSXMAMMAMXMAXXASMSMSMMXMSMSAXXMMSMASMXAXAAMXAMXSMAMXMAMAMMSAAA
|
||||
XAXMXXMMMXAAAAMSSSMMSSSMAMXASMXMMXMXMAXAXSXMXXAXAAMMMMAMXXAMAMAMAAXMAMMAXSAMXXMAASXSMMMSMXMMAMXMAXMSMAMAMMSMSAAMXXAMMMSMMXSMSMMASMXXMXAAMAMX
|
||||
SMMSAMXAMSSMMMSAAXAMXAAXMMMXAMAAMMSAMAMAMSAMAAXSMXSAAMSXSMASAMAMMXMXMASAMSASXMMSMMAAAASXXMASMMMMMSASMXMAMXXAASXXMXXXXAXXSAMXSAMASXAMMMMSSSSM
|
||||
AMAAASMMMAMAAXMMXMSMSXMXSXAXAMSSMASAMSMSASAMMMMMMXMXXSMAMMMMAXXSMMSAXAMAMMAMMAAMAMXMMMSAXMXMAAXSXMASMSSSSXMSMMXASMXMMMSAMXMMSAMASMXSAAAXMAAM
|
||||
MSSSMSASMAXMMMXSXAAXAAXXAAMMSXMAMASMMXAAASAMAAAASXMSMSMXMASMSMMSAAAMMSSXMMMMMXMSXSASAXMAMSASMXMAAMAMAAAXAXMMXMMAMAASXMMXMXMXXAMMSAASMMMSMSMM
|
||||
MAXXAMAMMMMSMSAASMMXSAMSMSXAMASXMXMMAMXMXMASMXSSMMAAASMASAMAMMXMMMXMAXMMMMSSXMXXMAAAXSAMXMASAXASMMSSMMSMMMAMAMMMSMXMAMAMXAASXSMAMXMXMMXXAMSM
|
||||
MASXMMSMXMMSAAXMMMAXAAXAXAMAXAMASMSXSMSAMSAMXXMAMMXMXMAAMXSSXMXMAMAMSMMASAAXSXSAMMSMXMASXMMMMMAMAXMAMXXAXMAMAXAMMXASAMASASMSAMMAXAXAMSMMMMAS
|
||||
MSMXXAXAMXAMXMMMASMMSSMMAMSSMASAMXXMASAAMMMMMMMAMXSSSSMMSMAMASMXSMXXMASASMSMMMMAMMAXMSAMASMAMMXMXSXSXSASMSMSMSXSMMMMAMXXAXXMAMXSSMSMSAMAMSAS
|
||||
SAMXMXXAMMMXMAAXAXAMAXXXAXAASAMAMXASXMMXMASMSMSMMMMMAAXXXAASAMXAXAMXSAMAMMAAASXSMSMMXMMSAMMSMAASXMMXAXAXAXAAAXMSASXSSMSMSMASMMMAAAAXSMMAXMAS
|
||||
SMSXMAXAMAMASASMSSMMSSMSMSSMMMSAMXXMXMASMMMAAAAMMAAMMMMMSMXMASMXSMSXMAMAMSSSMXAXASXMASAMXSAMMSASAMAMSMMMMMSMSMAXAMMMMAMAAXAMXAXSMMMXMAXMXMXM
|
||||
SAAMXMASMMSASAXAMXXXAMXMXMAXXMMAMMMMMSASAMMMMXMSSMXSAAAXAMSSMMMXAASMMAMAXAMXXMXMASAXSXMXXMASMXXSAMMAXAMXXAXMXXSMMMMAMAMSMSMMSSMMSSMXXMASMMMM
|
||||
MAMAXMXMAXMMMAMAMMMMMSAMASXMMSSMMAMAAMASAMSMXXXXXXASXMASMSMAXAXMMXMAMSSSSSXAXMMMXMAXXAMAMMXMAMASXMXSSSMMMMSXSAMXMASXSMXAAAAMAAAAAXXMSXAMAXMM
|
||||
SXMXXMAMMMAMMSMAXAMAXSASAXAAXAAASASMMSASMMMMMMSAMMXMXSAMXAXMMXSXXAMAMXAAAAMMSMAXXXXSMSMAAAAMAMAMXMXMAMXMASMAMAMXSASMAMSMSMSMSSMMSSMAXMXSAMXM
|
||||
SAXMASXSXSSMAXMXSSSMXSMMMXSMMMSMXAMAXMXMAASAAAMAMMMSMMMSSXSXXXMXSMSASMMMMMMAAXMSSMASXASMMXSSMSSMMSSMAMXMSMMAMMMMMASXMASAMAAAXXMAXMASMXMXMASX
|
||||
SAMSAMXXAMAMXSMMXMAMMXXASMMXSMMXMXSMXAMSXMSMMMSAMXAMMASAXXSAMXAAMMMMSXXXAAMXSSMAAMAMXMMSSXMMAAMXMAAXAMSMAXXMXXAXMXMXMSMAMSMSMSMSSSSXAAMSASXM
|
||||
MMMMAXAMSXSMAMAMXXAXXAMASAMMSASXSAAXMAXSAXXMXMMMSMSSSXMASMSAMMMMMAAMXXMSSSSMAMMSMMSSXAAAMAAMMMXXMASXMSXXAXMSSSMSSXMXXXXSMXAXAXMAMXAMSMSSXMAX
|
||||
SASMSMSMMAAMXMAMMSMXXAMASAMMMAMAMMXMASAMXMASXAAAAXXAMXMXMASXSXSSSSSSXAXXXAAMMSAAXSAMXMMSSMMXXMMMAAXMXSMSSSMAAAMAMAMSMSXXMMSMMMMSSMMMXMAMASXM
|
||||
SASAXAXAMXMAXSAAAAMSMSSXSXMAMAMSMSMXXAMXSMASXSMSXMSASXSAMMMAMMMAXMAMMMMMMSMMSMMSXMASAMXAXAMSMAAXAAXMASAAAAMMSMMAXXXSAMMSXMXASMMASAAAXMAMMAMX
|
||||
MAMMMXMXMXXAMSSMMXSAAMSAXXSSSMSAAAXXMXMASMMXXXXXXXXAMAXXMAXAMXMMMMAMASAAMAMMMAMMMSXMAMMMXSMAXSASXMXMASMMXMMXAXMMSMMMAMAMAMSAMXMAXXMMMMMSMSSS
|
||||
MAMXMXXAMMAXXMXSAMSMSMMMMAMMAXSMSMSXMAMMSASMMSXSASMAMAMSSMSXSXMXAXMSSXMXXASAMMMAASMSXMAMXAXXXMXAAMMSXSMXAAXSMMAMAMASXMMSAMSASAMXSSSSXSMAMAMM
|
||||
SAXSAMMMAAAMMMAXMAXAXXSASXSSXMXXXXMAXSSXSAMAXMAMAMSMMXSAAMSASAAXSSMMMAAMSMMXSAMMMSAMXSASMSAMXSMMAMAXXXAMSMMASMASASMXSAASAMXAMXSXAAAMAXSAMASA
|
||||
XMAXAMAMXXSAAMSSMSMAMXXASAAXMASMSMMMSASAMXXXMMAMXMAMSMMXSAMMSAMAMXMMSXMXAMMMSXSMMMXMASASAMSXAMXASMXSMMXMAASAMSAMXMMMMMMSAMMSMASMMMMMMMSXSASX
|
||||
MXSXMMSMSAAXSAAXXXMAMSMMMMMMXXAAXAASAMXMMSSXSSMSXSAXMAMAMAMXXAMAMASASMMSXSAMXAMAXXMSASAMXXMMMMSSMAASXMASXMMMXMXSMAMAAMXMAMXAMASXAASAMASMMAXM
|
||||
SMMAXSAAMAMMMMSSMXMAXSMMASASASMMMSMSAMXSAAAAMMMSXMMMMAMXMAMMSXSASAMXXAXAAXMASMSAMXAXAMMMXMXAAASAMMMXAXAXMSSMSMMMAAXXSXMMMMSAMXMMSASAMASAXSMM
|
||||
MASXMMMMSAMXXAAAMSMSXMASASMSASXAAXXSAMAMMSMMMMAMAMASMMMSAAMAMAMXMMSMMSMMSMXMAAMAMMMMSMSAXAXSSMMMMMMSSMSSMAXMAMAMMMSAAXSASXSXXAXAMMSAMXXXAMAX
|
||||
MAMMMXAAXXSXAMXMAXAMMAXMXSASAMMMSSXSAMXSAMASAMASAMASAAAMXMMASAXXMASAAAAMXXAMMSMAXAMAAAMMXXMAAXSXSSXAXAXAMMSSMMASAAMMSMSASAMAXSSSMASXSAMASXMM
|
||||
MAMAMSMSSMMMMXSMMMMMAXAXXMXMAMXAMXASMXMMMSXMASASXSASXMMSAMSXSMXXMAXMMMSXXSXMAMMXSSSSMSMSAMMSMMAAXXMSSMSSMXMAXSAMAMXAXXMXMAMXMXAMMMSAAMAAAAAM
|
||||
SMSMXAAAXAXMSAXASAMASXXXASASMMMMXMXMMAAMAXXAMXASMMASMMASAMAMXAASMMSXAMXMAMAMMSXMXXAXMAAMASAXXXMMMSXAAMAMXAMXMASMSXMASMMASXMSMMAMMXMMMMMAXXMM
|
||||
AAAMMMMMXXMASASXMSMAXMMMMXMMMXMAAMMSSSSSXAMMXMXSAMAMASASMMMMMMXXAASMSXASXSAMMAMMMMXMSSXSAMXSMMXAAXMSSMMSSMSMMMAMXAMMMASASMAAMMMSMAMASAMXMSMX
|
||||
MMMXSSSSXMSASMSAAXMAMXAAAASMSMMSXSAMAMAAXMMAXSMSXMMSMMASAXMASMMMMMMAXSMMAXMMMXAAAMAXXAAAMXXMASXMASAMXMAMAMAAAAAXMXMMMXMMMMXMSAXAXASMSMMMSAAX
|
||||
MASXSAASAAMASASMMMXMASASMMSAAAXAAXMMAMXMMMASXSAMMSXXMMMMMXMASAASMSMSMAMMMMSAMMSSSSSSMMSMMSMSXMAXAAMMAMSMAXMMMMMMXAMAXXSMSMSMSASMSMMAMXSMXMAS
|
||||
SASXMMMMMMMSMAMXMAAXXSAXAAMMMMMMSMSSSMSMSXAMAMAMAMMMSASASMMASMMMAAXAXMMXMASASAAAMAAAAAAXXAAXXMXMMSSSXMAXAMMMSSMMSMSMSXMAAAAMXMAMSMSXSASASXSA
|
||||
MXSXMASAAXXAMXMAMSMSAMASMMMAXXMSAMMAMMXAAMXSAMMMMMAXMAMMXAXMMXMMSMSMSXAAMXSAMMSSMSMSMSSSSMSMXSAXXAXAASMSMXXAAAXXAAAASAMSMSMSMMMAMAAAMASAMSXM
|
||||
MMMASAMSXSMMMASAXAAAAMXMXXXMMSMSAXMAMXMAMSXXAMXAXSSSMSMSSSMMASMAXXAXAMSMMXMMXXMAAXAAAXXAMXMMAMXSMMSMMMMAMXXMSSMSMSMSMAMMAXAAXSMMMSMXMAMAMMSX
|
||||
SASXMAMXMXAXSASMSMMSMMMSMMSXSMXSAMSSSSMSXXAXSXSXXAMXXXAXAMAMAMMASXMSMMASXMMMSMMMAMSMSMMMMAMXMASAXXAMSXSASMSMXAASAMMMXXMMXMSMXSAXAXXXMAXMMAMX
|
||||
AXAMMSAXMSSMMASAMXAAAAAAAMAXAAXXSAAAAXAXSMMMMAMMSMXSAMXMXMAMASMXSAAAMMASXAXAAAMXXXMAMASXMMSAXMMSXMXSAASAMAAXAMMMSMAAXMAXAAXMASXMASXSSMSXMAXX
|
||||
MXMXAMAAXMAAMAMMMMSSSMSSSXMSMSMMMMMSMMSMXMMAMXSAMXAAMASMMMSSMSMAXXMMSMAMMSMSSSMMXSXASAMAXASAXSAMMASXMXMSMSMSMSAXMSMMMAAMSSMMAXXXXMAMAAAXSSMA
|
||||
AXXMXSXMXAMMMMSAMXMAXAXAMMXAAAAXAMMMXSAMXMMXSMMMSMXSAMAAAAXAMXMMSMAAXMAMMXAMXAAAASMMMMSAMMSAAMAMASAXXAAAMXMXMAMSAAMASXXXXAAMMXXAXMMMMMMMSAMX
|
||||
XSAMXMXSXSXAXMSASMSSMMSAXAMMMMMXAMAXXXMSMSAAXAXASXAAASMMMMXAMXAXAXXXXSXSXSXXSSMMXXAXAAXAXXMXMXMMSMXXMMSMSAAXASMXXMSMSAMSSSMMSAMSMMMMXMXMSSMX
|
||||
SMMSSMAMAAMXSAMXMMAAMAMAMSSSSSMSMSMSMMXSMMMSSMMMSMMSMMXXXXSMSSSXXMMSAMXMAMAMMMMMMMSMMSSMMXAXMSSMAMMXMAMXSXMMXMASMXSAMAMAAAAAMAMMAAAXAXMXMMSM
|
||||
XAAAAMXXSAAAMAXSXMSMMSMMMAAMASAAMAMSMMAXAAAMAXAXXAXXXXXSMMAAAAMSSXAASAAMAMMMAAMAXXAAXMAMMMMMXAAMAMSAMMSMMAMXAXSAMAXAMXMMSMMSSSMSSMSSMXSAAMAM
|
||||
MMMSXMAMMMSMMAMMAXAXAMAMMMSMAMMMSAMMAMXSSMSXXXXXXMSXMAXAASMMMSMAMMSMASXSASAMXMSASMSSMMMAXAAAMXSMXMSASMAXXAMSAXXAMSMSXSMAXMXMAMXMXMAMAASMXMAX
|
||||
SXMXXMASAAXXMASXMMSMMMMMMSAMASMXSXMSAMMMMAMXSMSSSMAMAMSXMMAMAXMASAAXMMMAAMMMSAMASAXMXAASXSSSXXAXXXSAMMASMSXMXXXAMAAXAAMMXSAMAMMMSMMSMMXXSSSS
|
||||
AMSAMXMSMSXXAAXAMMAASMMAMXASASMAMAMMXMAMMSMMAAAAXXAASXMMMMXMSXSASXMAXMAMXMAXMAMXMXMMMSSMAMAAXSSMMXMASMXSXMASMMSMMMSMXMAAASASMMMAMXXSXSXMMAAX
|
||||
MSXSXSXMAAXSMSSSMMSAMXMASMXMAMMAMAAMXSAXXAAMMMMMMSMSASXXSAXAAXXXMAMMMMMSMMSMSAMXMXSXAXAMXMMMMMAAAXXMAMAMMSMMXAAASXMMSMMMXSXMAAMXMSXMASMXMMMM
|
||||
XSAMXMAMSMMMAXAMXXAAXXXASMSMSMMXXMSAAXMXSXMMXAAMXMMAAXMASMSMXXMXSAMXAMASAXAAXXSXSASMMSMMXMASASMMMMSMSMMSAAMMMASXMAXAMXASMMMSMAXSAMMMAMMSMSXA
|
||||
XMASAMAMAASMMMSSMXMSMSMASAAAMMSSXAXMMMXMSAASMMXSMAXMXMAAXMAMMSAXMAXMAMASAMMSMAXAXAMAXSXMXMXSXMAXMASAMXSMMSSXAMMAMXMMMMXSAAMMSAXMAMXMASXAAAMS
|
||||
MSASXSSMSAMAAAAAASAAAMMMMXMSMAAXMMMXASMASXMMAMASMMMMSASMMMASMASASASXSMXXAMAAMXMSMXMAMSAXMSAMXSSMMXMMMSXAMMMXSMXSMXSXASMSMMSMMSMSAMXSASMMSMMA
|
||||
MMASAXAAXSMSMSMSAMXMSMMAMSMXMMMSAMXSASMAMAMXXMASAXAAAAMAXSAAAMMMSAMAAAXSMMXSXAAXAXSXMMSMAMXSXAMASAMAMXMMMASMAMAXAAXXMMASXMXMAMMSASAMASAMMXSM
|
||||
XMAMXMMSMXXAAXXMASXXXMSMXAAMMAMXAXAAAMMMSAMSMMXSMMMXSSSXMASMXXAAMAMSMMMSAXAMAMMMMMSAMXMMMSAXMMSAMXMAMXMXSAXMAMSSMSSMMMAMASAMXSASMMAAASAMXAAX
|
||||
SMASAAAAXXXMSMXMAMMXMAAMXSSSSSSSSMSMXMAMMXSAASAMXXMXMAXXAMXXXXMXSXMXASASAMSXMMAAAXMAMASAMXMXXAMASAAMSASXMASMMSAAXAAXXMMSXMASAMXSXSXMXSMMMSMX
|
||||
XSASXSMSXSXMAXAMSMMASXMSAAAAAAAXMAMXSSMSAXMMSMMSMXMAMSMMSAMXMASAMXMXAMASAMMAASXSSSSMMXSMMMMSMMSAMXXSAMXAXASXMAMXMSSMMSAXXXAMXSXSAMAAAMASAAXA
|
||||
MMMMAMXMAMXSXMXMXASAXXAMXSMMSMSMXMMMAXMMMSXXAAXXMAMMXAASAMXXMAXAMXSMAMAMXMMAMSAAAAMMMAMAAAAAAXAXMAMAAASXMXXAMXAXMAAXAXASMSSXXXMMAMMMMSAMMSSX
|
||||
SSXSASAMAMAMXSMASAMASMSMXXXXXAMASMSMMSASAXMSSSMSSSSSXSMMMSMMMSMXAAAMXMXSXMASXMMMMMMAXXSSSSSSSMSMMASXMMSASXSMMMAXMXSMXSXMAAAASMSSXXXSAMASMMXX
|
||||
SAAXAAMMXMASXAAAMAMXAAAXMMSSMXMSXXAAXAASMAMAXAMAAMAMAMXMAAXMAMXSMASXSAMXASAMXXAXMASASAAXAMAAAXAASASMSAXXMMAMXXMAMSAAXMMMMMMMAAXXMSSMXMAMXAMX
|
||||
MMMMSMMASXMMMXSXSXMXMSMMAAAMAMXMASMMMMXMXXMAXMMMMMAMASAMSSSMAMAMXXXXMAMSMMSSMXSASASAMMSMMSMSMMSMMASAMMSMMXMSSMMAXMASXMXSAAXSMSMAXMAMAMSSMASM
|
||||
SAMMXAMSMAMSMMMMMMMAMAMXMAMXXMAXXMMSSXSSSSXSSXXMXSXSASAMMAMMSMSMAAMMMSMAMAMMMMAMXAMXMAXMAXMAXAXXMMMXMAAXAAAAAAMXSASAXAASXXMXXMXMMXAMAMMAMAAX
|
||||
SASXSAMMSAMAAAASAAMAMXSAMSMSMSXSAMXAXMXAAAAXAMXSAXAMXSXMMAMAMAMAXSAAAAMAXAXAAXMMMSMMMSMMMSXXMASAMXSAMSMSSSSSSMMAMXMAMMMSAMXSAMMSASMSSMSSMMSA
|
||||
SAMXSAMAMMSMSSMSMSSSSSMXSAAAASMMAMMMSSMMMMXMAMSMASMMMMMMSMMAMXMAMMXXMMXSSSSSXSASAAAMAMASXMMXXXSAMXSAXMXXAXMAMAMXSAMAMXMXXASAMXAAXAAAXXMMMMXM
|
||||
MAMMSMMMSMMXAAAMAAAASMAXSMSMSXAMAXAMAXXSXXAMAMXAMMMXAAAAAXMAMAMSMXSMMSMMAXAAAMAMXXXMXMAMAASMSXSAMASXMMXMMMSASMXAXASASMSAMMXMMMSSMMMMSAMAAMAX
|
||||
SAMMMMAXAXXMSMMMMMSMMMMMSAMXXXMSXSXMASMAMSXSXXXMMAXSSSXSMSMSSXSAMXXAAAAMSMMMMMSMSSSMSMASMSMMXASMMAMAMXSAXAMXSAXSSXMXSAMAMXAAXAAXXXAXMAXSSSSS
|
||||
SMXMASXSMSAXAAAMAAXXXXAXXXAMXAXAXAXMAXXAMMMAXSSMSXMXAMXAXMAMMXSASMSSMSMMAAAXXAMAXXAAXSXMMAAMMMMXMAXAMMXSMSXMMMMAAXMMXMSSMSSSMMSSXMASMAMXAMAS
|
||||
XMASXSXXMAMSSSMSMSSMXSMXSAMXMMSMXSAMMXMXAAXAMMAAAXMMAMSMMMAMMMSAMMAAAXMSSSMSMAMXMSMMMAMXSSXMAAXXSSSXSAMMMMAAAMMMMSMAXXAAMAAMXXAMMXMXMMXSAMAM
|
||||
SSMSAXMAMAXAXAMMAAXXAMAAMAAMAXXAAXAMXASMSXMSXSMMMXMMMMXMASASXASAMMMMMMAAAAAXXAAAXAMXAMAMMAASXSSMAAXMMMAAASXMMXXXASMSSMSSMMSMXMSMMASMSAAAXMAM
|
||||
MXAMXMAMSSSMSSMMXMMMSSMMSASMSMMMMSAMMMSAAAAXASXMXAMASMASXSXSMMSAMXMXMMMMSMMMSXSMSAMXSXSSMSMMAAMMSMSMSSMMXMAMSMSMXSAMSXAAXXAMSMXASASAMMSMXSAS
|
||||
XMXSMXSAMXAXAXAAXMMAAAXMAMXXAAXSASAMMXMAMAAMXMAMSMSAMSXSMSAXAMSMMASAAMXMAAAAMMMXSAMSXAAMAAAMMMMAAXMAASASMSSMAMAMXMAMMMXXMSAMXASXMMSMXXXXXAAA
|
||||
XAMAAXMAMSAMMSXMAXMSSMMMMXMSSSMMXMXMMXMSXMASMSAMXMMMXSMXASXSXMXAMASMMMAXMMMASMSASAMXMMMMSMSAMXMASMMMMSXSAAXXASAXAXAMXSSSXSSXMMMASXMXSXMMMMMM
|
||||
AMAMSMSAMXXAXMMSAMXMAMMAXAMAAMMSAMAMXAXMXSAMASAMMXSSXSAMMMXMASXSMXSAXSASXMSAAAMXSAMXAMAMXAMAMXXAXAXMXSAMMMMXMSASMXSAMAAMAMAMSXMAMAMAXASAXAAX
|
||||
MMAMXMASXMAMAMXSXAASAMSXSMSMSMAMAMASXMXMMMAMMMAXMAXMASXMAAAXMSAMXXMAMXAXAAMMMMMMSMMSSSMSMMMMSAMXSSMSAMAMXXSAMMXMAAAAAMMMXMMSMSMAMAMXSXMASASM
|
||||
ASASXSAXMAMSASASMXMMMXXXAAAAAMSMSMXSASASAXMMMSXMMMSMAMASXMSSMMAMAMMSSMXMMMMSXMAAMAAAXAAXXMAXXASXMAAMAXMXMAXASASMMSMSXXXSMSXAAMXXMAMXMMSXXMAM
|
||||
MSAXAMMAMAASMMAMAXSXSMSMSSMSMXMAMAMXASASMSMAAXMAAMAMMSXMXXAMXMMMXXAAXXAAXXXXASXSXMMSSMMMMSMSXSAMXMSMSSMSSSSXMASAAAAMMMMSAMSMSMASXMASMAXMMSXX
|
||||
XMAMSMMAMMXXAMMMSMMAAAXAAXMAMAXAXXAMAMAMXAMMMSXSASMSXMAMMASMMASAMMMSSMSAMXMXMMMMAMXXMASMXAAXMAXXAXXAMXAAAAXMMXMMSMSMAAXMSMXXXMASAMASMSXXASMM
|
||||
SMXMMASMSMXXXMXAMAMXMXMSMMXASMSSMMSAAMAMXAMXXAAXMMMSASXMAXAASAMASAAXAMXMSMSMMAAMAMMMMAMXXMSMMXSXAAMMMMMMMMMMXMAXAMXMSMMXMMMSXMMSMMASMXAMXSAS
|
||||
XXSASMMAAASMSMMXSAMMSAMXXMMMSXSAAXMSMSXSMMMSAMMAXAAMXMASXMMXMASAMMSSSMAXAAAMSMMSAMSAMSSSMXXAMAMMMMAAAXAAXXMAAXMMMSSMMSMMXMASAMAMMMMSASXSASMM
|
||||
SMMXMMMMMSMAASAASAMXAASAAAXAMXXMMMXAMXAXXAAXAAXXSMMSAMXMASXASMMMAXAAASASMSMMAAXSAMMASXAAXAXXMASAXXXSASXSSMMSXSAXSAAAAAXSSMASAMXSAASMAMAMASMX
|
||||
XXMASXASXXMSMMMXSAMXSXMXXSMXSAXXMXSMSMXMMMSSSMAAMAXSAXASAASMMXMASAMSMMMSAXXSMSMSSMSXMMSMMMSXSMSMSXMXMMMAXXMAXSAMMSSMMXSAAMMSMMSSMSSMXMXMAMAS
|
10
2024/4/data_test.txt
Normal file
10
2024/4/data_test.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
MMMSXXMASM
|
||||
MSAMXMSMSA
|
||||
AMXSXMAAMM
|
||||
MSAMASMSMX
|
||||
XMASAMXAMM
|
||||
XXAMMXXAMA
|
||||
SMSMSASXSS
|
||||
SAXAMASAAA
|
||||
MAMMMXMMMM
|
||||
MXMXAXMASX
|
169
2024/4/main.cpp
Normal file
169
2024/4/main.cpp
Normal file
@@ -0,0 +1,169 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<std::vector<char>> game;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
// Add new row to fill out:
|
||||
game.push_back({});
|
||||
|
||||
// for each value in the line:
|
||||
for(const char &c : line)
|
||||
{
|
||||
// Fill out the row:
|
||||
game.back().push_back(c);
|
||||
}
|
||||
}
|
||||
|
||||
// DEBUG:
|
||||
// for(auto row : game)
|
||||
// {
|
||||
// for(auto c : row)
|
||||
// std::cout << c;
|
||||
// std::cout << std::endl;
|
||||
// }
|
||||
|
||||
for(int y = 0; y < game.size(); ++y)
|
||||
{
|
||||
for(int x = 0; x < game[y].size(); ++x)
|
||||
{
|
||||
// right:
|
||||
if(x + 3 < game[y].size())
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y][x+1] == 'M' &&
|
||||
game[y][x+2] == 'A' &&
|
||||
game[y][x+3] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// down right:
|
||||
if(x + 3 < game[y].size() &&
|
||||
y + 3 < game.size())
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y+1][x+1] == 'M' &&
|
||||
game[y+2][x+2] == 'A' &&
|
||||
game[y+3][x+3] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// down:
|
||||
if(y + 3 < game.size())
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y+1][x] == 'M' &&
|
||||
game[y+2][x] == 'A' &&
|
||||
game[y+3][x] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// down left:
|
||||
if(x - 3 >= 0 &&
|
||||
y + 3 < game.size())
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y+1][x-1] == 'M' &&
|
||||
game[y+2][x-2] == 'A' &&
|
||||
game[y+3][x-3] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// left:
|
||||
if(x - 3 >= 0)
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y][x-1] == 'M' &&
|
||||
game[y][x-2] == 'A' &&
|
||||
game[y][x-3] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// up left:
|
||||
if(x - 3 >= 0 &&
|
||||
y - 3 >= 0)
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y-1][x-1] == 'M' &&
|
||||
game[y-2][x-2] == 'A' &&
|
||||
game[y-3][x-3] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// up:
|
||||
if(y - 3 >= 0)
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y-1][x] == 'M' &&
|
||||
game[y-2][x] == 'A' &&
|
||||
game[y-3][x] == 'S')
|
||||
++total;
|
||||
}
|
||||
|
||||
// up right:
|
||||
if(x + 3 < game[y].size() &&
|
||||
y - 3 >= 0)
|
||||
{
|
||||
if(game[y][x] == 'X' &&
|
||||
game[y-1][x+1] == 'M' &&
|
||||
game[y-2][x+2] == 'A' &&
|
||||
game[y-3][x+3] == 'S')
|
||||
++total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int y = 1; y < game.size() - 1; ++y)
|
||||
{
|
||||
for(int x = 1; x < game[y].size() - 1; ++x)
|
||||
{
|
||||
if(game[y][x] != 'A')
|
||||
continue;
|
||||
|
||||
int good = 0;
|
||||
// top left to bottom right
|
||||
if((game[y-1][x-1] == 'M' &&
|
||||
game[y+1][x+1] == 'S')
|
||||
||
|
||||
(game[y-1][x-1] == 'S' &&
|
||||
game[y+1][x+1] == 'M'))
|
||||
++good;
|
||||
// top right to bottom left
|
||||
if((game[y-1][x+1] == 'M' &&
|
||||
game[y+1][x-1] == 'S')
|
||||
||
|
||||
(game[y-1][x+1] == 'S' &&
|
||||
game[y+1][x-1] == 'M'))
|
||||
++good;
|
||||
|
||||
if(good == 2)
|
||||
++total_pt2;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2024/5/Makefile
Normal file
2
2024/5/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
1387
2024/5/data.txt
Normal file
1387
2024/5/data.txt
Normal file
File diff suppressed because it is too large
Load Diff
28
2024/5/data_test.txt
Normal file
28
2024/5/data_test.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
47|53
|
||||
97|13
|
||||
97|61
|
||||
97|47
|
||||
75|29
|
||||
61|13
|
||||
75|53
|
||||
29|13
|
||||
97|29
|
||||
53|29
|
||||
61|53
|
||||
97|53
|
||||
61|29
|
||||
47|13
|
||||
75|47
|
||||
97|75
|
||||
47|61
|
||||
75|61
|
||||
47|29
|
||||
75|13
|
||||
53|13
|
||||
|
||||
75,47,61,53,29
|
||||
97,61,53,29,13
|
||||
75,29,13
|
||||
75,97,47,61,53
|
||||
61,13,29
|
||||
97,13,75,29,47
|
160
2024/5/main.cpp
Normal file
160
2024/5/main.cpp
Normal file
@@ -0,0 +1,160 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
bool IsBad(const std::vector<long> &row, const std::map<long, std::set<long>> &rules, size_t &bad_i);
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::map<long, std::set<long>> rules;
|
||||
std::vector<std::vector<long>> production;
|
||||
|
||||
bool reading_page_numbers = true;
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
{
|
||||
// one blank line is the break between reading page numbers and records.
|
||||
if(reading_page_numbers)
|
||||
reading_page_numbers = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
std::istringstream input(line);
|
||||
if(reading_page_numbers)
|
||||
{
|
||||
// for each value in the line:
|
||||
std::vector<long> numbers;
|
||||
for(std::string value; std::getline(input, value, '|'); )
|
||||
{
|
||||
try {
|
||||
numbers.push_back(std::atoi(value.c_str()));
|
||||
} catch (const std::exception &e) {
|
||||
std::cout << "Error parsing rule number from " << value << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
if(numbers.size() != 2)
|
||||
{
|
||||
std::cout << "Error: Incorrect amount of page numbers (" << numbers.size()
|
||||
<< ") in rules import sequence." << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
rules[numbers[0]].insert(numbers[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// for each value in the line:
|
||||
production.push_back({});
|
||||
for(std::string value; std::getline(input, value, ','); )
|
||||
{
|
||||
try {
|
||||
production.back().push_back(std::atoi(value.c_str()));
|
||||
} catch (const std::exception &e) {
|
||||
std::cout << "Error parsing production number from " << value << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// // Debug:
|
||||
// std::cout << "RULES:" << std::endl;
|
||||
// for(auto rule : rules)
|
||||
// {
|
||||
// std::cout << rule.first << " prints before ";
|
||||
// for(auto page : rule.second)
|
||||
// std::cout << page << ",";
|
||||
// std::cout << std::endl;
|
||||
// }
|
||||
// std::cout << std::endl;
|
||||
// std::cout << "PRODUCTION:" << std::endl;
|
||||
// for(auto row : production)
|
||||
// {
|
||||
// for(auto num : row)
|
||||
// std::cout << num << ",";
|
||||
// std::cout << std::endl;
|
||||
// }
|
||||
|
||||
// For each production run:
|
||||
for(auto row : production)
|
||||
{
|
||||
size_t bad_idx;
|
||||
auto bad = IsBad(row, rules, bad_idx);
|
||||
|
||||
// Part 1:
|
||||
if(!bad)
|
||||
total += row[row.size() / 2];
|
||||
// Part 2:
|
||||
else
|
||||
{
|
||||
std::vector<long> working;
|
||||
for(auto n : row)
|
||||
working.push_back(n);
|
||||
|
||||
while(IsBad(working, rules, bad_idx))
|
||||
{
|
||||
auto temp = working[bad_idx];
|
||||
working.erase(working.begin() + bad_idx);
|
||||
working.insert(working.begin(), temp);
|
||||
|
||||
// Debug Sort:
|
||||
// std::cout << "Trying again: ";
|
||||
// for(auto i : working)
|
||||
// std::cout << i << ",";
|
||||
// std::cout << std::endl;
|
||||
}
|
||||
|
||||
total_pt2 += working[working.size() / 2];
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool IsBad(const std::vector<long> &row, const std::map<long, std::set<long>> &rules, size_t &bad_i)
|
||||
{
|
||||
std::set<long> already_passed;
|
||||
bool bad = false;
|
||||
// For each page number in that production run:
|
||||
int i = 0;
|
||||
for(auto num : row)
|
||||
{
|
||||
// Check against all page numbers it shouldn't print after
|
||||
for(auto before : rules.at(num))
|
||||
{
|
||||
// If found, it's a bad row!
|
||||
if(std::find(already_passed.begin(), already_passed.end(), before) != already_passed.end())
|
||||
{
|
||||
bad = true;
|
||||
bad_i = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Keep track of numbers we've looked at already:
|
||||
already_passed.insert(num);
|
||||
++i;
|
||||
}
|
||||
return bad;
|
||||
}
|
2
2024/6/Makefile
Normal file
2
2024/6/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
130
2024/6/data.txt
Normal file
130
2024/6/data.txt
Normal file
@@ -0,0 +1,130 @@
|
||||
.......................#....#....................#....#..##.##.........................................#...........#...........#..
|
||||
.............#........................................#....................#............#.......................#............#....
|
||||
.........#.............#..#....#..........................#.......#.#.......#...............................................##....
|
||||
..........#....#....................................................#....................#...........#....#.......................
|
||||
.............#...#....................#...........#.........#...........................#............#............................
|
||||
..........................................................................................#.....#.......#...................##....
|
||||
...............................................#.#......#..............#...#...................##...........#....#..#...#.........
|
||||
..#.................#......#........#......................#.......#...............................#..............................
|
||||
.........................#...............#.....................................#....#..#..#............................#..........
|
||||
......................#.................................................................#..........#..............#...#......#....
|
||||
............................#.....##..........#.....................#..........#..#.......#.......................................
|
||||
......#...###...........#.................................................................#.......................................
|
||||
......................#.#..#................#..........#................#...........#............#..............#...#.........#...
|
||||
....#.........................#..#...............................................#....#.............#.............................
|
||||
..#............#...#............#..........#...............#.....#....##.........................#........#.......................
|
||||
..................#............#..............#..........................................................#..#..#........#.........
|
||||
.......#...#............#..........................................................#..............................#.............#.
|
||||
..#................#....................#.#...#.................................#.........#....................#.........#........
|
||||
...................................#..#..........................#........#.....#.........................................#.......
|
||||
...........##.................##............#................#...#..................................##...#........................
|
||||
..............#..................#....................................................................#...........................
|
||||
.#...#....#..........##..................................#.............................................................#......#...
|
||||
......#.....#................................#...............................................................#......#.............
|
||||
..........#.............................................#............................##....#.........................#............
|
||||
..........#......#.................#...#........#...........#.#..........#........#....................................#..........
|
||||
.#..................#.#............................#.......................#.........#.......#....................................
|
||||
.....................#....#..................#..................................................##..#................#............
|
||||
......#......................#..#..............##.......#..................................................#..............#.......
|
||||
..........................................................................#........#...#..............#.................#.........
|
||||
....................##....#.......................#........#...................#.............##.......#...........................
|
||||
.........#............#..................................................................................#........................
|
||||
........................................................................#................#........................#.............#.
|
||||
............#.......#.................................#............#..............................................................
|
||||
.#.............#...............................................#....#.........#....#..................................#.#.........
|
||||
.......................................#.....................................................................................#....
|
||||
........#........................................#...............#........................................................#.......
|
||||
...............................#.........#........#...........#.......................................................#.........#.
|
||||
.....................##...#....................................................#............#..................#..#..........##...
|
||||
................#..........#...#............................................................#...##................................
|
||||
...................#........#...............................#.................#.........#.........................................
|
||||
.................................................................................................................#................
|
||||
............................#......................................................#.....................................#......#.
|
||||
......#................#............................#.............................................................................
|
||||
..#...........#.....#.........#....#................#............................................#................................
|
||||
..................................#.......#.......#...........#.........#................#.....................................#.#
|
||||
...............................................#............................................#.#.....................#.......##....
|
||||
..............................#...............#..............................#...#...#.............................#...........#..
|
||||
.......#...........#..........................................................#........#..#.........#.....#.....#...#.............
|
||||
......................................................#.#............#.........#.#...........#........##.....#....................
|
||||
...........................................................................#..........#.........................#.........#.......
|
||||
....#.........................#.....................................................................................#...#......#..
|
||||
...#.......#............................................................#...............................#....................##.#.
|
||||
.................................#.....#................................................................#.........................
|
||||
.....................................#........................#....................................#..............................
|
||||
..............#.......................................................................#.......#....................#..........#...
|
||||
................................#..........................................#.................................#.....#..............
|
||||
...........#.......................................................#...............#.....................#..............#......#..
|
||||
..................................#..........................#.................................................................#..
|
||||
.............##......#....................................................#......#...............................................#
|
||||
#.......#...................#..........#...................#.................#..................................................#.
|
||||
.......#..........#.....##...........#.......................#............#..............................#.............#..........
|
||||
.............#...................##......................................................................................#........
|
||||
#.............................#...................................................................#...............................
|
||||
.#...................................#....##..................................................................................#...
|
||||
.................................#.#..................#..#..#..........................#.......#..................................
|
||||
..................#....#....#....................................................#....................................#........#..
|
||||
..........................................#...#.....#...........#.........#............#............#..........................#..
|
||||
...............................................................................#..............................................#...
|
||||
.............................#......#....................#....#....................................................#.#.#..........
|
||||
................##......#........#........#...........#..........................#......................#..............#..........
|
||||
.....................#.....#..#.............................................................................................#.....
|
||||
.......#..#...........#................................................................#..........................................
|
||||
#.......................................................................................................#...#.....................
|
||||
.#..........................................................#.....................................................#...............
|
||||
#.....#...#...............#..#......#........#..#...................#...................#.................#.......................
|
||||
..#.................................................................................#.#......................#....................
|
||||
.......................#.............#..........#.......................#...................................#.....................
|
||||
.................#......#......#...#.#.#.............................#.......................................................#....
|
||||
..#...........................................................................................................#...................
|
||||
.................................#..................#.....#........#.........................................................#....
|
||||
.............#......................#...............................................#...#.............................#...#....#..
|
||||
.#............................#..........................#.#...........................#..........................#.#.............
|
||||
.............................#.........#.................##............................#...................#......................
|
||||
.........#......#....#.........#..............................................................................................#..#
|
||||
.....................#......#.................#..#..........................#..................#..............................#.#.
|
||||
........................................................#......................#............#.......#......#......................
|
||||
........................................#....##.#........#......#..............................#..........#..........#.##.........
|
||||
.............#.......#.......#......................#..........................................#.........#............#...#...#.#.
|
||||
..................#........................................................#...............................#.....#.....#..........
|
||||
.........#.................#........#..............^..............#.................##......#...................................#.
|
||||
....#...................#.#.................................#...#.................................................#...............
|
||||
.................#.............................................#................#.....#......#.......#...................#........
|
||||
...............#...............................................................................#..#...............#...............
|
||||
........................................##..........................................................................##............
|
||||
............................................#...................#........#...#...#....#.........#...................#.............
|
||||
.....#...#...................#....................................#......#...........#...............#............................
|
||||
........................#..................#.....................#.................................................#......##......
|
||||
...#.................#....................#..................................#.#.........................#.......#................
|
||||
....................#............#..................................#...#......#....................#...............#.............
|
||||
.....#...............#.......###........#............#......................#.......#....#........................................
|
||||
....................#........#...........#..................................#..#................#.............#...................
|
||||
.....#..................#...................#.#..................................#.......#..#.....................................
|
||||
..#..#.......#........................................#.................................................................#.........
|
||||
.......#............#...#....#.......................#.#...................................#.........................#..#.#.......
|
||||
..............#......................................................................................................#............
|
||||
............#....................#........................#.........#...#.........................................................
|
||||
...................................#..............................#.........................................................#.....
|
||||
......##...........#.#........................#.........................................................................#.........
|
||||
..........................#.....................................................#..............................#..............#...
|
||||
.........................#...#.....................#..#................#................................................#....#....
|
||||
...#.................................#...#.......#...............................................................#................
|
||||
..................................#....................................#...........................##..#.#.....................#..
|
||||
.#.............#.....#...............................................................#...............#...............#..#.........
|
||||
.........#.............................#........................#.............#......................#........#............#......
|
||||
...................................#..#...#.....................................#.................................................
|
||||
........................................##..........#..............................................#.....................#........
|
||||
......#...........................................#....#.....................#...................#..#.........#...................
|
||||
.#....#.....#........##..................................#......#................................................#....#..##.......
|
||||
..........#....................................................................##.........................#...........#...........
|
||||
...........#.#......#.......#..................#............#...............................................#...#..............#..
|
||||
.................................................................#.......#.........#.....#........#....##....#..........#.........
|
||||
.............................#......................................................#.....#...#...#....#...........#..........#.#.
|
||||
.....................#........#.........................#......................................#................#...............#.
|
||||
.........................................................................#...................................................#....
|
||||
..............#...#..#................#....................................#.......#....#.#...............#.........#.............
|
||||
.......#......#.#............................................#.......#............................................................
|
||||
##......................................................#..#.................................##...................#..#...........#
|
||||
...........#.#...#........#............#..............................#........................#.........................#..#.....
|
||||
................................................##.........................................#.................#....................
|
||||
............................#....................................................#...#........................#.#......#........#.
|
10
2024/6/data_test.txt
Normal file
10
2024/6/data_test.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
277
2024/6/main.cpp
Normal file
277
2024/6/main.cpp
Normal file
@@ -0,0 +1,277 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
enum Direction {
|
||||
UP = 0,
|
||||
RIGHT,
|
||||
DOWN,
|
||||
LEFT
|
||||
};
|
||||
|
||||
struct Position {
|
||||
// NOTE(dev): Could do enum empty/reached/blocked, but I'm not interested.
|
||||
bool blocked = false;
|
||||
std::map<Direction, bool> reached;
|
||||
|
||||
bool Reached() const {
|
||||
return reached.size();
|
||||
}
|
||||
char ReachedChar() const {
|
||||
bool up_or_down = false;
|
||||
bool left_or_right = false;
|
||||
if(reached.contains(Direction::UP) || reached.contains(Direction::DOWN))
|
||||
up_or_down = true;
|
||||
if(reached.contains(Direction::LEFT) || reached.contains(Direction::RIGHT))
|
||||
left_or_right = true;
|
||||
|
||||
if(up_or_down != left_or_right)
|
||||
{
|
||||
if(up_or_down)
|
||||
return '|';
|
||||
else
|
||||
return '-';
|
||||
}
|
||||
else if(up_or_down)
|
||||
return '+';
|
||||
else
|
||||
return ' ';
|
||||
};
|
||||
};
|
||||
|
||||
struct Player {
|
||||
std::pair<int, int> location;
|
||||
Direction direction = Direction::UP;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data_test.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::map<std::pair<int, int>, Position> level;
|
||||
Player player;
|
||||
|
||||
int max_x = 0;
|
||||
int max_y = 0;
|
||||
bool first_row = true;
|
||||
int y = 0;
|
||||
|
||||
auto DebugPrint = [&]()
|
||||
{
|
||||
std::cout << std::endl;
|
||||
for(auto y = 0; y < max_y; ++y)
|
||||
{
|
||||
for(auto x = 0; x < max_x; ++x)
|
||||
{
|
||||
if(player.location.first == x && player.location.second == y)
|
||||
{
|
||||
switch(player.direction)
|
||||
{
|
||||
case Direction::UP:
|
||||
std::cout << "^";
|
||||
break;
|
||||
case Direction::RIGHT:
|
||||
std::cout << ">";
|
||||
break;
|
||||
case Direction::DOWN:
|
||||
std::cout << "v";
|
||||
break;
|
||||
case Direction::LEFT:
|
||||
std::cout << "<";
|
||||
break;
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto &pos = level[{x, y}];
|
||||
if(pos.Reached())
|
||||
std::cout << pos.ReachedChar();
|
||||
else if(pos.blocked)
|
||||
std::cout << "#";
|
||||
else
|
||||
std::cout << ".";
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
};
|
||||
|
||||
// Parse Input
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
int x = 0;
|
||||
for(const char &value : line)
|
||||
{
|
||||
Position pos;
|
||||
if(value == '#')
|
||||
pos.blocked = true;
|
||||
if(value == '^') // always up?
|
||||
{
|
||||
pos.reached[Direction::UP] = true;
|
||||
player.location = {x, y};
|
||||
}
|
||||
|
||||
level[{x, y}] = pos;
|
||||
|
||||
++x;
|
||||
}
|
||||
if(first_row)
|
||||
{
|
||||
max_x = x;
|
||||
first_row = false;
|
||||
}
|
||||
++y;
|
||||
}
|
||||
max_y = y;
|
||||
|
||||
// DEBUG:
|
||||
DebugPrint();
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
while(true)
|
||||
{
|
||||
std::pair<int, int> next_location = player.location;
|
||||
switch(player.direction)
|
||||
{
|
||||
case Direction::UP:
|
||||
--next_location.second;
|
||||
break;
|
||||
case Direction::RIGHT:
|
||||
++next_location.first;
|
||||
break;
|
||||
case Direction::DOWN:
|
||||
++next_location.second;
|
||||
break;
|
||||
case Direction::LEFT:
|
||||
--next_location.first;
|
||||
break;
|
||||
};
|
||||
|
||||
if(!level.contains(next_location))
|
||||
{
|
||||
player.location = next_location;
|
||||
break;
|
||||
}
|
||||
if(level[next_location].blocked)
|
||||
{
|
||||
// NOTE(dev): Also check if the next potential position is the last space before a turn,
|
||||
// as then the up/down or left/right flag wouldn't be set, but the
|
||||
// left/right or up/down flag would be.
|
||||
level[player.location].reached[player.direction] = true;
|
||||
player.direction = static_cast<Direction>(((int(player.direction)) + 1) % 4);
|
||||
level[player.location].reached[player.direction] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO(dev): Need to handle the scenario where you've yet to explore a section but it
|
||||
// would result in a loop.
|
||||
// e.g.: Placing a stopping point at the O
|
||||
//
|
||||
// # #
|
||||
// +->O #
|
||||
// #| #
|
||||
// S # #
|
||||
// # #
|
||||
// # #
|
||||
//
|
||||
// IDEA: Follow turns when exploring a direction like that. Snake your way until
|
||||
// you fall off the map or you line up with a square you've been in before
|
||||
std::map<Direction, bool> could_loop;
|
||||
// Part 2: If you could loop in this next position, COUNT IT
|
||||
if(player.direction == Direction::DOWN)
|
||||
{
|
||||
// search left of new position to see if you've been in this horizontal bit:
|
||||
for(int x = next_location.first; x >= 0; --x)
|
||||
{
|
||||
std::pair<int,int> potential_position = { x, next_location.second };
|
||||
if(level[potential_position].reached.contains(Direction::LEFT))
|
||||
{
|
||||
could_loop[Direction::LEFT] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(player.direction == Direction::UP)
|
||||
{
|
||||
// search right of new position to see if you've been in this horizontal bit:
|
||||
for(int x = next_location.first; x < max_x; ++x)
|
||||
{
|
||||
std::pair<int,int> potential_position = { x, next_location.second };
|
||||
if(level[potential_position].reached.contains(Direction::RIGHT))
|
||||
{
|
||||
could_loop[Direction::RIGHT] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(player.direction == Direction::LEFT)
|
||||
{
|
||||
// search left of new position to see if you've been in this horizontal bit:
|
||||
for(int y = next_location.second; y >= 0; --y)
|
||||
{
|
||||
std::pair<int,int> potential_position = { next_location.first, y };
|
||||
if(level[potential_position].reached.contains(Direction::UP))
|
||||
{
|
||||
could_loop[Direction::UP] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// search left of new position to see if you've been in this horizontal bit:
|
||||
for(int y = next_location.second; y < max_y; ++y)
|
||||
{
|
||||
std::pair<int,int> potential_position = { next_location.first, y };
|
||||
if(level[potential_position].reached.contains(Direction::DOWN))
|
||||
{
|
||||
could_loop[Direction::DOWN] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
total_pt2 += could_loop.size();
|
||||
|
||||
level[next_location].reached[player.direction] = true;
|
||||
player.location = next_location;
|
||||
|
||||
DebugPrint();
|
||||
usleep(500000);
|
||||
}
|
||||
}
|
||||
|
||||
DebugPrint();
|
||||
|
||||
for(auto y = 0; y < max_y; ++y)
|
||||
for(auto x = 0; x < max_x; ++x)
|
||||
if(level[{x,y}].Reached())
|
||||
++total;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
2
2024/7/Makefile
Normal file
2
2024/7/Makefile
Normal file
@@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
9
2024/7/data_test.txt
Normal file
9
2024/7/data_test.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
190: 10 19
|
||||
3267: 81 40 27
|
||||
83: 17 5
|
||||
156: 15 6
|
||||
7290: 6 8 6 15
|
||||
161011: 16 10 13
|
||||
192: 17 8 14
|
||||
21037: 9 7 18 13
|
||||
292: 11 6 16 20
|
49
2024/7/main.cpp
Normal file
49
2024/7/main.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::ifstream ifs("data_test.txt");
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing data.txt." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::vector<std::vector<long>> cals;
|
||||
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
cals.push_back({});
|
||||
std::istringstream input(line);
|
||||
// for each value in the line:
|
||||
std::vector<long> nums;
|
||||
for(std::string value; std::getline(input, value, ' '); )
|
||||
cals.back().push_back(std::atoi(value.c_str()));
|
||||
}
|
||||
|
||||
for(auto cal : cals)
|
||||
{
|
||||
for(auto num : cal)
|
||||
{
|
||||
std::cout << num << " ";
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user