Compare commits
2 Commits
master
...
be245df497
Author | SHA1 | Date | |
---|---|---|---|
be245df497 | |||
01effaa582 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,2 @@
|
|||||||
*~
|
*~
|
||||||
*a.out
|
|
||||||
*main
|
|
||||||
|
98
2021/10/data
98
2021/10/data
@@ -1,98 +0,0 @@
|
|||||||
{<[[<<<[[{[[<<()()>>[([]<>){{}{}}]]]<(<{{}<>}{{}{}}><{<>[]}[{}{}]>)({(())}<[(){}][(){}]>)>}]<<<(<<{}
|
|
||||||
{[({({([({(((<[]()>[()<>]){[<>[]](<>[])})<<<[]()}>(<()()>)>)}[{((<{}[]>{<>()}){[<>{}]<<><>>})(({[]()}<<>()>)<
|
|
||||||
(((([{{{<{<[[<()<>><<>{}>]]{<(<>())>}>{<[([]<>)<{}{}>][[<><>][<>[]]]>[{(<>{})[<>()]}<<()[]>[[]<
|
|
||||||
<<[<([[{{{[({<<>()>}<<<>[]>([]())>){{{{}[]}<(){}>)}]{{[(()())[(){}]]<<[]{}>({}[])>}({<<><>>}<([]<>){()[]}>)}
|
|
||||||
<[(({[({<<[[[{<>{}}(<><>))<(<>[])[{}[]]>]<[([][])[(){}]]>]([<[()()](<>[])>]<(<{}()>[{}<>])({<>[
|
|
||||||
(<[[{[[[(<((<<{}{}><[]<>>><[{}<>][<>[]]>)<(<{}<>><{}{}>)[{()[]}<<>()>]>)>[(<{({}{})}[{()[]}{[]<>}]>){<(([]
|
|
||||||
(([[({{{(<([({[]{}}){{[][]]}])>)[<([[[{}]{(){}}][([]())]]([{[][]}{<>()}](({}()){<>{}})))[{({
|
|
||||||
{(<<([([(<<[{((){})([]<>)}]<{{{}{}}{{}[]}}<{(){}}{()[]})>><([<[]{}>([]<>)](<()<>>)){<([]<>
|
|
||||||
{[<<[<{{((({<[[]{}]{{}}>{<{}<>>[<>[]]}})<{[(<><>><{}<>>][{[]{}}]}[[[[][]]<<>{}>]{[[]()][[]<>]}]>)[(
|
|
||||||
({<(<([{<{<[(((){}){(){}})]>}[{{{{()()}<[]()>}{{<>()}<{}{}>}}[[{{}{}}[<><>]]{({}[]>[[]{}]}]}({{{()()
|
|
||||||
{[[{([{<<{<(<<{}()>[()]>)<{{()()}}[<[][]>(<>{})]>>{[<{<>()){()<>}>{{()()}[<>()]}][[[{}[]]]<{{}[]}<()(
|
|
||||||
{{<<<<<[[([{<[{}[]]{()<>}>{<<>()>{{}<>}}}<<{{}()}{()()}>{[()<>]({}[])]>]{[(<{}{}>)<({}[])>]<{({}<>)}{({}())
|
|
||||||
({(<<{[<<{<(<[<>()][[][]]><[{}<>]({}[])>)[[[<>[]][[]()]]<{[]{}}[{}{}]>]>{[(<[]()>{<>{}})][<{{}}<{
|
|
||||||
(<<<[[({<[[(<<[]{}>>[(()<>)[<>{}]])<{(<>[])}(<<>()>[[]{}])>]<[({[]()}{{}{}})<{{}()}<{}<>>>]>][[({<<>()>{[]()}
|
|
||||||
{{{[<[([<(<{[([][])[{}[]]]{[()()]{{}()}}}><[<([][])(<>())><{()[]}({}<>)>]<<<(){}><<><>>>((()()){
|
|
||||||
[(((([{({<(<(<[]<>>{()[]})><{(<><>){{}[]}}{(()<>)([][])}>)>})}][({{[[{<(<><>){{}()}>((<>()){<>[]
|
|
||||||
([{<{<({(<[(<({}<>)><{[]}[{}[]]>)(<[[][]]{[]{}}>{{[]}((){})})]{(((()){{}()})(([][])({}{})))[(<()[]><(
|
|
||||||
[([{{<{(<[{{((()())<[]{}>){{{}<>}<<><>>}}[<([]())>[(()[])<{}{}>]]}{[({(){}}{(){}])<<[]()>{{}()}>
|
|
||||||
(<[<{{[<<({<<{<><>}><<()[]>[<><>]>>}{[(((){}){()<>}}<<[]()>{(){}}>]{{{{}[]}[{}<>]}[{{}{}}<(){}>]}}){{({
|
|
||||||
<([([[<[({<<{{[][]}<{}[]>}<<()[]>[()<>]>>>})((<(<[[]]((){})>{([]()){<><>}})>)(<<<<[]<>>[[]()])>>([[
|
|
||||||
[<<{<(<<{{[({<<>()><{}[]>})<{[<>()](<><>)}[{{}()}{[]()}]>]}}({<[{<()<>>}[<<>>]]((<[][]>{[][
|
|
||||||
{{(<({[((<([({()<>})[{{}[]}(()<>))]{[{[]<>}][{()<>}]})([({<><>}{{}()})])>)({<(((()<>)(<><>)))>((
|
|
||||||
[(<{({[<{<[<([{}()](<>{}))>]([([[]<>]<()<>>){<()>}]{{[[]()]{{}{}}}[{[]}{{}<>}]})>}<([<[<<>[]>]{<(){}>{
|
|
||||||
[[[[<(<({<[[<{()}{{}[]}><[<><>]<()[]>>](<([]{})[{}]>)]>}<[{[[{(){}}]{(<><>)}][<<[][]>{(){}
|
|
||||||
{(({({[{{((<[([]())((){})]>){[{(<>[])}<([]{})[[]<>]>]({<()<>>[[]<>]}[<()>{<>[]}])})({<([[][]]((){}))([<>{}])
|
|
||||||
<(<(<<{[<<{<<[()[]][[]()]><([][])<{}()>>}}>[<<<<{}<>>>{[{}][{}{}]}>[<[()()]{{}[]}>[{[][]}([])]]>[[<<[][]>(
|
|
||||||
<<{{({<<(([{{([][])(()<>)}}(<<[]{}>>)])([{[(()[])]}<{{<><>}<[]<>>}[<{}<>><[]<>)]>]{{<[{}[]]
|
|
||||||
({[[[[(([[[{<({})([]())>{{<>{}}}}][[<<[]>[<>()]>]{[[[]<>][<>{}]]{[<>[]]}})][[<(<(){}>{()[]})><[[()[
|
|
||||||
(((((([{{{(<<(<>{}){<>}><(()[])<()[]>>>{[<{}<>>(<>())}<{{}()}>})((([(){}]{<>})[{[]{}}{{}[]
|
|
||||||
(([([(((<[(({[<>()]{[][]}})[{{[]()>[[]{}]}(<<>{}><{}<>>)]){[({[]}(<>[]))([()()][<>{}])]({({}
|
|
||||||
[(<({{([[<(((<<>()>[[]<>])({{}()}<()<>>))[[{[]()}<()<>>][{()()}<{}[]>]])>({(<({}{})<()[]}>[{()
|
|
||||||
{{{[([<{{{([<<<>{}>{()<>}>{<{}()><<><>>}]([{()}]))<{[<()()>{()[]}]{({}[])[<>()]}}>}}}({<(({({
|
|
||||||
[([([<[<(<[{{{<>()}{()[]}}({()[]}[{}<>])}{[{<>}]([[][]]<(){}>)}]>[[{<[<>()][{}()]>(((){}>[<>[]])}{{{<>(
|
|
||||||
{{[{{[[<{(<([[[][]]([]<>)])>)<{<<{<>()}[<>()]><((){})<<><>>>>([<<><>>(()<>)]([(){}}{[]<>}))}>}(({{{{[]}{
|
|
||||||
[[[[({[<({{[[(<><>)]{<<>[]>([]{})}]<[{[]}{()()}]([<>()]([]<>>)>}})>{{<([{<{}{}>{()}}])({<[<>()](<><>)>
|
|
||||||
{[({<[({[{[({[{}()][[]<>]}((()<>)<{}<>>))<[{{}}({}{})]>]{[<<<>[]>[[][]]>(({}[])(()[]))>{(([]{})({}[]))([
|
|
||||||
[<<([{{(<<[<[[{}[]]](<[]{}>[<>{}])>[[<{}[]>(<>[])]{([][])[()[]]}]][[{{()[]}[<>{}]}(<<>{}>[[]
|
|
||||||
<[(([{([([<{[[(){}]<<>{}>]}[[[()()]{{}<>}]]>[[{({}{})[()()]}([()()][<>[]])]{<[[]<>][[][]]>}]]{{<{[<>
|
|
||||||
[<[[[[([[{[[<[{}{}]([]<>)>[({}[])<[]<>>]][<{()()}[<>[]]>([[]]<<><>>)]]}([<{{{}[]}}{(()<>>({}[
|
|
||||||
<[<{[(<{({[<[[[][]]([][])]<([]){{}<>}>>[({<>{}}<[]>)]]([[([]{})[[]()]][[[]{}]({}{})]](<[{}<>
|
|
||||||
({[<([(<[[<([[(){}]<<>{}>])({[[]{}]<()[]>}<<[]<>>{[][]}>)>{<[<[]()><{}[]>]([<>()]({}[]))><(
|
|
||||||
({<<<{<({[[{[{<>{}}[<><>]]}{(({})[()()])<<()<>>([]{})>}]]]{<{{([[]<>](<>[]))[[{}()]({}())]}}>((<([{}<>])>{{<[
|
|
||||||
[{([{[[{{<{<[{[]()}<[]{}>]>({<{}[]>{<>[]}})}[(({{}<>}<{}<>]){[[]{}]({}[])})]>}}]({([[([<()()>{[]
|
|
||||||
<[{([([{[{<(([<>[]]{<>()})<{{}<>}>){([<><>])<(()[])<<>{}>>}><{{[{}<>]{<>}}[(())[()<>]]}<{[{}{}]{{}{}}}<{{}<>
|
|
||||||
[{<<([{{(((<{<<>()>[{}()]}>{<<<>[]><[]()>>}){[(([][])([]()))<{{}[]}[[]()]>][[{{}<>}({}{})]{({}{})(<
|
|
||||||
{({[((<([[[{{([])[()()]}({{}{}}))<(<[]<>>[()[]])>]<<([[]<>])<[<>()][[]<>]>>({[<><>]{{}[]}}({()[]
|
|
||||||
{[(<(<{[({[(<<[]>{<>{}}>[{<><>}([]())])(<[[][]]<()<>>>[(()[])])]<{[{()[]}[<>{}]]}[{<(){}>(<>{})}<<<>()>>]
|
|
||||||
(<{<[<({{{{([({}{})[[]{}]]({{}<>}<()[]}))}(<<{<>()}{()<>}>{[<>{}][()[]]}>{<<[][]>{<>()}><(<>{})<{}[]>>})}
|
|
||||||
{(<<{[({<<[(<{{}{}}<[]<>>>((<>())([]<>)))]>><<({<{[]<>}([]<>)>{[()()]}}<<{{}<>}<()()>>(<()()
|
|
||||||
<([([<(<[({[[({}()){()<>}](({}{})(<><>))][{({}<>)<{}{}>}{([]){(){}}}]})]>)<[[{<{{(()){<>[]}}({{}()}
|
|
||||||
<<<([{[({{{((<{}()>{()()})[[<>()]])[[[{}()]<{}()>]{{[]<>}{{}())}]}<<{<<>><<><>>}[{{}[]}(<><>)
|
|
||||||
<([<[<{[[[{[{[<><>][{}<>]}(<[]{}>)]}([{{<>()}<{}[]>}{([]<>)[(){}]}]<{((){})<[]()>}[<[]()><()[]>]>
|
|
||||||
[([[[[[({{[(<[{}<>]<{}()>><[<><>]{<>()}>)]}<{(<(()<>)<{}{}>>{{()<>}(()()}})}>})(<[<([<<>[]>((){})]([[]<>]<()
|
|
||||||
{(<[[{(((([[([{}()]<{}()))[({}{}){[]}]](<<<>[]>>([<>{}]))][(<({}{})<()[]>><<[]{}><{}[]>>)])(<([([][])[
|
|
||||||
({(([{{<{{{<[<<>[]>{()<>}][([][]){()<>}]>([<()>(<><>)]<{<><>}<[]>>)}<{[[<>[]][<>{}]]<{<>()}{[][]
|
|
||||||
{[([[[(([<{<{[[]<>]<<>()>}<<()()>([]{})>>[<<()[]>(<>())>[(()<>)]]}>]{{({{{{}[]}({})}<{{}<>}[[]()]>}((
|
|
||||||
[<([[<[{{{[[[<<>{}>]{<()[]>{[]<>}}]{([[]{}]({}()))}]}}}(<{<[[({}{})<()()>]]({({}<>)[[]]}{[<><>]{<>{}}})>(<[
|
|
||||||
<<(<<{{(({<[<<[]{}>{()()}}[[()[]]]]{[(<>{}){<>}]{[{}](<>)}}><{<(()())<[]<>>>[<(){}>(<>[])]
|
|
||||||
{<(<[<[(((<{((()[])([]<>))([[]<>]({}[]))}><<([<>())<[]<>>)(<{}[]>({}<>))>[[([]())]({()()}{{}<>})
|
|
||||||
[[((<[[[{{<{<{{}()}[{}()]>{{[]{}}[<><>]}}>}<{[<[(){}]<<><>>]([{}<>]<<><>>)]}(<<[{}<>]<<>{}>
|
|
||||||
<[{{[[{<[{(({[(){}]({}{})})[([{}<>][()()])[<[][]><{}<>>]])}](<({(([]<>){()[]})[([]())((){})]}{{{<>{}}<[]()>}<
|
|
||||||
<{((<([[{<<[(<{}()><{}[]>)]>[([{<>()}<()()>]<{()[]><()[]>>){<[{}[]]>[{[][]}(<><>)]}]>{{[{{{}<>}{<>}}[[(){}]<(
|
|
||||||
{<[({(<{{[([{{[]{}}((){})}[[{}[]]<{}()>]]((<[]<>>)<([]()){{}[]}>))(<<{()[]}{[]})>[[(()())]{[()<>][<>(
|
|
||||||
<<{[[[[{<({<[[{}()]]{{[]<>}{[]}}><{{{}()}({}{})}>}{([({}[])({}())](({}[])))[<{[]<>}[<>()]><<[]<>>(<>[])>]}
|
|
||||||
[(([<<[{[{<({{()[]}<<><>>})[[([]())[[]{}])(<<>{}>)]>(<{{[][]}[{}()]}([{}{}][(){}])>((<<>[]>(()
|
|
||||||
[({<<[[<{[<<({[]()}<()<>>)>]]{{<[[[]][{}<>]]>}{([[<>{}][{}{}]]<((){})(()[])>)}}}([{((<{}[]>)[<{}[]><{}()>])}
|
|
||||||
{[[((<[{<<([{<<><>>([]{})}<(<><>)<<>()>>][{[[]{}]{()()}}<({}{})([][])>])><<{({<>{}}[<>()])((
|
|
||||||
[[[<{{(<((([{<[]{}>({}<>)}[<<>()>]]<<(()[]){{}[]}>{(()<>){{}<>}}>){{{(()())[<><>]}[[[]<>]{<>[]}]}}))[
|
|
||||||
(<({[({[[({{<{<>{}}<()[]>>[{(){}}<<>[]>]}[[<[][]><()<>>]({<>{}}{[]()})]}{(([[]<>][{}[]])(<[]<>>([
|
|
||||||
{([<{[<({{{({[[][]][()()])[<<>()><[][]>])}<{{{[]()}[{}()]}{{<>()}{<>}}}((({}())<{}{}>){(<>{})[<>{}]})>}})(((
|
|
||||||
([[[[[[{(((((<<>()>[[]<>])<{()()}[()<>]>){<[()[]]<<>[]>>(<<>{}}{{}[]})}))<<[([()()][[]()])[{()[]}([]())]][<([
|
|
||||||
({{((((<{<[{[(<>{})][<()()>[[]()]]}]{({(<>())[[]()]}{<[][]><[][]>})}>}>{<<{{(({}())[<>])((()[])<[]<>>)}}[
|
|
||||||
<(<[[[<<{([<<[[]<>]{<>[]}><{()()}([]<>)>>]{<{(<>())((){})}{[{}{}]<<>{}>}>})({([[{}{}]])[(<<>()>[
|
|
||||||
{[(<{<[[{<{{(<()[]><<>{}>){[()<>]<{}<>>}}[[[<>{}][[]<>]]]}<[[({})<<>[]>]]{{<()<>><<>[]>}<{()[]}((){}
|
|
||||||
({[{(<<{[<{({[()()]{{}}}<({}{}){()()}>)}<{(({}{})[<>[]]){([]())[[][]]}}{(<[]<>)[()])[[<>()]]}>>
|
|
||||||
(({<<[<[<<<({<{}[]>({}{})}{<{}[]><{}[]>})>>(<<(<()()>{[]{}})({()<>}[()()])>[{[{}()][[]]}({<>()}}]>(
|
|
||||||
<<(<(<[{([{<[[<>{}]<{}<>>]>{<(()[])(()())><{<>[]}{()()}>}}([{({}<>){<>{}}}{{<>[]}[{}{}]}]([<[]()>((){})
|
|
||||||
{[{([({[[<<<{{[]{}}<[]{}>}[<()[]><[]<>>]>([{{}[]][[][]]]{{(){}}({}[])})>(<{[<>{}](()<>)}>{[<[]()>
|
|
||||||
([[[<(<{[({<({()()}{<>()})((<>[])<[]<>>)>}<{<<{}()><<>>>}({{{}[]}}[(()[])[()<>]])>)<[<((()())[<>{}])(
|
|
||||||
{<(((<[((((({<[]>[[]{}]}))[(<[[][]][{}{}]>){{[<>()][[]<>]}([()()](<><>))}])){(<[{[<>()][{}()]
|
|
||||||
({([{<(((<{[<[{}[]]<<>>>({{}[]}[[]()])]([<(){}>])}{<[{<>[]}{[]<>}][<<><>){<>{}}]>[<((){})([]{})>[[{}{}][()
|
|
||||||
<[{[<[{[({{<(({}<>}[[]()])>({{[][]}}<[(){}](()[])>)}})([[{{<<>()>([]{})}[<<>{}>[<><>]]}]])]
|
|
||||||
{(<{([{[[({[(<[]{}>)({{}[]}{()()}))<{(()[])}[[()()]{{}[]}]>}<{<(()<>)>{{[]{}}({}())}}({{{}[]}{<
|
|
||||||
[<<{<{<<(<([<(<>()){[]()}>[({}<>)({}<>)]][(([]{}){()[]})[{{}()}(()())]])>{([{{()[]}<<>[]>}<{<>[
|
|
||||||
{{[[(([([({([([]<>)(()())][{<>()}{(){}}])})])]([{{[<{{{}<>}(<>())>{[()()]<<>[]>}>[{(()){{}[
|
|
||||||
[({({({(({{(<[()()][{}<>]>[[{}()]{(){}}])<[<<>[]>][<{}>(<>{})]>}(((({}())({}{}))){{(()[])<[][
|
|
||||||
<(<(<[([<[{[<(()<>)<()[]>><(<>())([][])>]{<[{}<>]{{}()}>{[[]{}](<>{})}}}<[<([]{})><{{}<>}([]())>]>]>
|
|
||||||
<<<(<<[({{{<{({}<>)<()[]>}<[()<>]{(){}}>><{[[]()]<[]{}>}[({}{})<(){}>]>}(<[<<>[]>{()[]}]>)}[<{[<{}>[{}{
|
|
||||||
{(<((<[{{[[[[<{}{}]<{}()>]][{({}{})<<>{}>}[<()[]>(()())]]]{([<[]()><[]{}>](<{}()>))({<<><>>(<>())}{
|
|
||||||
{({{[[<[{<{{(<<>>)(<[]()>[()])}([({}<>)])}[[{[()<>][()[]]}]({<[]<>>{<>()}})]><<(<<{}()>{<>[]
|
|
||||||
{{{[{[<<{[[{[{{}<>}<[][]>]{(()[])<<>()>}}[<{()()}[(){}]><<()[]>>]]{<((<>{})({}()))[<(){}>([][])]>{({{}[]}<
|
|
||||||
<{{[<{({{{[<{{<>()}{{}()}}>]<{<[()[]](<><>)><[<>[]]{(){}}>}<([(){}]<{}{}>){(())}>>}[([{[[]<>][{}<>]}[{()}(
|
|
||||||
[<<[{{(({({<{{{}{}}{<>[]}}({[][]}{<>[]})>[{[{}<>][<>[]]}[({}[])[[]<>]]]})}))<(<[[<(({}()))[<<>()>{(
|
|
||||||
{<<([<{({[{{[({}[])<<>{}>]([()<>]<(){}>)}<([{}[]]({}{}))>}[<<<<>{}>[[][]]>{<<>[]><()>}>[<<<>><[][]>
|
|
||||||
[({(<({[<[{{[<<>[]>[()[]]]<<<>[]>>}}<{([{}[]](<>{}))[{<>}{{}<>}]}(<<[][]>>[{[]<>}])>]>[(<(({<>[]}{<><>}))(<
|
|
||||||
{<[[{{<<{(<(<([]<>)[[][]]>[([]{})[<>{}]])<[{<>()}{[]<>}]>>>[{(({()()}[<>[]]){({}())<[]<>>})}[(<{<>
|
|
||||||
{[[{{{<[<[{<(({}{})[{}()])[(<><>)({}())]>}{[<{[]{}}[()[]]>]<{[()()]<[]()>}<[[][]]>>}]>{{({{{()[]}{{}(
|
|
||||||
<{[<([{{[[<(<{<><>}[{}{}]><((){})>){[[()()][()[]]]{[[]<>]}}>]<<(<({}[])<{}[]>>{(<><>)<[]()>}){(<
|
|
@@ -1,10 +0,0 @@
|
|||||||
[({(<(())[]>[[{[]{<()<>>
|
|
||||||
[(()[<>])]({[<{<<[]>>(
|
|
||||||
{([(<{}[<>[]}>{[]{[(<()>
|
|
||||||
(((({<>}<{<{<>}{[]{[]{}
|
|
||||||
[[<[([]))<([[{}[[()]]]
|
|
||||||
[{[{({}]{}}([{[{{{}}([]
|
|
||||||
{<[[]]>}<{[{[{[]{()[[[]
|
|
||||||
[<(<(<(<{}))><([]([]()
|
|
||||||
<{([([[(<>()){}]>(<<{{
|
|
||||||
<{([{{}}[<[[[<>{}]]]>[]]
|
|
@@ -1,34 +0,0 @@
|
|||||||
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)
|
|
@@ -1,33 +0,0 @@
|
|||||||
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
10
2021/11/data
@@ -1,10 +0,0 @@
|
|||||||
1254117228
|
|
||||||
4416873224
|
|
||||||
8354381553
|
|
||||||
1372637614
|
|
||||||
5586538553
|
|
||||||
7213333427
|
|
||||||
3571362825
|
|
||||||
1681126243
|
|
||||||
8718312138
|
|
||||||
5254266347
|
|
@@ -1,10 +0,0 @@
|
|||||||
5483143223
|
|
||||||
2745854711
|
|
||||||
5264556173
|
|
||||||
6141336146
|
|
||||||
6357385478
|
|
||||||
4167524645
|
|
||||||
2176841721
|
|
||||||
6882881134
|
|
||||||
4846848554
|
|
||||||
5283751526
|
|
@@ -1,42 +0,0 @@
|
|||||||
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)
|
|
@@ -1,49 +0,0 @@
|
|||||||
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
102
2021/14/data
@@ -1,102 +0,0 @@
|
|||||||
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
|
|
@@ -1,18 +0,0 @@
|
|||||||
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
|
|
@@ -1,45 +0,0 @@
|
|||||||
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])
|
|
@@ -1,45 +0,0 @@
|
|||||||
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
100
2021/15/data
@@ -1,100 +0,0 @@
|
|||||||
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
|
|
@@ -1,10 +0,0 @@
|
|||||||
1163751742
|
|
||||||
1381373672
|
|
||||||
2136511328
|
|
||||||
3694931569
|
|
||||||
7463417111
|
|
||||||
1319128137
|
|
||||||
1359912421
|
|
||||||
3125421639
|
|
||||||
1293138521
|
|
||||||
2311944581
|
|
@@ -1,12 +0,0 @@
|
|||||||
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)
|
|
130
2021/8/main2.py
130
2021/8/main2.py
@@ -1,130 +0,0 @@
|
|||||||
# IDEAS(dev):
|
|
||||||
# - You might not have to determine all the positions if the numbers to decode don't use them
|
|
||||||
# e.g. while(number to decode NOT IN numbers decodable) { do everything }
|
|
||||||
# -
|
|
||||||
|
|
||||||
# NOTES(dev):
|
|
||||||
# - It looks like the codes are NOT always printed in the same order. For example, if one shows up
|
|
||||||
# as 'cg', it might also later show up as 'gc' in the same line.
|
|
||||||
# 0: 1: 2: 3: 4:
|
|
||||||
|
|
||||||
# aaaa .... aaaa aaaa ....
|
|
||||||
# b c . c . c . c b c
|
|
||||||
# b c . c . c . c b c
|
|
||||||
# .... .... dddd dddd dddd
|
|
||||||
# e f . f e . . f . f
|
|
||||||
# e f . f e . . f . f
|
|
||||||
# gggg .... gggg gggg ....
|
|
||||||
|
|
||||||
# 5: 6: 7: 8: 9:
|
|
||||||
# aaaa aaaa aaaa aaaa aaaa
|
|
||||||
# b . b . . c b c b c
|
|
||||||
# b . b . . c b c b c
|
|
||||||
# dddd dddd .... dddd dddd
|
|
||||||
# . f e f . f e f . f
|
|
||||||
# . f e f . f e f . f
|
|
||||||
# gggg gggg .... gggg gggg
|
|
||||||
|
|
||||||
# initialize shared data:
|
|
||||||
possibilities = {}
|
|
||||||
all_possibilities = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
|
|
||||||
|
|
||||||
# functions:
|
|
||||||
def ResetData():
|
|
||||||
possibilities.clear()
|
|
||||||
for letter in all_possibilities:
|
|
||||||
possibilities[letter] = list(all_possibilities)
|
|
||||||
|
|
||||||
def RemoveImpossibleLetters(good_letters, good_positions):
|
|
||||||
# generate inverse list of good_positions
|
|
||||||
bad_positions = list(all_possibilities)
|
|
||||||
for position in good_positions:
|
|
||||||
bad_positions.remove(position)
|
|
||||||
|
|
||||||
# first, get rid of the other letters from the positions used
|
|
||||||
for position in good_positions: # positions used
|
|
||||||
to_remove_list = []
|
|
||||||
for l in possibilities[position]:
|
|
||||||
if(not (l in good_letters)):
|
|
||||||
to_remove_list.append(l)
|
|
||||||
for to_remove in to_remove_list:
|
|
||||||
if(to_remove in possibilities[position]):
|
|
||||||
possibilities[position].remove(to_remove)
|
|
||||||
# second, get rid of the good letters from all the other positions
|
|
||||||
for position in bad_positions: # positions not used
|
|
||||||
for to_remove in good_letters:
|
|
||||||
if(to_remove in possibilities[position]):
|
|
||||||
possibilities[position].remove(to_remove)
|
|
||||||
|
|
||||||
def ParsePossibilities(text):
|
|
||||||
text_len = len(text)
|
|
||||||
|
|
||||||
# The easy ones first:
|
|
||||||
if(text_len == 2):
|
|
||||||
good_letters = list(text)
|
|
||||||
good_positions = ['c', 'f']
|
|
||||||
RemoveImpossibleLetters(good_letters, good_positions)
|
|
||||||
|
|
||||||
if(text_len == 3):
|
|
||||||
good_letters = list(text)
|
|
||||||
good_positions = ['a', 'c', 'f']
|
|
||||||
RemoveImpossibleLetters(good_letters, good_positions)
|
|
||||||
|
|
||||||
if(text_len == 4):
|
|
||||||
good_letters = list(text)
|
|
||||||
good_positions = ['b', 'c', 'd', 'f']
|
|
||||||
RemoveImpossibleLetters(good_letters, good_positions)
|
|
||||||
|
|
||||||
# This one straight up doesn't help:
|
|
||||||
# if(text_len == 7):
|
|
||||||
# good_letters = list(text)
|
|
||||||
# good_positions = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
|
|
||||||
# RemoveImpossibleLetters(good_letters, good_positions)
|
|
||||||
|
|
||||||
# The harder ones second:
|
|
||||||
# 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
|
|
||||||
# 'c' and 'e' for TWO
|
|
||||||
# 'c' and 'f' for THREE
|
|
||||||
# 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):
|
|
||||||
# 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
|
|
||||||
# 'c' and 'e' for ZERO
|
|
||||||
# 'd' and 'e' for SIX
|
|
||||||
|
|
||||||
|
|
||||||
total = 0
|
|
||||||
with open('example_data', 'r') as fp:
|
|
||||||
# NOTE(dev): We assume all lines are the same length
|
|
||||||
for line in fp:
|
|
||||||
ResetData()
|
|
||||||
split_line = line.split(' | ')
|
|
||||||
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
|
|
||||||
|
|
||||||
for text in data:
|
|
||||||
ParsePossibilities(text.strip())
|
|
||||||
|
|
||||||
asdf = possibilities.items()
|
|
||||||
asdf = list(asdf)
|
|
||||||
asdf.sort()
|
|
||||||
print(asdf)
|
|
||||||
|
|
||||||
# part 1 answer:
|
|
||||||
print(total)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# # DEBUG(dev):
|
|
||||||
# print(possibilities)
|
|
100
2021/9/data
100
2021/9/data
@@ -1,100 +0,0 @@
|
|||||||
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
|
|
@@ -1,5 +0,0 @@
|
|||||||
2199943210
|
|
||||||
3987894921
|
|
||||||
9856789892
|
|
||||||
8767896789
|
|
||||||
9899965678
|
|
@@ -1,44 +0,0 @@
|
|||||||
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)
|
|
@@ -1,95 +0,0 @@
|
|||||||
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
2238
2022/1/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,57 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,38 +0,0 @@
|
|||||||
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}");
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
146
2022/10/data.txt
146
2022/10/data.txt
@@ -1,146 +0,0 @@
|
|||||||
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
|
|
@@ -1,146 +0,0 @@
|
|||||||
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
154
2022/10/main.cpp
@@ -1,154 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
@@ -1,56 +0,0 @@
|
|||||||
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
114
2022/11/main.cpp
@@ -1,114 +0,0 @@
|
|||||||
#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
2500
2022/2/data.txt
File diff suppressed because it is too large
Load Diff
127
2022/2/main.cpp
127
2022/2/main.cpp
@@ -1,127 +0,0 @@
|
|||||||
#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
300
2022/3/data.txt
@@ -1,300 +0,0 @@
|
|||||||
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
|
|
@@ -1,81 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
1000
2022/4/data.txt
1000
2022/4/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,79 +0,0 @@
|
|||||||
#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 +0,0 @@
|
|||||||
../4/Makefile
|
|
512
2022/5/data.txt
512
2022/5/data.txt
@@ -1,512 +0,0 @@
|
|||||||
[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
119
2022/5/main.cpp
@@ -1,119 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,6 +0,0 @@
|
|||||||
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
BIN
2022/6/b.out
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
hqhnqhqshhslswsffchfcfbblvlblqlggfwwqfwwqdddbbbhzhjjrqjqbjqjwqjwqwhwrrmcrrjqjjlllcvcrrnpptzpzmmswmmzrzjrrfcrfccpbpzzvrrdndllttwftwwgzzwhwggdvdnnlrnncscbcfcctchcdchdccztzgzjjtdtcdtcchrrgpgzgsgpsggvtvppdccfhcfclfcfdfnddlbbptbtdbtdtjdjgdjjzljlssgbgcgqcqzccfnftfjjsgstggsngsscvssjzjnjtntvnvssrqqhtqtvqtvvjbvvbnvvqvmvrmmdsdvdwwnbnvbnvvcgvcczcfzftfsfrfsfttldtdrrgrgmgbbdvvbqbhqbqlqsqbsbpbgbvgbgwwrswrwrwttvnnzdnzzwggrmrfmmvllzwlwzzlvlbvllgsllpnlnvncvcvqqrwwcmcczhchzczbccdwcwvwzwwvddlwlhljlqjqnncntnctczzmwmlmccpggljlssqswsmmpvmvwvrrcpcrprmprrtdrtdrrsjsmshmmdpdlppbnbvvmmflmmjvjhvhjvjsjbjwjvvblvbvlbbllwlslvljvlvdvdgvgcchnhpnhnvhhtfhhvssczztlzzgvvqqghqgqssdscsnsrsmrmmwgwmgmlmdmggbgzbgzgdzdzccghgfgddtntftddpdrdrmrjmmmzttqmttnwngggtgtqtqnqhnqqpnnntrntrnnshhjtjzzfqqblqqlblslflmlttcwtwzzrlrnrcrrrgtrrftfhthzhggwggvgvvfvddcnddfjddzqzrrvtrvrfrrgpgrgngsgddlmddzgzppdzzjzhjhjhqqbpbvvlrvrsvrvnrrsgsttndnbngnppmlppvgvfggvcvrvnnsnfnnfqfwwppnddrrfqqgbqqfmmlnlnngwgcgjgnjgjsgjgqjjnccdttpqttswwcgcmgmccrppmqmbbfwwvdwdfwfjwfjjblldsdrdvvgcvcwwllfpllcslsvssnvsnvvhnvnvwwcgwccslsbbnlbnbrrrtprptpdpdvdttgsgwswppcdchhqbqcbqbzbgbbstshthsttqgtqtpqqzhhwhghwwmbbdlbbtlltsllbvbnvvmqvqtvqvttlwtltmmrttwgtwwfdddwcchtchhbthbbclczzqbzzpvvwzwswggjddntnrnnwmnnbdbmbccqgqvvsnvvqbvbzvvzmvzzrfrlfrfhhdvddnmnnmhmqhhrhlrldljlbljjgqqvdvhhgmgvgddmmznndmmhssznsswvwdvdzdhhscssntnftfmmrggbmbmgmlltctbtbntnqqscqcscrcrhrlhhdchhzccvvbfvvpfffbwbsbjjmgmwgmgppjnpjphhlmhhpwwhwzhhhzbbzzcbchhpnnptpvphhsdsccffqbqllchlhlwlcljlppnccqsstzstswtwwljwjmmpttvqqspsjjclljqqlhqqtnnbrrsbrbjjllrmrjmjzmmclmclmmcvvbddhnnmhmbbwqqqhrqqtqmqbqdbdtdvvcscshccmffhqffdgdcgddljdjbdbjbdbrrtjjtnntpntpnpmnpmpgghffrnfrnnmdnmnhmmjcjffftrrttfwfvwvcwwrmwmpwmmnvntthmmgmbbcdclcppjhpjhjwwlppgsszqqwggmttfrfqflfsfmmmhchshmmjtjjgdjjnnsvsmsnwcgdfqljmnphlfdrhpggfqnhnszgpndhdqcgfhtdcgbsbtmhvnnrmqzqqcjdqndzbnrhwjvbvcldmnwltgpqbmstntnggtbqjzzqrfdsfttdfrcnsrpwrjrjqbgtjfmlwsrzdbdqvbtczgsjqhtgmctjfmdglfrsvqtgwpbqghzgzdfwzhbdhlmhdvhwjrdhhtjptvwpmjnmfcjdmdczmczvdqwvbgtvlwvwnvdlbqfshmlmvzzcmjbtpwpwgsqhfsgljzhbppcztfjdntzcvllqnzrqjwfjrlgvhmbpvbtqjrdzcsmcjzcdsmvcmhrbhgnscnfrfmscqsqpqplbrzhsrlsvvpmfdtdmtlrtvspmlljmfpshfmstjgnrrwmqlbnwbndcfdstrtqtnzpfqlcgrzmsnmhllljdgtmvftjttbwhqzcqwbwdbshgcqrptfjwbbfsjnvzztlbdchqrlbbrcnsswmhwphfwrbnvrncbrthprmltlwwlfpbqhdfqzwwcwjgqzdnvmhwpzpbtpwwvzcpfcsfqpwjljzzfwzmlfvhsccppzlzjlrvlpdtjpcptnvqjwtdbzrqwnfwmmjndflqqggczrfjlpdfjffctprnmhfdqvnzbfvhszzdmngnlmwzfdrbvlvjnmbllgrczssqcrhbmnpmqlrzgmqmhgsvcdlqnmlhlzvqzhnccbctslzlbcpdvqltqncpcrzwdchrqmwfwlcbcvfnnpjntfrznqdjsdtzqjjttddwvnfqmznhflblzvvtbwdzrrlqlmndzzzwnpbhhlvlbswfjtbnhlccscbnfgjtwbfdlwvzszwnwzhlbcdpvgqjcrpzsvvnfwqcqvrmhzhggvmzwggdpbfrdscjwhsdsbbjcnzldhzcvqtjrhsbfjlrlpvtcqhnnsvslfrdjvjhfhdcfzqchpvvhzbpqglqlrdttrdtndzhnzhtqndghtgmpsnhptprqzhbbdcrgmbvrvqmbptqgnmsccwmhrlpddvmhjntllwrzqwnsjchnblcgndjtmpswwgcstdftqcbhzgttrhnpvrhspjznhhvrlpdqbzzrvzjphcswhljdldvsrdhzltwgrcsvqwnhtqqjjrjgrplzmsnjhzrfbtqgdfgnbpvjrfzrrpdphgzrfbswdhzgbzswqtwwdtrvvswmjvwhqddfzjhgdqsfnwbmlcfwtmpldrdpwjwggbpmncvbghzjmpsqpvnmbhjfzzpsjdgmrtnndhzrphjzdbgrrnthtrfnspdngbdmwbnfjlsndqswfsvfqftqlgqjpfsfpmdbsjfrptvbpvflqgvlmmbchhghhrwmvdlrhlsdtvjjchwglcrwfsfnnbhjbtccbjsfwrbzrvgsbfnvzghhrqblqchjvdtrrbrwwwmfnczzmmrqdggsfrqbldbbfbbcthtsvpcnlbjjztwvhctbrjltqdwbzmrrfslbmjpnqwllbvjzgfsfqqtwbgwgclgdflshfhwggwdqlgbmdmdqglrtfwbddtsltmsvswhgjtqwtnrncpdzhnpfqcjnjzmtbjfzpjwgfbfggmsmfdhfbjctnhchpgfspthdbfpmvrmdbbspvwzqqwnmfwdnnblbcjszbccgflngnjjwsqshfbhjwgzrmvsgnrdbgwfhdvpmznpnvznfcqdclztcptjrrpbmpztwwbvlvtmngfhmfbfmrjbjzlrcvgllrlgthltstnwmffntqrwsrndlzqhztwpcwbdjjztgdzmgtthcvtvnjzzhvstfqhgddddgdsrbcqzqspjrncphhtbnslzphrtfqphffjrrlgwbrwqfzzqvzhnffcwvrncttgplshccglvchvlcbnlthhmzvcrfjvjqfsjjzzgqlpslfwngqnbgcwffpcqhlmlhvwssrpjbrcbftpzbbpptzrdqwpzpdjhtwbvwcqbfnwtflfgzgttglpcwdnzsmjffgfftdnpzlpszmzrrhvlzdfpgbzqlvvfslnndcmjvvpwzwcdzpcttfwbsdswmfqbbhbfbjvbvtspbbhmphzjsjcmmzpvvzhtvzlgwlqqvbnrgtszvghjfmchrwwhpmbsvfmgvqdtmvdtjppchbsgqrtgtnzczqmpgjdbmmflfpjbcdmhldwpgdtdvsbzhztjzfhcsbndfjntbldjnqwdffqspfnlplbtcdjtwdjhldtsdfrnmpfhzghnpcqlhhgblmqjvwhndqfbccvzzlbzbdprvcpwjjhrqnjptwssbjhgvpgtfzqwrzjvbdgwtnmptvdjrffcmbzmzcmrfbjv
|
|
@@ -1,56 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,52 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,21 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,19 +0,0 @@
|
|||||||
#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
|
|
@@ -1,58 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
#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
|
|
@@ -1,2 +0,0 @@
|
|||||||
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
|
|
@@ -1,22 +0,0 @@
|
|||||||
#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
1013
2022/7/data.txt
File diff suppressed because it is too large
Load Diff
170
2022/7/main.cpp
170
2022/7/main.cpp
@@ -1,170 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
@@ -1,99 +0,0 @@
|
|||||||
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
200
2022/8/main.cpp
@@ -1,200 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
2000
2022/9/data.txt
2000
2022/9/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
|||||||
R 4
|
|
||||||
U 4
|
|
||||||
L 3
|
|
||||||
D 1
|
|
||||||
R 4
|
|
||||||
D 1
|
|
||||||
L 5
|
|
||||||
R 2
|
|
169
2022/9/main.cpp
169
2022/9/main.cpp
@@ -1,169 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
@@ -1,29 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
1000
2023/1/data.txt
1000
2023/1/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
|||||||
two1nine
|
|
||||||
eightwothree
|
|
||||||
abcone2threexyz
|
|
||||||
xtwone3four
|
|
||||||
4nineeightseven2
|
|
||||||
zoneight234
|
|
||||||
7pqrstsixteen
|
|
126
2023/1/main.cpp
126
2023/1/main.cpp
@@ -1,126 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -g -std=c++20 main.cpp
|
|
1000
2023/1_old/input.txt
1000
2023/1_old/input.txt
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
|||||||
two1nine
|
|
||||||
eightwothree
|
|
||||||
abcone2threexyz
|
|
||||||
xtwone3four
|
|
||||||
4nineeightseven2
|
|
||||||
zoneight234
|
|
||||||
7pqrstsixteen
|
|
@@ -1,134 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
@@ -1,4 +0,0 @@
|
|||||||
1abc2
|
|
||||||
pqr3stu8vwx
|
|
||||||
a1b2c3d4e5f
|
|
||||||
treb7uchet
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main_pt2.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main_pt2.cpp
|
|
1000
2024/2/data.txt
1000
2024/2/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
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
|
|
@@ -1,83 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,146 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp #-fsanitize=address -fno-omit-frame-pointer
|
|
@@ -1,6 +0,0 @@
|
|||||||
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 +0,0 @@
|
|||||||
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
|
@@ -1,74 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
140
2024/4/data.txt
140
2024/4/data.txt
@@ -1,140 +0,0 @@
|
|||||||
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
|
|
@@ -1,10 +0,0 @@
|
|||||||
MMMSXXMASM
|
|
||||||
MSAMXMSMSA
|
|
||||||
AMXSXMAAMM
|
|
||||||
MSAMASMSMX
|
|
||||||
XMASAMXAMM
|
|
||||||
XXAMMXXAMA
|
|
||||||
SMSMSASXSS
|
|
||||||
SAXAMASAAA
|
|
||||||
MAMMMXMMMM
|
|
||||||
MXMXAXMASX
|
|
169
2024/4/main.cpp
169
2024/4/main.cpp
@@ -1,169 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
1387
2024/5/data.txt
1387
2024/5/data.txt
File diff suppressed because it is too large
Load Diff
@@ -1,28 +0,0 @@
|
|||||||
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
160
2024/5/main.cpp
@@ -1,160 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
130
2024/6/data.txt
130
2024/6/data.txt
@@ -1,130 +0,0 @@
|
|||||||
.......................#....#....................#....#..##.##.........................................#...........#...........#..
|
|
||||||
.............#........................................#....................#............#.......................#............#....
|
|
||||||
.........#.............#..#....#..........................#.......#.#.......#...............................................##....
|
|
||||||
..........#....#....................................................#....................#...........#....#.......................
|
|
||||||
.............#...#....................#...........#.........#...........................#............#............................
|
|
||||||
..........................................................................................#.....#.......#...................##....
|
|
||||||
...............................................#.#......#..............#...#...................##...........#....#..#...#.........
|
|
||||||
..#.................#......#........#......................#.......#...............................#..............................
|
|
||||||
.........................#...............#.....................................#....#..#..#............................#..........
|
|
||||||
......................#.................................................................#..........#..............#...#......#....
|
|
||||||
............................#.....##..........#.....................#..........#..#.......#.......................................
|
|
||||||
......#...###...........#.................................................................#.......................................
|
|
||||||
......................#.#..#................#..........#................#...........#............#..............#...#.........#...
|
|
||||||
....#.........................#..#...............................................#....#.............#.............................
|
|
||||||
..#............#...#............#..........#...............#.....#....##.........................#........#.......................
|
|
||||||
..................#............#..............#..........................................................#..#..#........#.........
|
|
||||||
.......#...#............#..........................................................#..............................#.............#.
|
|
||||||
..#................#....................#.#...#.................................#.........#....................#.........#........
|
|
||||||
...................................#..#..........................#........#.....#.........................................#.......
|
|
||||||
...........##.................##............#................#...#..................................##...#........................
|
|
||||||
..............#..................#....................................................................#...........................
|
|
||||||
.#...#....#..........##..................................#.............................................................#......#...
|
|
||||||
......#.....#................................#...............................................................#......#.............
|
|
||||||
..........#.............................................#............................##....#.........................#............
|
|
||||||
..........#......#.................#...#........#...........#.#..........#........#....................................#..........
|
|
||||||
.#..................#.#............................#.......................#.........#.......#....................................
|
|
||||||
.....................#....#..................#..................................................##..#................#............
|
|
||||||
......#......................#..#..............##.......#..................................................#..............#.......
|
|
||||||
..........................................................................#........#...#..............#.................#.........
|
|
||||||
....................##....#.......................#........#...................#.............##.......#...........................
|
|
||||||
.........#............#..................................................................................#........................
|
|
||||||
........................................................................#................#........................#.............#.
|
|
||||||
............#.......#.................................#............#..............................................................
|
|
||||||
.#.............#...............................................#....#.........#....#..................................#.#.........
|
|
||||||
.......................................#.....................................................................................#....
|
|
||||||
........#........................................#...............#........................................................#.......
|
|
||||||
...............................#.........#........#...........#.......................................................#.........#.
|
|
||||||
.....................##...#....................................................#............#..................#..#..........##...
|
|
||||||
................#..........#...#............................................................#...##................................
|
|
||||||
...................#........#...............................#.................#.........#.........................................
|
|
||||||
.................................................................................................................#................
|
|
||||||
............................#......................................................#.....................................#......#.
|
|
||||||
......#................#............................#.............................................................................
|
|
||||||
..#...........#.....#.........#....#................#............................................#................................
|
|
||||||
..................................#.......#.......#...........#.........#................#.....................................#.#
|
|
||||||
...............................................#............................................#.#.....................#.......##....
|
|
||||||
..............................#...............#..............................#...#...#.............................#...........#..
|
|
||||||
.......#...........#..........................................................#........#..#.........#.....#.....#...#.............
|
|
||||||
......................................................#.#............#.........#.#...........#........##.....#....................
|
|
||||||
...........................................................................#..........#.........................#.........#.......
|
|
||||||
....#.........................#.....................................................................................#...#......#..
|
|
||||||
...#.......#............................................................#...............................#....................##.#.
|
|
||||||
.................................#.....#................................................................#.........................
|
|
||||||
.....................................#........................#....................................#..............................
|
|
||||||
..............#.......................................................................#.......#....................#..........#...
|
|
||||||
................................#..........................................#.................................#.....#..............
|
|
||||||
...........#.......................................................#...............#.....................#..............#......#..
|
|
||||||
..................................#..........................#.................................................................#..
|
|
||||||
.............##......#....................................................#......#...............................................#
|
|
||||||
#.......#...................#..........#...................#.................#..................................................#.
|
|
||||||
.......#..........#.....##...........#.......................#............#..............................#.............#..........
|
|
||||||
.............#...................##......................................................................................#........
|
|
||||||
#.............................#...................................................................#...............................
|
|
||||||
.#...................................#....##..................................................................................#...
|
|
||||||
.................................#.#..................#..#..#..........................#.......#..................................
|
|
||||||
..................#....#....#....................................................#....................................#........#..
|
|
||||||
..........................................#...#.....#...........#.........#............#............#..........................#..
|
|
||||||
...............................................................................#..............................................#...
|
|
||||||
.............................#......#....................#....#....................................................#.#.#..........
|
|
||||||
................##......#........#........#...........#..........................#......................#..............#..........
|
|
||||||
.....................#.....#..#.............................................................................................#.....
|
|
||||||
.......#..#...........#................................................................#..........................................
|
|
||||||
#.......................................................................................................#...#.....................
|
|
||||||
.#..........................................................#.....................................................#...............
|
|
||||||
#.....#...#...............#..#......#........#..#...................#...................#.................#.......................
|
|
||||||
..#.................................................................................#.#......................#....................
|
|
||||||
.......................#.............#..........#.......................#...................................#.....................
|
|
||||||
.................#......#......#...#.#.#.............................#.......................................................#....
|
|
||||||
..#...........................................................................................................#...................
|
|
||||||
.................................#..................#.....#........#.........................................................#....
|
|
||||||
.............#......................#...............................................#...#.............................#...#....#..
|
|
||||||
.#............................#..........................#.#...........................#..........................#.#.............
|
|
||||||
.............................#.........#.................##............................#...................#......................
|
|
||||||
.........#......#....#.........#..............................................................................................#..#
|
|
||||||
.....................#......#.................#..#..........................#..................#..............................#.#.
|
|
||||||
........................................................#......................#............#.......#......#......................
|
|
||||||
........................................#....##.#........#......#..............................#..........#..........#.##.........
|
|
||||||
.............#.......#.......#......................#..........................................#.........#............#...#...#.#.
|
|
||||||
..................#........................................................#...............................#.....#.....#..........
|
|
||||||
.........#.................#........#..............^..............#.................##......#...................................#.
|
|
||||||
....#...................#.#.................................#...#.................................................#...............
|
|
||||||
.................#.............................................#................#.....#......#.......#...................#........
|
|
||||||
...............#...............................................................................#..#...............#...............
|
|
||||||
........................................##..........................................................................##............
|
|
||||||
............................................#...................#........#...#...#....#.........#...................#.............
|
|
||||||
.....#...#...................#....................................#......#...........#...............#............................
|
|
||||||
........................#..................#.....................#.................................................#......##......
|
|
||||||
...#.................#....................#..................................#.#.........................#.......#................
|
|
||||||
....................#............#..................................#...#......#....................#...............#.............
|
|
||||||
.....#...............#.......###........#............#......................#.......#....#........................................
|
|
||||||
....................#........#...........#..................................#..#................#.............#...................
|
|
||||||
.....#..................#...................#.#..................................#.......#..#.....................................
|
|
||||||
..#..#.......#........................................#.................................................................#.........
|
|
||||||
.......#............#...#....#.......................#.#...................................#.........................#..#.#.......
|
|
||||||
..............#......................................................................................................#............
|
|
||||||
............#....................#........................#.........#...#.........................................................
|
|
||||||
...................................#..............................#.........................................................#.....
|
|
||||||
......##...........#.#........................#.........................................................................#.........
|
|
||||||
..........................#.....................................................#..............................#..............#...
|
|
||||||
.........................#...#.....................#..#................#................................................#....#....
|
|
||||||
...#.................................#...#.......#...............................................................#................
|
|
||||||
..................................#....................................#...........................##..#.#.....................#..
|
|
||||||
.#.............#.....#...............................................................#...............#...............#..#.........
|
|
||||||
.........#.............................#........................#.............#......................#........#............#......
|
|
||||||
...................................#..#...#.....................................#.................................................
|
|
||||||
........................................##..........#..............................................#.....................#........
|
|
||||||
......#...........................................#....#.....................#...................#..#.........#...................
|
|
||||||
.#....#.....#........##..................................#......#................................................#....#..##.......
|
|
||||||
..........#....................................................................##.........................#...........#...........
|
|
||||||
...........#.#......#.......#..................#............#...............................................#...#..............#..
|
|
||||||
.................................................................#.......#.........#.....#........#....##....#..........#.........
|
|
||||||
.............................#......................................................#.....#...#...#....#...........#..........#.#.
|
|
||||||
.....................#........#.........................#......................................#................#...............#.
|
|
||||||
.........................................................................#...................................................#....
|
|
||||||
..............#...#..#................#....................................#.......#....#.#...............#.........#.............
|
|
||||||
.......#......#.#............................................#.......#............................................................
|
|
||||||
##......................................................#..#.................................##...................#..#...........#
|
|
||||||
...........#.#...#........#............#..............................#........................#.........................#..#.....
|
|
||||||
................................................##.........................................#.................#....................
|
|
||||||
............................#....................................................#...#........................#.#......#........#.
|
|
@@ -1,10 +0,0 @@
|
|||||||
....#.....
|
|
||||||
.........#
|
|
||||||
..........
|
|
||||||
..#.......
|
|
||||||
.......#..
|
|
||||||
..........
|
|
||||||
.#..^.....
|
|
||||||
........#.
|
|
||||||
#.........
|
|
||||||
......#...
|
|
277
2024/6/main.cpp
277
2024/6/main.cpp
@@ -1,277 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
a.out: main.cpp
|
|
||||||
clang++ -std=c++2b -g -O0 main.cpp
|
|
@@ -1,9 +0,0 @@
|
|||||||
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
|
|
@@ -1,49 +0,0 @@
|
|||||||
#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