Initial commit
This commit is contained in:
commit
cd6cc0be1e
14
1.jl
Normal file
14
1.jl
Normal file
@ -0,0 +1,14 @@
|
||||
include("utils.jl")
|
||||
|
||||
input_lines = non_empty_lines("1.data")
|
||||
integers = map(s->parse(Int, s), input_lines)
|
||||
|
||||
"1"
|
||||
zipped = zip(view(integers, 1:length(integers)-1), view(integers, 2:length(integers)))
|
||||
result1 = mapreduce(t->t[1] < t[2], +, zipped)
|
||||
|
||||
"2"
|
||||
zipped2 = zip(view(integers, 1:length(integers)-2), view(integers, 2:length(integers)-1), view(integers, 3:length(integers)))
|
||||
summed = map(t->t[1]+t[2]+t[3], zipped2)
|
||||
zipped_again = zip(view(summed, 1:length(summed)-1), view(summed, 2:length(summed)))
|
||||
result2 = mapreduce(t->t[1] < t[2], +, zipped_again)
|
94
10.data
Normal file
94
10.data
Normal file
@ -0,0 +1,94 @@
|
||||
({<{({([<<{<[<<><>><<>>](<()()>)><{{{}<>}}<<<>{}>[<>[]]>>}{[<<[]{}>[<>()]>[(()[])]]<{{<><>}[[]<>]}{<
|
||||
[(<[[([[(([<{{[]{}}([][])}<<{}[]>([]{})>><{<()()><[][]>}{[()]<()[]>}>]<{({()()}){[{}[]][<>()]}}[{[{}<>]
|
||||
{{(<[[(<<<(<<[{}{}]{<>()}><{[]{}}([]{})>>([([][]){{}<>}][<()<>>[(){}]]))<{<(<>())[{}<>]>{{[]{}}<<>{}>}}({<
|
||||
<([({[<[(([[<(()<>){[]<>}><<(){}>{()()}>]](<(({}[]){[][]})<{<>())[<>[]]>>{{{()<>}{(){}}}{[<>()]<{}[]>}
|
||||
<(((<{<(<{{[[[()<>]{[]()}]][{<()[]><<>{}>}]}}[<{[{[][]}[<><>]]}{{{(){}}[<>()]}{[[]()]{<>[]}}}>{[({{}
|
||||
{{({[({(({{[<[{}()]([]<>)><<{}()>[<>[]]>]<<{[]{}}([]<>)>{{<>}{<>{}}}}}{{<<[]<>>{<>()}>}<({[]<>}
|
||||
(([{[(<(<[[(([()[]][{}()])(([][])<{}<>>))]]>)[<(<{{<<><>>(<>[])}<([]<>)[[]{}]>}((<{}[]>[<><>]){{[
|
||||
{{[<<{<<(<([<<[]()>[[][]]>{[()[]]<()[]>}]){(<(<>{})([])>{<(){}>{<>()]}){[<[]()><<>()>](([][
|
||||
((<{[{{(<<[(<{<>{}}[<>[]]>{<{}<>>{{}[]}})]>><{([<(<>())[{}()]>{<<>{}>{[]{}}}><([[]()]<[]<>>)(<[]>{()()})>)}>)
|
||||
{<({{{(<[([<{(<>[])<()[]>}([[]]([]{}))>])[{{[([]){[]{}}]}}{[[{(){}}{<>{}}][[(){}]]]<([<>{}]{{}<>})(
|
||||
([([{{{[[<<[[(()[])<<><>>]{({}[])}]((([]{})<<>>)({[]<>}[<>[]]))>{(({<>()})([{}[]]<()<>>)){[
|
||||
{[<(({[<<{{{[({}[]){<>()}]{[()()]{[]()}}}[{<<><>>{<>[]}}<{()()}<()>>]}({<(<><>)[()[]]>([{}()])}{[(<>())(()
|
||||
<{{[[<{{(<<{<[{}{}]<{}[]>>[{{}[]}[{}()]]}((<()()>{(){}})<((){})>)>[{<({})[[]{}]>([{}<>])}{{[{}()]}{<[
|
||||
[{[<{<[[({([(<{}<>>[<>()])]<<<{}{}>({}<>)>>)<{(({}[])({}<>))}<{<[]>({}<>)}{{()()}([]())}>>}){<[<[[{}<>]<
|
||||
{(<{{<{<<(<<<[{}{}]((){})>>{<<{}{}>{()[]}>}>)([({(<>())<<>()>>)(<<()[]>(<>())><<()()>({}())>)]{(<[<><
|
||||
[{<{[<{([{[({<(){}>([]())}[<<>[]>([]())]){{<(){}>{{}[]}}<[()[]]({})]}](((<{}()>{{}()})))}[[(
|
||||
<<[{{[<<(<{({{[]{}}{()()}}){<<{}()>({}<>)>(({}<>)[()<>])}}<[[([]{})[<><>]]]((<()()>{<>[]}){{[]{
|
||||
[[({[({[([({{<[]{}>{(){}}}{[[][]][()()]}}[{<{}><{}()>}({()[]})]){{[[()<>]<[][]>][({}<>)]}}](<({<{}(
|
||||
[[[((([((<{{[(<>())[{}[]]]{{<>{}}}}}>))<[[[({{{}{}}(()())})({([]{})[<><>]}[([]{}){()[]}])]<{<[{
|
||||
[{[<[{{([[{(({()()}<{}[]>){{()<>}{{}()}})<<<{}[]>>{<<>[]><{}{}>}>}]{{{[{()()}[<>()}]{{{}}[(){}]}}}
|
||||
[[{[(({[[[[{(<<>()>(<>()))[<{}[]>{[]<>}]}{{{()<>}<()()>}}]<[<([]<>}{<>[]}>]>](((<{()()}<()()>><<<>[]><<>
|
||||
({[{({(<{((<<[()[]]<()<>>]<([][])>>[([{}()]<{}{}>){<{}{}>(()[])}])[{([<>()]{()[]}){[()[]]}}([{()<>}
|
||||
[(({(([[{(<{{<[][]>(()()}}[({}[])]}[(<<>[]><()[]>)]>)<{({{[]{}}[()[]]}[<<>()>(()())])}{(((()[])<[]>)
|
||||
<(<([[({[((((<{}[]>[{}{}]){[{}<>](<><>)})(([()<>]({})){[{}{}]{[]<>}}))[({(()[])<<>[]>}[[()<>]<()
|
||||
{[(<<({([{[(<<[][]>(<>())>){<[<>()][[]{}]>(({}[])[(){}])}][(({{}<>}))(<[()()]<()()>>}]}{[{<(<>
|
||||
[{{({<({<(<[[<{}<>>{()[]}][{()()}]]>){[<{{()[]}[{}()]}>([<()[]><{}<>>](<()[]>))]{[<[<><>]{<>[]}>[<()
|
||||
{[<<[{<<[[(<(<[][]>[()()])>){<(([]()){{}[]})><<[{}()]<<>>>>}}[[([<{}[]><(){}>][({}())[()<>]])[[{<>[]
|
||||
{((<[{{<{[<[((()<>)<()()>)]>]}>}((([{[[<<>[]>[[][]]]<[[]()]({}[])]]{[([]{}){()()}]}}<((<[]<
|
||||
{[[({<{<<{<{{{[]{}}}}>}[[{(([][]){<>[]}){{()<>}}}<<<()[]>[{}[]]>>]<[{[()[]]({}{})}{[{}()]}]>]>>}>}<
|
||||
[{[(<({{(<(([{()<>}{()<>}]{{[]}(()())]))>(<<{[<><>]<()<>>}[(<>{})<<>{}>]>[{{<>{}}{{}[]}}<[<
|
||||
{{((<[(([<{{([()][(){}])({<>()}[()<>])}[{[{}<>]<()()>}<{{}}([]<>)>>}(<<[[]{}]<[]<>>>[([]()){[]{}}]>((<<>(
|
||||
(<<<(<([<<({<<<><>>[{}<>]>{<()>([]<>)}}{{(<><>)}<{<>()}{{}()}>})<<<({}{})<[]<>>>>>]{({({[][]}[{}()])([<>()](
|
||||
([(<<<(<(([([{<>{}}<(){}>](<{}<>>[{}{}]})][([<()>{{}[]}](<<>()><()[]>))[[{<>()}[<>[]]]{<<>[]>
|
||||
(<{[[<<<({[<<([]())[()()]>([()[]]{<>{}})>]})[[{<[{<>()}({}{})><(()<>)([]{})>><<<<>()><<>()
|
||||
[[[{(<[[((<[{<<>[]>({}[])}<[{}{}]{[]<>}>]<{({}{})}{[{}<>]{<><>}}>>([{[[]<>](()<>)}{{<>{}}(<>[]))]{[{{}{}}]})
|
||||
[(<([[[{<[[<((()()){[][]})>((<{}[]>[()<>])<([]()){<>[]}>)]<<{<<><>>}{{(){}}}>>]<{[<<(){}>({}<>)><<<>()>([]<>
|
||||
[<((<<[<{[{[{[()[]]{()<>}}(<<>()>[<>()])]}{<[[(){}]{(){}}]{[()]{<>[]}}>{{<[][]>[()()]}[(<>{
|
||||
[({{([([{[[([<<>{}>[[]()]]({{}()}))][<{{()[]}}<<{}{}>>><[[{}[]][<>()]][{{}[]}(<>{}))>]][{((((){
|
||||
((<<{(([[[{{<[()[]]({}())>}<[{(){}}]<({}{})<()[]>>>}{((<()<>>([]<>)){[()][()[]]})([{()}<[]{}>]<(<><>
|
||||
<<<<[([<<(({<[[]()]<<><>>>({[][]})}{([<>{}]<<>()>){{[]{}}}})){[[[[[]{}][(){})]{(()[])(()<>)}]{{[[]<>][{}(
|
||||
[({{([<{({{[{(()[])<<><>>}(((){})[<>()])>}{{{{{}<>}<{}[]>}{[(){}](()[])}}}}([(([<>{}](<>[]))
|
||||
([(<({{(<<[([[<>][<>()]])<[{()[]}([]{})]{[()<>][[]{}]}>]><<{[{<><>}<()()>]{{<>[]}>}>>><[<{{
|
||||
({{(([({{<[<[{{}{}}{{}<>}]((<>{})[[]<>])>(((<><>)<{}()>){{{}{}}{{}{}}})]({<{{}}([][])><<[]{}>
|
||||
[(<{({{(<<<(<[{}[]]{(){}}>(([]()){<>[])))[{{[]{}}{()()}}{[<>{}][<>]}]>[((<{}<>>[<>[]])[({}[])<[]{}>])[<[{
|
||||
[(<<<[<<({{{[[(){}]]{<<>{}>{()[]}}}{({<>{}}{[][]})}}{<([()[]]<{}<>>)([{}()]({}[]))>[(<<>()>{[]()})]}}{([{{(
|
||||
{[{{(({[{<{{[[()<>]<[]<>>]({{}{}}[{}{}])}{(<<>[]>{[]})[[[]{}]{()<>}>}}{<<{{}{}}(()[])>>{{[[]()]
|
||||
[<[[{(([<<[<[([][])<[]{}}]{<(){}>}>(<<()<>><[][]>><<{}[]>[{}()]>)]><([([[]<>](()[]))[(()<>)<(){}>]][({
|
||||
<{{<([<([{{{(<[]{}>[[]{}])[{<>{}}([])]}}[<[<<><>>({}<>)]{((){})[[]<>]}><[{()[]}<<>{}>]{{()()
|
||||
{[<<<([{([{<<(()[]){{}{}}>[(<>{}){{}()}]><[[{}<>][[]()]](<{}()>([]()))>}]){{<{<[()<>][<>()]><
|
||||
<{[<<[([[{[({[[]<>](<>[])})({([]<>)<[]()>}<([]<>)[<>[]]>)]}[[{[{()<>}{<>{}}][<[]{}>(<>[])]}<({[]<>
|
||||
[[[[([({(((<<[()<>]>[(()())]>{[{{}()}[[]()]]{[<>()]([][])}})))}(<({(({()[]}[<>()]))<[[()<>]]<{{}()}[()<>]
|
||||
{[([([<[(<<[<[[]()]<[]<>>>][{<[][]>[<>()]}{({}<>)<()[]>}]><{({<>()}{<><>})<{(){}}({}{})>}<{(
|
||||
<<({[<<{(<[<({{}[]}{<>[]})[<()()>]>(([<>()][<><>])(<<>{}><()[]>))](<[<{}<>>[{}[]]]({{}{}}(
|
||||
[<<{<(([<[{(([()<>]({}{})){<<>[]>[()()]})({([])(<>())}[{[][]}[{}[]]])}{({(()())[()[]]}({[]<>}([][])))
|
||||
((({<[{([(<[(<[]()>)](<[{}()]<[]{}>>(({}())<()[]>))>)[(<[([]<>)(<>{})]>)]][({({[()[]]{<>}}[[[]{}]{()[]}])([<<
|
||||
[[[(({[<[((({([]){<>{}}})[[{()[]}[{}[]]][{[]<>}]])<<(<[]{}>[<>[]])[<[][]>[{}[]]]>>)[([{{<><>}[[][]]
|
||||
({<(({{[{{<[((<>())(<>[]))<<<><>>((){})>]([<[][]><{}{}>][[{}()]<<>()>])>((<[[]()]([][])>[<{}[]>{
|
||||
(({<<([[<[[{<[()()]<[][]}>[{(){}}[{}<>]]}(<{{}<>}{[]<>}>{<(){}>{<><>}})]<<{<<>[]>[<>[]]}{{
|
||||
<[{([<[({<((<[{}()]([]<>))[(()[])])((({}{})<()<>>){(()<>)}))>{[<<[<>{}][(){}]>{<<><>>(<>[])}>{[
|
||||
{[([[[{{<<[<<<()()>(()<>)>[({}{})[<>{}]]>([[[]<>]]{<<>>[[][]]})]><<[{(()[])][<()>[{}[]]]]<([{}{}][()<>])(
|
||||
{(({{<<((<{<<<[]{}>{{}()}><<<>()><()[]>>><<[<>[]]](({}[])[[]{}])>}[[({<>()}{()}){[[]{}]({}())}
|
||||
<[[{<[({<([<<<()<>>>>([[[]()]{<><>}](<<>[]>[<>]))])(({({[]{}}){{{}()}{(){}}}}[{(()<>)[[]()]}[{<>()}{[][]}]]))
|
||||
{<[[([{<<<{{[<[]{}>[[]<>]]{({}())<[][]>}}<<<{}{}>>({(){}})>}([{({}())}<([]())[()()]>])>({{[[<>()]{{}{
|
||||
<{(<[{[[{[<<<{(){}}[<>{}]>{{{}[]}<<>()>}>{[{[]()}<<>>]{<[]{}>[()()]}}>][[[{<<>())[[]<>]}<(<>
|
||||
[{{<<{{([(<<{{{}}[()]}<(()())(<>())>>(<{[]()}[[]<>]>)>[((<()()><[]{}>}({[]<>}))(({[][]}{[]<>})<(()[])(()[]
|
||||
([(<<[<{({[[[(()<>)<{}()>]{[{}()]{<>{}}}]{(<(){}>{{}[]}){<<><>><{}[]>}}]}<{[[[()()]{{}{}}]]
|
||||
{<(((<({<((([<(){}>]){{{<><>}{{}()}}})({<[[]{}]>{({}())}}))>})([[<<<{[{}[]]{[]{}}}<{()<>}({}[])>>>{[
|
||||
{([[{[[[<<<({{()<>}}(<[]<>>[<><>]))[[[[]<>][{}()]]]>{<<[<>()][[][]]](<{}{}>{[]{}})>[<(<>{}){<><>}>([{}[]]
|
||||
[[{(<{{{<(<{[[{}()](()[])]}<<{(){}}[()[]]>{[()()]([]())}>>)>[(<<<{[][]}>>[{([][])[(){}]}[(<
|
||||
<{[(<{<{(<<{<{()[]}(()[])>(([]<>)([]()))}>{((({}[]))<{[]()}{{}()>>)<{<(){}>}<{<>()}<()()>>
|
||||
<(<[{{[[{<{[{[<>][<>[]]}]{[(<>[])][<{}{}>{<>}]}}(({[()<>]{[]<>}}<{(){}}[[]{}]>)([[<><>]<()()>]<({}[])([]())
|
||||
{(<{[{[{({{(<<<>{}>><({}())(<>())>)}}{(<<<(){}>{(){}}>(<{}()>(<>()))><[{<>()}{{}()}][{[]<>}(()())]>){<[{{}[]
|
||||
{[((((({<(([(<[]<>><[]<>>)<<{}()>>](<{()[]}(()<>)>{{{}{}}([]{})})))[<[{([])[<>]}(([]())<{}{}>]]{
|
||||
(<{[((([{(<<{(()<>){{}[]}}>><<<({}<>)[[]()]>{(<>[])[()()]}>{{{<><>}([]())}}>)[{(([[]()][<>(
|
||||
<[<<<[(<[[(<<([]{})>([[][]][{}{}])><[<<>[]>[{}[]]]<[<>][()()]>>)][[<<{()[]}(<><>)><<()()>[()<>]>>][{[{[]()
|
||||
<<{([[<[[<[({[<>[]](()<>)}{({}[]){()[]}}){({{}[]}(<>()))}]<[[<[][]>[[]<>]]<[{}<>]<[]{}>>)>>]<
|
||||
[((([[{<<[[<{{{}[]}[()<>]}>(<<{}{}>[(){}]>({<>[]}<{}<>>))][<{[{}<>]{[]}}>({[{}{}}[[][]]})]](({[{[][]}]{[{}
|
||||
[([{<[[{<((<<{[]<>}(()<>)>>{(<<>{}>(()<>))}))[(<[[[][]][<>{}]]{[()[]](()())}><({{}{}}}[({}())]>
|
||||
{{[({<(({{[({{[]()}<()<>>}{([]()){[]{}}}){[<<>>[<><>]][<{}<>><()[]>]}][{<({}{}><[][]>>{{{}()}<(){}>}}]}}))>}<
|
||||
{[{[<{{({[({[[{}()][(){}]]{{[][]}<<>()>}}[[(<>[])<[]{}>]((<>[])[{}()])])]})}}>{({{<([{<([]())[{}{}]>{
|
||||
<{{[{<{<<{{({<{}[]>[(){}]}[[<>()]{(){}}])}}[{{[(()<>)(<><>)]<{()<>}{<>()}>}{({[]()}{{}()})<{{
|
||||
((((([{{<<[<({()<>}<<>{}))<{{}<>}(<>[])>>{<{(){}}[{}[]]>}]{<<[{}{}]>{{()()}[{}<>]}>}>>([[({(()())<()
|
||||
(({{[[<[[<<<<<[]()>[{}<>]]>>({[<<><>><{}()>]{{(){}}[<>{}]}}[[([]<>)({}<>)]])>{<[[<{}[]><{}<>>][<<>[]>]](<<[]
|
||||
<[<([<<[([[[[<{}[]><()>][(<>{}){[]}]]{({()[]}[<>{}])}]([((<>[])(<>[]))[{<>[]}{[]<>}]][(([]{})({}<>
|
||||
<((<{{({{([<([<>{}](()()))<<(){}>[<>[]>>>({<<>>([]{})})]<[[([]())<<>>]{{<>{}}(()<>)}]>)<[(((<>)<{}<>>)({<>(
|
||||
{({<({<<[[{[((<>())<()<>>)<(<>[])((){})>]({{[]()}[{}()]}[[{}{}]<{}[])])}({<[(){}](<><>)><{()<>}[{}[]
|
||||
<[(<<[((([(([[[]<>][<><>]]{{{}{}}[{}[]]}){(({}())<[]{}>)})<(<(()[]){()()}>{<()>[[]{}]}){{[[]{}]([]<
|
||||
{(<(([{[[<[[[{<>{}}{[]{}}]({(){}})]<[[()()]][[{}[]]]>]{<<{{}{}}[{}{}]>>[(<{}()>([]{}))(<(){}>{<><>}
|
||||
((<<({({<{<<[<[]{}><()[]>]<(<>()){()[]}>>>}{(((({}<>)({}()))<{[]{}}<<>[]>>)<({[][]}<(){}>){
|
||||
[[<{((({{{(<{[[]{}}{{}}}<{[]{}}<()>>>{<{{}[]}<[]()>>{[()[]]{[][]}}})([{[[][]]}(([]{})<<><>>)][(<[][]>{{}
|
||||
(<({[{[(<<(((([]())[<><>]}([<><>]))<[[()<>]<<><>>]{<[]()>{()<>}}>)[<<{[]()}(())>><[<(){}><<>{}
|
||||
(<<[<(<{<({<[{(){}}{<><>}][<<>()>]>}<[<[()[]]<{}[]>>]<<({}[]]><[[][]]<[]()>>>>)>}><[((<[<<[]<>>>[[<>()][{}(
|
||||
[((<[{[[([{[[<<>>{<>()}]<[[]{}]<[]<>>>]}<({(()<>))<<<>()><<>[]>>)<{<[]{}>((){})}[({}[]){()()}]>
|
||||
<<{{({{([{{<<{{}{}}(<>{})><{()()}[{}<>]>><{<[]<>>[[]()]}[<<><>>({})]>}(((<<>{}><{}{}>)([<>{}][{}]))[{
|
62
10.jl
Normal file
62
10.jl
Normal file
@ -0,0 +1,62 @@
|
||||
using Pkg
|
||||
Pkg.add("Match")
|
||||
using Match
|
||||
|
||||
include("utils.jl")
|
||||
|
||||
function corrupt(line)
|
||||
first, rest... = line
|
||||
check = [first]
|
||||
for char in rest
|
||||
if char in "<{[("
|
||||
push!(check, char)
|
||||
else
|
||||
match, score = @match char begin
|
||||
'>' => ('<', 25137)
|
||||
'}' => ('{', 1197)
|
||||
']' => ('[', 57)
|
||||
')' => ('(', 3)
|
||||
end
|
||||
if last(check) == match
|
||||
pop!(check)
|
||||
else
|
||||
return score
|
||||
end
|
||||
end
|
||||
end
|
||||
0
|
||||
end
|
||||
|
||||
function solution10_1()
|
||||
sum(map(corrupt, non_empty_lines("10.data")))
|
||||
end
|
||||
|
||||
function fix(line)
|
||||
first, rest... = line
|
||||
check = [first]
|
||||
for char in rest
|
||||
if char in "<{[("
|
||||
push!(check, char)
|
||||
else
|
||||
pop!(check)
|
||||
end
|
||||
end
|
||||
value = 0
|
||||
for char in reverse(check)
|
||||
value *= 5
|
||||
value += @match char begin
|
||||
'<' => 4
|
||||
'{' => 3
|
||||
'[' => 2
|
||||
'(' => 1
|
||||
end
|
||||
end
|
||||
value
|
||||
end
|
||||
|
||||
function solution10_2()
|
||||
values = sort(map(fix, filter(line->corrupt(line)==0, collect(non_empty_lines("10.data")))))
|
||||
values[div(length(values), 2)+1]
|
||||
end
|
||||
|
||||
solution10_2()
|
10
10_ex.data
Normal file
10
10_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
[({(<(())[]>[[{[]{<()<>>
|
||||
[(()[<>])]({[<{<<[]>>(
|
||||
{([(<{}[<>[]}>{[]{[(<()>
|
||||
(((({<>}<{<{<>}{[]{[]{}
|
||||
[[<[([]))<([[{}[[()]]]
|
||||
[{[{({}]{}}([{[{{{}}([]
|
||||
{<[[]]>}<{[{[{[]{()[[[]
|
||||
[<(<(<(<{}))><([]([]()
|
||||
<{([([[(<>()){}]>(<<{{
|
||||
<{([{{}}[<[[[<>{}]]]>[]]
|
10
11.data
Normal file
10
11.data
Normal file
@ -0,0 +1,10 @@
|
||||
7777838353
|
||||
2217272478
|
||||
3355318645
|
||||
2242618113
|
||||
7182468666
|
||||
5441641111
|
||||
4773862364
|
||||
5717125521
|
||||
7542127721
|
||||
4576678341
|
43
11.jl
Normal file
43
11.jl
Normal file
@ -0,0 +1,43 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
map(x->parse.(Int, x), split.(non_empty_lines(filename), ""))
|
||||
end
|
||||
|
||||
function flash(octopuses)
|
||||
sum(map(CartesianIndices((2:11, 2:11))) do coord
|
||||
if octopuses[coord] > 9
|
||||
octopuses[coord] = -8
|
||||
for neighbor in CartesianIndices((coord[1]-1:coord[1]+1, coord[2]-1:coord[2]+1))
|
||||
octopuses[neighbor] += 1
|
||||
end
|
||||
1
|
||||
else
|
||||
0
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function solution11_1()
|
||||
octopuses = transpose(reshape(reduce(vcat, [[fill(-2000000, 12)]; map(x -> [-2000000; x; -2000000], parse_input("11.data")); [fill(-2000000, 12)]]),(12,12)))
|
||||
sum(map(1:100) do _
|
||||
map!(x->x+1, octopuses, octopuses)
|
||||
flashes = sum(collect(Iterators.takewhile(>(0), (flash(octopuses) for _ in 1:100))))
|
||||
clamp!(octopuses, 0, 9)
|
||||
flashes
|
||||
end)
|
||||
end
|
||||
|
||||
function solution11_2()
|
||||
octopuses = transpose(reshape(reduce(vcat, [[fill(-2000000, 12)]; map(x -> [-2000000; x; -2000000], parse_input("11_ex.data")); [fill(-2000000, 12)]]),(12,12)))
|
||||
for i in 1:1000
|
||||
map!(x->x+1, octopuses, octopuses)
|
||||
flashes = sum(collect(Iterators.takewhile(>(0), (flash(octopuses) for _ in 1:100))))
|
||||
if flashes == 100
|
||||
return i
|
||||
end
|
||||
clamp!(octopuses, 0, 9)
|
||||
end
|
||||
end
|
||||
|
||||
solution11_2()
|
10
11_ex.data
Normal file
10
11_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
24
12.data
Normal file
24
12.data
Normal file
@ -0,0 +1,24 @@
|
||||
by-TW
|
||||
start-TW
|
||||
fw-end
|
||||
QZ-end
|
||||
JH-by
|
||||
ka-start
|
||||
ka-by
|
||||
end-JH
|
||||
QZ-cv
|
||||
vg-TI
|
||||
by-fw
|
||||
QZ-by
|
||||
JH-ka
|
||||
JH-vg
|
||||
vg-fw
|
||||
TW-cv
|
||||
QZ-vg
|
||||
ka-TW
|
||||
ka-QZ
|
||||
JH-fw
|
||||
vg-hu
|
||||
cv-start
|
||||
by-cv
|
||||
ka-cv
|
74
12.jl
Normal file
74
12.jl
Normal file
@ -0,0 +1,74 @@
|
||||
include("utils.jl")
|
||||
|
||||
function solution12_1()
|
||||
lines = non_empty_lines("12.data")
|
||||
adj_mat = Dict()
|
||||
for line in lines
|
||||
front, back = split(line, "-")
|
||||
push!(get!(adj_mat, front, []), back)
|
||||
push!(get!(adj_mat, back, []), front)
|
||||
end
|
||||
result = []
|
||||
growing = [["start"]]
|
||||
while length(growing) > 0
|
||||
new = []
|
||||
for path in growing
|
||||
for neighbour in get(adj_mat, last(path), 0)
|
||||
if Base.Unicode.isuppercase(neighbour[1])
|
||||
push!(new, [path; neighbour])
|
||||
else
|
||||
if neighbour == "end"
|
||||
push!(result, [path; neighbour])
|
||||
else
|
||||
if !(neighbour in path)
|
||||
push!(new, [path; neighbour])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
growing = new
|
||||
end
|
||||
length(result)
|
||||
end
|
||||
|
||||
function small_twice(path)
|
||||
length(filter(unique(path)) do element
|
||||
Base.Unicode.islowercase(element[1]) && length(filter(==(element), path)) > 1
|
||||
end) > 0
|
||||
end
|
||||
|
||||
|
||||
function solution12_2()
|
||||
lines = non_empty_lines("12.data")
|
||||
adj_mat = Dict()
|
||||
for line in lines
|
||||
front, back = split(line, "-")
|
||||
push!(get!(adj_mat, front, []), back)
|
||||
push!(get!(adj_mat, back, []), front)
|
||||
end
|
||||
result = []
|
||||
growing = [["start"]]
|
||||
while length(growing) > 0
|
||||
new = []
|
||||
for path in growing
|
||||
for neighbour in get(adj_mat, last(path), 0)
|
||||
if Base.Unicode.isuppercase(neighbour[1])
|
||||
push!(new, [path; neighbour])
|
||||
else
|
||||
if neighbour == "end"
|
||||
push!(result, [path; neighbour])
|
||||
else
|
||||
if neighbour != "start" && (!small_twice(path) || !(neighbour in path))
|
||||
push!(new, [path; neighbour])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
growing = new
|
||||
end
|
||||
length(result)
|
||||
end
|
||||
|
||||
solution12_2()
|
7
12_ex.data
Normal file
7
12_ex.data
Normal file
@ -0,0 +1,7 @@
|
||||
start-A
|
||||
start-b
|
||||
A-c
|
||||
A-b
|
||||
b-d
|
||||
A-end
|
||||
b-end
|
10
12_ex_2.data
Normal file
10
12_ex_2.data
Normal file
@ -0,0 +1,10 @@
|
||||
dc-end
|
||||
HN-start
|
||||
start-kj
|
||||
dc-start
|
||||
dc-HN
|
||||
LN-dc
|
||||
HN-end
|
||||
kj-sa
|
||||
kj-HN
|
||||
kj-dc
|
18
12_ex_3.data
Normal file
18
12_ex_3.data
Normal file
@ -0,0 +1,18 @@
|
||||
fs-end
|
||||
he-DX
|
||||
fs-he
|
||||
start-DX
|
||||
pj-DX
|
||||
end-zg
|
||||
zg-sl
|
||||
zg-pj
|
||||
pj-he
|
||||
RW-he
|
||||
fs-DX
|
||||
pj-RW
|
||||
zg-RW
|
||||
start-pj
|
||||
he-WI
|
||||
zg-he
|
||||
pj-fs
|
||||
start-RW
|
972
13.data
Normal file
972
13.data
Normal file
@ -0,0 +1,972 @@
|
||||
587,795
|
||||
930,267
|
||||
306,240
|
||||
1052,763
|
||||
177,826
|
||||
681,841
|
||||
1062,413
|
||||
840,878
|
||||
232,271
|
||||
965,165
|
||||
319,612
|
||||
1027,215
|
||||
524,707
|
||||
939,887
|
||||
1210,740
|
||||
284,126
|
||||
579,38
|
||||
1079,826
|
||||
509,73
|
||||
542,381
|
||||
1163,560
|
||||
1208,775
|
||||
83,306
|
||||
177,266
|
||||
348,297
|
||||
1001,729
|
||||
621,162
|
||||
1081,92
|
||||
557,802
|
||||
1039,87
|
||||
1290,824
|
||||
1096,513
|
||||
1034,711
|
||||
446,105
|
||||
955,523
|
||||
371,7
|
||||
1039,759
|
||||
246,556
|
||||
321,143
|
||||
1277,747
|
||||
768,157
|
||||
644,382
|
||||
895,471
|
||||
1285,252
|
||||
751,87
|
||||
237,30
|
||||
1057,453
|
||||
1119,747
|
||||
1086,551
|
||||
940,514
|
||||
279,345
|
||||
1064,879
|
||||
1061,32
|
||||
833,138
|
||||
637,541
|
||||
900,207
|
||||
145,709
|
||||
50,437
|
||||
870,466
|
||||
604,367
|
||||
164,773
|
||||
688,658
|
||||
698,156
|
||||
477,714
|
||||
759,721
|
||||
1233,354
|
||||
808,382
|
||||
669,121
|
||||
1034,576
|
||||
694,208
|
||||
1210,224
|
||||
67,756
|
||||
1292,770
|
||||
1124,371
|
||||
1185,455
|
||||
1016,549
|
||||
957,226
|
||||
641,87
|
||||
559,795
|
||||
229,840
|
||||
446,287
|
||||
706,576
|
||||
542,466
|
||||
753,502
|
||||
1173,390
|
||||
95,266
|
||||
1081,840
|
||||
271,87
|
||||
858,821
|
||||
1067,418
|
||||
408,879
|
||||
494,684
|
||||
525,291
|
||||
852,411
|
||||
826,313
|
||||
626,502
|
||||
918,808
|
||||
259,714
|
||||
1133,266
|
||||
567,79
|
||||
1272,354
|
||||
74,756
|
||||
125,7
|
||||
1026,380
|
||||
812,509
|
||||
465,390
|
||||
1243,756
|
||||
242,609
|
||||
1251,665
|
||||
264,796
|
||||
945,82
|
||||
25,535
|
||||
378,823
|
||||
1300,512
|
||||
559,68
|
||||
484,313
|
||||
298,52
|
||||
885,129
|
||||
1016,345
|
||||
140,819
|
||||
750,467
|
||||
485,805
|
||||
1171,173
|
||||
90,42
|
||||
191,371
|
||||
38,514
|
||||
637,93
|
||||
858,799
|
||||
997,569
|
||||
1017,162
|
||||
939,455
|
||||
999,876
|
||||
909,444
|
||||
557,392
|
||||
751,387
|
||||
408,422
|
||||
378,631
|
||||
1017,284
|
||||
249,204
|
||||
405,204
|
||||
25,617
|
||||
438,751
|
||||
1087,497
|
||||
343,218
|
||||
903,614
|
||||
1216,686
|
||||
826,562
|
||||
1078,175
|
||||
139,721
|
||||
919,732
|
||||
765,35
|
||||
977,312
|
||||
999,533
|
||||
1036,367
|
||||
284,799
|
||||
990,700
|
||||
698,14
|
||||
1064,472
|
||||
689,823
|
||||
184,645
|
||||
102,551
|
||||
567,815
|
||||
547,359
|
||||
1034,479
|
||||
229,92
|
||||
715,609
|
||||
805,180
|
||||
113,644
|
||||
721,502
|
||||
1063,112
|
||||
460,464
|
||||
1255,477
|
||||
560,203
|
||||
758,327
|
||||
718,651
|
||||
1304,131
|
||||
1036,11
|
||||
698,351
|
||||
435,278
|
||||
571,54
|
||||
662,357
|
||||
885,502
|
||||
253,892
|
||||
909,854
|
||||
1078,7
|
||||
241,606
|
||||
724,539
|
||||
181,185
|
||||
1243,490
|
||||
284,516
|
||||
644,512
|
||||
33,610
|
||||
659,197
|
||||
346,572
|
||||
263,162
|
||||
18,236
|
||||
170,497
|
||||
94,887
|
||||
147,442
|
||||
380,267
|
||||
698,238
|
||||
797,285
|
||||
964,740
|
||||
239,471
|
||||
94,686
|
||||
1066,687
|
||||
547,87
|
||||
898,285
|
||||
1061,862
|
||||
1198,466
|
||||
999,894
|
||||
49,411
|
||||
1062,481
|
||||
840,206
|
||||
1064,422
|
||||
430,551
|
||||
50,661
|
||||
1031,345
|
||||
33,215
|
||||
196,35
|
||||
957,568
|
||||
669,404
|
||||
430,631
|
||||
147,560
|
||||
393,819
|
||||
407,280
|
||||
132,793
|
||||
115,35
|
||||
274,367
|
||||
636,434
|
||||
1052,656
|
||||
90,852
|
||||
845,60
|
||||
83,364
|
||||
1101,218
|
||||
266,439
|
||||
425,129
|
||||
759,173
|
||||
38,380
|
||||
49,467
|
||||
736,422
|
||||
1163,442
|
||||
361,162
|
||||
276,711
|
||||
805,308
|
||||
544,591
|
||||
602,194
|
||||
1083,801
|
||||
1091,278
|
||||
636,770
|
||||
1261,336
|
||||
97,18
|
||||
674,770
|
||||
847,147
|
||||
900,332
|
||||
238,539
|
||||
766,476
|
||||
1046,89
|
||||
908,786
|
||||
557,502
|
||||
864,329
|
||||
1046,691
|
||||
179,697
|
||||
48,383
|
||||
751,196
|
||||
666,834
|
||||
72,490
|
||||
689,299
|
||||
674,231
|
||||
539,859
|
||||
605,558
|
||||
708,866
|
||||
299,299
|
||||
858,73
|
||||
1197,644
|
||||
684,842
|
||||
682,175
|
||||
376,551
|
||||
1258,703
|
||||
214,9
|
||||
733,526
|
||||
1295,309
|
||||
452,768
|
||||
554,446
|
||||
1293,386
|
||||
693,887
|
||||
189,504
|
||||
699,455
|
||||
201,455
|
||||
403,486
|
||||
920,796
|
||||
1091,168
|
||||
626,842
|
||||
684,54
|
||||
328,233
|
||||
663,730
|
||||
237,854
|
||||
231,703
|
||||
1063,784
|
||||
920,0
|
||||
699,614
|
||||
1144,131
|
||||
309,165
|
||||
410,780
|
||||
1039,554
|
||||
266,485
|
||||
365,119
|
||||
769,196
|
||||
1022,1
|
||||
208,789
|
||||
1215,266
|
||||
361,757
|
||||
689,75
|
||||
1305,413
|
||||
226,516
|
||||
1113,743
|
||||
636,796
|
||||
900,543
|
||||
571,588
|
||||
579,856
|
||||
1304,2
|
||||
1161,143
|
||||
319,282
|
||||
902,463
|
||||
1108,73
|
||||
416,84
|
||||
513,285
|
||||
97,17
|
||||
1136,270
|
||||
1220,490
|
||||
417,406
|
||||
1096,428
|
||||
1044,455
|
||||
801,821
|
||||
151,595
|
||||
965,505
|
||||
120,655
|
||||
875,168
|
||||
838,187
|
||||
346,154
|
||||
1250,343
|
||||
1215,826
|
||||
64,86
|
||||
865,116
|
||||
994,158
|
||||
473,165
|
||||
141,285
|
||||
264,89
|
||||
1104,544
|
||||
1272,211
|
||||
567,472
|
||||
592,719
|
||||
1061,480
|
||||
1109,439
|
||||
888,243
|
||||
739,54
|
||||
1129,185
|
||||
694,540
|
||||
626,54
|
||||
693,439
|
||||
470,206
|
||||
258,432
|
||||
391,732
|
||||
166,539
|
||||
498,133
|
||||
82,463
|
||||
1258,143
|
||||
715,161
|
||||
1277,732
|
||||
743,815
|
||||
72,861
|
||||
2,131
|
||||
1227,306
|
||||
1034,599
|
||||
671,876
|
||||
87,24
|
||||
991,707
|
||||
166,131
|
||||
522,206
|
||||
264,546
|
||||
1001,521
|
||||
917,523
|
||||
517,837
|
||||
800,635
|
||||
704,717
|
||||
219,535
|
||||
801,73
|
||||
715,665
|
||||
1235,883
|
||||
343,0
|
||||
479,147
|
||||
52,703
|
||||
567,422
|
||||
231,308
|
||||
415,471
|
||||
1078,427
|
||||
356,842
|
||||
731,11
|
||||
768,381
|
||||
577,368
|
||||
865,218
|
||||
1126,231
|
||||
945,119
|
||||
587,11
|
||||
1227,364
|
||||
74,138
|
||||
586,847
|
||||
334,642
|
||||
1185,439
|
||||
616,290
|
||||
1243,138
|
||||
1208,844
|
||||
880,263
|
||||
1242,439
|
||||
1277,679
|
||||
383,807
|
||||
1213,18
|
||||
905,592
|
||||
1113,757
|
||||
683,187
|
||||
830,494
|
||||
309,93
|
||||
192,26
|
||||
706,16
|
||||
629,535
|
||||
547,807
|
||||
934,343
|
||||
607,673
|
||||
944,235
|
||||
746,490
|
||||
497,766
|
||||
1063,614
|
||||
38,113
|
||||
0,661
|
||||
1064,662
|
||||
288,669
|
||||
574,562
|
||||
1046,805
|
||||
689,519
|
||||
1250,103
|
||||
611,439
|
||||
390,348
|
||||
552,791
|
||||
755,613
|
||||
888,875
|
||||
1268,514
|
||||
1073,30
|
||||
977,560
|
||||
38,561
|
||||
18,7
|
||||
1034,556
|
||||
967,632
|
||||
1237,749
|
||||
309,521
|
||||
962,597
|
||||
920,348
|
||||
85,466
|
||||
865,564
|
||||
1260,457
|
||||
758,50
|
||||
1280,576
|
||||
1046,98
|
||||
1034,295
|
||||
950,549
|
||||
73,2
|
||||
545,859
|
||||
837,389
|
||||
60,791
|
||||
745,226
|
||||
587,180
|
||||
60,343
|
||||
365,775
|
||||
902,472
|
||||
875,127
|
||||
559,87
|
||||
95,807
|
||||
141,509
|
||||
999,890
|
||||
1067,476
|
||||
893,304
|
||||
656,681
|
||||
13,404
|
||||
745,369
|
||||
64,808
|
||||
430,263
|
||||
219,168
|
||||
939,7
|
||||
724,47
|
||||
467,61
|
||||
95,826
|
||||
1071,423
|
||||
914,579
|
||||
756,154
|
||||
621,183
|
||||
266,7
|
||||
507,782
|
||||
733,354
|
||||
276,338
|
||||
48,717
|
||||
487,652
|
||||
319,264
|
||||
1272,540
|
||||
348,533
|
||||
1297,82
|
||||
551,173
|
||||
751,835
|
||||
196,483
|
||||
858,95
|
||||
100,313
|
||||
1119,579
|
||||
423,835
|
||||
818,121
|
||||
320,357
|
||||
580,586
|
||||
1198,94
|
||||
902,422
|
||||
694,333
|
||||
604,599
|
||||
410,207
|
||||
37,364
|
||||
746,404
|
||||
734,817
|
||||
1180,187
|
||||
1225,428
|
||||
982,380
|
||||
299,595
|
||||
1216,467
|
||||
1285,642
|
||||
885,392
|
||||
684,392
|
||||
112,878
|
||||
166,355
|
||||
967,710
|
||||
957,277
|
||||
599,359
|
||||
197,757
|
||||
470,361
|
||||
1066,780
|
||||
718,670
|
||||
1235,491
|
||||
246,662
|
||||
1059,408
|
||||
664,357
|
||||
735,700
|
||||
1034,31
|
||||
940,351
|
||||
716,73
|
||||
621,732
|
||||
858,156
|
||||
1144,539
|
||||
446,271
|
||||
341,878
|
||||
833,502
|
||||
686,634
|
||||
440,542
|
||||
488,579
|
||||
735,252
|
||||
1255,417
|
||||
935,549
|
||||
933,336
|
||||
997,430
|
||||
989,751
|
||||
669,542
|
||||
271,554
|
||||
18,98
|
||||
577,32
|
||||
356,536
|
||||
887,835
|
||||
962,688
|
||||
1036,627
|
||||
38,540
|
||||
1099,859
|
||||
15,466
|
||||
595,665
|
||||
75,446
|
||||
724,91
|
||||
475,25
|
||||
572,431
|
||||
605,467
|
||||
25,252
|
||||
666,60
|
||||
1215,59
|
||||
736,332
|
||||
1046,546
|
||||
174,606
|
||||
1173,504
|
||||
32,259
|
||||
1011,299
|
||||
637,205
|
||||
202,745
|
||||
523,19
|
||||
1200,303
|
||||
284,380
|
||||
33,162
|
||||
693,7
|
||||
706,437
|
||||
1118,500
|
||||
276,631
|
||||
559,387
|
||||
470,645
|
||||
1099,35
|
||||
1293,353
|
||||
1262,791
|
||||
416,450
|
||||
999,18
|
||||
1238,490
|
||||
587,782
|
||||
612,238
|
||||
263,732
|
||||
875,87
|
||||
440,437
|
||||
731,311
|
||||
756,446
|
||||
751,68
|
||||
557,278
|
||||
1136,830
|
||||
1064,214
|
||||
1061,690
|
||||
202,149
|
||||
984,661
|
||||
648,357
|
||||
1001,165
|
||||
125,455
|
||||
1001,93
|
||||
554,313
|
||||
1230,472
|
||||
845,834
|
||||
311,361
|
||||
689,610
|
||||
283,455
|
||||
181,505
|
||||
249,862
|
||||
95,180
|
||||
1215,852
|
||||
1027,7
|
||||
569,18
|
||||
662,131
|
||||
887,628
|
||||
551,721
|
||||
182,488
|
||||
311,302
|
||||
621,375
|
||||
246,463
|
||||
1118,394
|
||||
423,628
|
||||
10,508
|
||||
100,581
|
||||
652,579
|
||||
246,15
|
||||
864,271
|
||||
1084,378
|
||||
112,16
|
||||
689,711
|
||||
751,99
|
||||
189,642
|
||||
1009,326
|
||||
191,579
|
||||
954,392
|
||||
812,761
|
||||
232,7
|
||||
922,485
|
||||
671,38
|
||||
560,691
|
||||
805,514
|
||||
1044,439
|
||||
253,453
|
||||
124,785
|
||||
253,702
|
||||
191,763
|
||||
59,161
|
||||
283,679
|
||||
768,16
|
||||
266,821
|
||||
403,408
|
||||
346,740
|
||||
604,457
|
||||
191,131
|
||||
447,663
|
||||
976,642
|
||||
850,464
|
||||
853,603
|
||||
1073,854
|
||||
80,562
|
||||
244,207
|
||||
326,233
|
||||
621,711
|
||||
530,745
|
||||
758,485
|
||||
763,359
|
||||
239,696
|
||||
785,603
|
||||
223,497
|
||||
177,290
|
||||
930,303
|
||||
440,430
|
||||
294,549
|
||||
1165,877
|
||||
1297,404
|
||||
835,679
|
||||
219,278
|
||||
156,385
|
||||
853,743
|
||||
982,233
|
||||
1102,341
|
||||
43,439
|
||||
694,290
|
||||
1307,473
|
||||
1081,392
|
||||
229,54
|
||||
661,334
|
||||
907,486
|
||||
1186,540
|
||||
661,560
|
||||
939,280
|
||||
252,672
|
||||
214,162
|
||||
708,194
|
||||
1002,175
|
||||
1063,280
|
||||
298,502
|
||||
1071,696
|
||||
1140,397
|
||||
102,396
|
||||
808,158
|
||||
407,782
|
||||
1136,606
|
||||
534,543
|
||||
170,397
|
||||
184,663
|
||||
232,427
|
||||
853,599
|
||||
893,864
|
||||
1051,714
|
||||
90,490
|
||||
999,4
|
||||
25,502
|
||||
490,667
|
||||
577,592
|
||||
67,138
|
||||
1133,826
|
||||
87,359
|
||||
177,806
|
||||
765,859
|
||||
1133,806
|
||||
130,187
|
||||
1140,497
|
||||
1108,745
|
||||
289,231
|
||||
20,16
|
||||
1113,137
|
||||
422,243
|
||||
80,472
|
||||
1176,618
|
||||
864,105
|
||||
945,812
|
||||
490,227
|
||||
1,560
|
||||
736,562
|
||||
266,551
|
||||
422,651
|
||||
38,686
|
||||
888,651
|
||||
107,87
|
||||
510,572
|
||||
1033,483
|
||||
1290,518
|
||||
33,519
|
||||
261,819
|
||||
1279,467
|
||||
452,156
|
||||
1119,131
|
||||
18,434
|
||||
232,175
|
||||
13,352
|
||||
15,224
|
||||
232,691
|
||||
422,208
|
||||
1198,800
|
||||
962,533
|
||||
1292,460
|
||||
1044,821
|
||||
390,796
|
||||
492,219
|
||||
177,88
|
||||
1198,513
|
||||
1057,444
|
||||
77,144
|
||||
739,784
|
||||
1128,406
|
||||
612,156
|
||||
606,717
|
||||
569,876
|
||||
617,7
|
||||
780,574
|
||||
991,264
|
||||
544,303
|
||||
38,290
|
||||
915,547
|
||||
308,175
|
||||
505,751
|
||||
244,780
|
||||
639,38
|
||||
1126,249
|
||||
1046,446
|
||||
991,282
|
||||
651,473
|
||||
110,418
|
||||
182,406
|
||||
1200,418
|
||||
840,430
|
||||
930,527
|
||||
1026,462
|
||||
48,791
|
||||
572,15
|
||||
803,452
|
||||
1295,466
|
||||
182,712
|
||||
87,311
|
||||
1285,617
|
||||
396,763
|
||||
629,54
|
||||
822,579
|
||||
763,127
|
||||
812,133
|
||||
863,663
|
||||
52,303
|
||||
1250,73
|
||||
1073,864
|
||||
716,567
|
||||
838,707
|
||||
214,885
|
||||
797,385
|
||||
403,535
|
||||
370,516
|
||||
1220,42
|
||||
990,418
|
||||
704,177
|
||||
969,325
|
||||
699,7
|
||||
659,869
|
||||
1278,259
|
||||
616,208
|
||||
370,351
|
||||
460,430
|
||||
962,297
|
||||
758,844
|
||||
1293,613
|
||||
77,316
|
||||
636,231
|
||||
554,670
|
||||
1268,156
|
||||
80,332
|
||||
756,448
|
||||
67,404
|
||||
73,749
|
||||
283,215
|
||||
246,879
|
||||
1012,502
|
||||
559,99
|
||||
249,32
|
||||
79,252
|
||||
1033,336
|
||||
1267,166
|
||||
808,64
|
||||
1186,785
|
||||
1228,463
|
||||
219,359
|
||||
288,652
|
||||
626,840
|
||||
883,93
|
||||
365,231
|
||||
837,165
|
||||
706,599
|
||||
1129,505
|
||||
1292,98
|
||||
999,184
|
||||
492,675
|
||||
715,49
|
||||
830,624
|
||||
320,418
|
||||
1131,334
|
||||
820,331
|
||||
179,334
|
||||
932,631
|
||||
147,452
|
||||
1178,793
|
||||
800,707
|
||||
1081,205
|
||||
1178,814
|
||||
571,840
|
||||
87,870
|
||||
276,823
|
||||
1,334
|
||||
232,887
|
||||
604,878
|
||||
253,889
|
||||
1064,108
|
||||
840,533
|
||||
542,878
|
||||
609,218
|
||||
1309,334
|
||||
55,502
|
||||
422,686
|
||||
739,110
|
||||
17,613
|
||||
743,760
|
||||
1215,135
|
||||
371,280
|
||||
858,126
|
||||
786,187
|
||||
43,166
|
||||
887,266
|
||||
1021,775
|
||||
85,428
|
||||
232,686
|
||||
1293,281
|
||||
258,686
|
||||
177,628
|
||||
559,196
|
||||
1119,371
|
||||
485,312
|
||||
845,390
|
||||
715,733
|
||||
572,463
|
||||
95,628
|
||||
197,585
|
||||
494,131
|
||||
309,613
|
||||
405,32
|
||||
13,490
|
||||
214,605
|
||||
1078,271
|
||||
1079,255
|
||||
817,889
|
||||
612,656
|
||||
237,406
|
||||
1186,428
|
||||
80,422
|
||||
651,25
|
||||
465,642
|
||||
940,516
|
||||
793,57
|
||||
1078,238
|
||||
209,330
|
||||
348,688
|
||||
232,875
|
||||
1034,71
|
||||
83,82
|
||||
1203,731
|
||||
151,747
|
||||
48,551
|
||||
17,508
|
||||
15,551
|
||||
1192,287
|
||||
375,345
|
||||
900,351
|
||||
552,485
|
||||
1208,103
|
||||
189,281
|
||||
|
||||
fold along x=655
|
||||
fold along y=447
|
||||
fold along x=327
|
||||
fold along y=223
|
||||
fold along x=163
|
||||
fold along y=111
|
||||
fold along x=81
|
||||
fold along y=55
|
||||
fold along x=40
|
||||
fold along y=27
|
||||
fold along y=13
|
||||
fold along y=6
|
36
13.jl
Normal file
36
13.jl
Normal file
@ -0,0 +1,36 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
lines = collect(non_empty_lines(filename))
|
||||
dots = map(l->parse.(Int, split(l,',')), filter(line->Base.Unicode.isnumeric(line[1]), lines))
|
||||
|
||||
folds = map(filter(line->!Base.Unicode.isnumeric(line[1]), lines)) do line
|
||||
front, coord = split(line, '=')
|
||||
'x' in front ? 1 : 2, parse(Int, coord)
|
||||
end
|
||||
sort(dots), folds
|
||||
end
|
||||
|
||||
function solution13_2()
|
||||
dots, folds = parse_input("13.data")
|
||||
for (axis, coord) in folds
|
||||
foreach(dots) do dot
|
||||
if dot[axis] > coord
|
||||
dot[axis] -= 2 * (dot[axis] - coord)
|
||||
end
|
||||
end
|
||||
dots = sort(unique(dots))
|
||||
end
|
||||
for y in 0:5
|
||||
for x in 0:38
|
||||
if [x, y] in dots
|
||||
print('#')
|
||||
else
|
||||
print(' ')
|
||||
end
|
||||
end
|
||||
println("")
|
||||
end
|
||||
end
|
||||
|
||||
solution13_2()
|
21
13_ex.data
Normal file
21
13_ex.data
Normal file
@ -0,0 +1,21 @@
|
||||
6,10
|
||||
0,14
|
||||
9,10
|
||||
0,3
|
||||
10,4
|
||||
4,11
|
||||
6,0
|
||||
6,12
|
||||
4,1
|
||||
0,13
|
||||
10,12
|
||||
3,4
|
||||
3,0
|
||||
8,4
|
||||
1,10
|
||||
2,14
|
||||
8,10
|
||||
9,0
|
||||
|
||||
fold along y=7
|
||||
fold along x=5
|
102
14.data
Normal file
102
14.data
Normal file
@ -0,0 +1,102 @@
|
||||
SCVHKHVSHPVCNBKBPVHV
|
||||
|
||||
SB -> B
|
||||
HH -> P
|
||||
VF -> N
|
||||
BS -> S
|
||||
NC -> C
|
||||
BF -> H
|
||||
BN -> H
|
||||
SP -> H
|
||||
BK -> H
|
||||
FF -> N
|
||||
VN -> B
|
||||
FN -> C
|
||||
FS -> S
|
||||
PP -> F
|
||||
ON -> H
|
||||
FV -> F
|
||||
KO -> F
|
||||
PK -> H
|
||||
VB -> S
|
||||
HS -> B
|
||||
NV -> O
|
||||
PN -> S
|
||||
VH -> B
|
||||
OS -> P
|
||||
BP -> H
|
||||
OV -> B
|
||||
HK -> S
|
||||
NN -> K
|
||||
SV -> C
|
||||
PB -> F
|
||||
SK -> F
|
||||
FB -> S
|
||||
NB -> K
|
||||
HF -> P
|
||||
FK -> K
|
||||
KV -> P
|
||||
PV -> F
|
||||
BC -> S
|
||||
FO -> N
|
||||
HC -> F
|
||||
CP -> B
|
||||
KK -> F
|
||||
PC -> S
|
||||
HN -> O
|
||||
SH -> H
|
||||
CK -> P
|
||||
CO -> F
|
||||
HP -> K
|
||||
PS -> C
|
||||
KP -> F
|
||||
OF -> K
|
||||
KS -> F
|
||||
NO -> V
|
||||
CB -> K
|
||||
NF -> N
|
||||
SF -> F
|
||||
SC -> P
|
||||
FC -> V
|
||||
BV -> B
|
||||
SS -> O
|
||||
KC -> K
|
||||
FH -> C
|
||||
OP -> C
|
||||
CF -> K
|
||||
VO -> V
|
||||
VK -> H
|
||||
KH -> O
|
||||
NP -> V
|
||||
NH -> O
|
||||
NS -> V
|
||||
BH -> C
|
||||
CH -> S
|
||||
CC -> F
|
||||
CS -> P
|
||||
SN -> F
|
||||
BO -> S
|
||||
NK -> S
|
||||
OO -> P
|
||||
VV -> F
|
||||
FP -> V
|
||||
OK -> C
|
||||
SO -> H
|
||||
KN -> P
|
||||
HO -> O
|
||||
PO -> H
|
||||
VS -> N
|
||||
PF -> N
|
||||
CV -> F
|
||||
BB -> H
|
||||
VC -> H
|
||||
HV -> B
|
||||
CN -> S
|
||||
OH -> K
|
||||
KF -> K
|
||||
HB -> S
|
||||
OC -> H
|
||||
KB -> P
|
||||
OB -> C
|
||||
VP -> C
|
||||
PH -> K
|
59
14.jl
Normal file
59
14.jl
Normal file
@ -0,0 +1,59 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
template, rawrules... = collect(non_empty_lines(filename))
|
||||
rules = Dict()
|
||||
for rule in rawrules
|
||||
front, back = split(rule, " -> ")
|
||||
first, second = split(front, "")
|
||||
rules[[first[1], second[1]]] = back[1]
|
||||
end
|
||||
pairs = Dict()
|
||||
for i in 1:length(template)-1
|
||||
get!(pairs, [template[i], template[i+1]], 0)
|
||||
pairs[[template[i], template[i+1]]] += 1
|
||||
end
|
||||
pairs, rules, [first(template), last(template)]
|
||||
end
|
||||
|
||||
function countpoly(pairs, singles)
|
||||
result = Dict()
|
||||
for (key, value) in pairs
|
||||
get!(result, key[1], 0)
|
||||
result[key[1]] += value
|
||||
get!(result, key[2], 0)
|
||||
result[key[2]] += value
|
||||
end
|
||||
for single in singles
|
||||
result[single] += 1
|
||||
end
|
||||
for key in keys(result)
|
||||
result[key] = div(result[key], 2)
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
function solution14_2()
|
||||
pairs, rules, singles = parse_input("14.data")
|
||||
steps = 40
|
||||
for step in 1:steps
|
||||
new = Dict()
|
||||
for (key, value) in pairs
|
||||
insert = get!(rules, key, nothing)
|
||||
if typeof(insert) == Char
|
||||
get!(new, [key[1], insert], 0)
|
||||
new[[key[1], insert]] += value
|
||||
get!(new, [insert, key[2]], 0)
|
||||
new[[insert, key[2]]] += value
|
||||
else
|
||||
get!(new, key, 0)
|
||||
new[key] += value
|
||||
end
|
||||
end
|
||||
pairs = new
|
||||
end
|
||||
counts = sort(collect(values(countpoly(pairs, singles))))
|
||||
last(counts) - first(counts)
|
||||
end
|
||||
|
||||
solution14_2()
|
18
14_ex.data
Normal file
18
14_ex.data
Normal file
@ -0,0 +1,18 @@
|
||||
NNCB
|
||||
|
||||
CH -> B
|
||||
HH -> N
|
||||
CB -> H
|
||||
NH -> C
|
||||
HB -> C
|
||||
HC -> B
|
||||
HN -> C
|
||||
NN -> C
|
||||
BH -> H
|
||||
NC -> B
|
||||
NB -> B
|
||||
BN -> B
|
||||
BB -> N
|
||||
BC -> B
|
||||
CC -> N
|
||||
CN -> C
|
100
15.data
Normal file
100
15.data
Normal file
@ -0,0 +1,100 @@
|
||||
7257173117871274148119191397411866741961893915191233591781237171134183111991588567743913598398999129
|
||||
9199956198317542321811795167539333593959845233586245178771259721629672984999396181817424129792113429
|
||||
5678391114239515741618386378916979112716269165195269215584939279279177393199175187199511833999819385
|
||||
7149919968927397171639311441114199789621399783958844626227879671633692776519178119978312379854918472
|
||||
9571133571872511883799281362819193417112413972551887416264299171789218539132957196979811132721291672
|
||||
8172584925581929988661688649146133971138896125391412411926754121134983167188929529959966385437588844
|
||||
4914518468152915388917729744941583692326581473756415317665271248313684872717734981831164961169161441
|
||||
2519894881987711813817528992187872878321614865385871812543911299816979364869972221856158852969592112
|
||||
9859391668949943293812278997458981968712239911133451788394169935992685191958894671638974814216612719
|
||||
2192529153611518191595896814996141119517992288611125714717119399491112913829241231917539211119881849
|
||||
2337843263693226789699931111398112969887535286492296226999311848178157169949315516494848924316823474
|
||||
1191281328169873275751982595447194592918411459316261266123821567822849396139339812112776322962112239
|
||||
4587143466247931931363896317279914687959418292417719618921579781314932674121288194141812419924513491
|
||||
9188217988495399118711317519126435116785399685763129885168131465437119937687542179912685827611129973
|
||||
9281999423754831489181352222362255825969879819312357829319722961312991751988497399311813231979551234
|
||||
8411642818749914959745792191319718911388132253292482346295961171634916811938584616484592994128913896
|
||||
3388255416913192166863912671592797172349778144861261162626679169122118178816999781511482128586841931
|
||||
1544111521579847285289829899211419185418871795132727999177828715458885628798278694521919225186212479
|
||||
6112394533149912224244478554154888237766677192511968451313528663845219413639188496229811993163929889
|
||||
7198784899159217522265428239842119185341314211991273329136173711277137989451533985143943379599711279
|
||||
5322174898961411153515736312827315967799457744138498991267929611147897735269199298727139863199825449
|
||||
9389598982325839969741219429682597992913484299849122148988986313319119891881251311761168419988993984
|
||||
9731391996727591141584769372292618329676991274389449899178113115589128811112539136473142798111999659
|
||||
5158499781719185191335698726337225419942769281296219215168381368296377583192114793345154114939919138
|
||||
9489436472297254387595375823195948188155998979224885397929111219894329444244314131186498373329899628
|
||||
5115948294552681116994961691838819122926817811428719719487293692225795236769313128246954783896581419
|
||||
7842378538599781529689123131749873922371451111511113114844145628981899497289212258729489151386198379
|
||||
5657182954384884192389177113923946799271142897712314759172399912237297817994565459889643847449996591
|
||||
2114463882686822117918787199822775881529895139151499196692246274147217497821149527235387719991114714
|
||||
2911917115481432912158219697929535145897818898214661343833193385121919978318122826712681212138729941
|
||||
7919482212881442617559399592111184197611192148899237895295211389594619418194519266268597128875922164
|
||||
5122782781762591222295946745991662147485323299849117125858933893496129327282821421189644352917799563
|
||||
1136291298829627566691527929262125187126922289732289227716821815619551911944779995415278137991622552
|
||||
4929328679851289388213321419985631998929472889692146329429231293698273199118713262892523784612611999
|
||||
1327734151191996421344997185478394257228713274441955249899986342244731153572974191897991393662691931
|
||||
2781117154312271979199389368319489151943763236781711191122134726691762925242929616867585411791129159
|
||||
1439186637181196485238285593819594866112889871679966657834249176324314497819969991879491995926214924
|
||||
8198715159568382591431231227339698151116662552918333813978498567586137499214111391961922138831958891
|
||||
1791636999843894411347725615937522999231159118674816321332412988177251964743241117549699136494419193
|
||||
2347191949569898652196299127952395252161168176339428456658821198913454439135327112298841851793131139
|
||||
6517373396832351522818699933865532731822114597879322225665521379149517111835298818315911951121182358
|
||||
9989219811198438961112789214341437915858986541454335893139567183897549391541933121816392249992757195
|
||||
2751242393169519965822749148113198418478749175225597965669585119898274413133594511599239813819261729
|
||||
2333615561781383963589211869624423159983279225123169449222598319329695159532597919931391498257683522
|
||||
2326925593466238521963381246934599431321918392819124294951311331116521125288316176431186199751635491
|
||||
9341367399225381779967242896675118399271292593248972922271792198875912499185119129993955719191131219
|
||||
9419488192386241298831213479619891591112812195761439362996925799233613913141343831817117189287994755
|
||||
9695968821621727482419983392371417945181396516317947384995853931879231912925789698357961179754119511
|
||||
9819267839831973911319938469292179778511998125121931891146223692296192299952153342285175781729419271
|
||||
1863816696271622173271985549176326189359343784972161815896794319879938399995919111197381311974788614
|
||||
9951198498951459991236295523134837224482241663114944798913138999819143627393989956711324837996945589
|
||||
5636493872291432645969776969437321939689259195165871611951271619514731193819693277839717689838523535
|
||||
1599873877797591958659883217591162792939133915996748148738729819416279661719716399869947198411871934
|
||||
8794639995351381527537286278892222682139243726394685977188691436889598769141824739519232576663818623
|
||||
9312694112319895396113225123691699114916381799538178372616115397895462387932975997638239393799315212
|
||||
5832652557695274383198568431192817489141326899824429893139485722158832888768989154554522478498498714
|
||||
8782845924111831912127921565587919113818125774499381223562975114549551996121626761137916739478221568
|
||||
9811929922686225152399211122397597158513891191615161416432783564767191169849849511985178913416153852
|
||||
1137711214593792114391112795839813891552389836983814596893489181536998977653386261925692938856897897
|
||||
2891454257881276297539979515161138819723112914812122617911912212922972482812982987377897974782821188
|
||||
7671589249839457412545235186153935156941884381134221489611219191921272892597772389234492565914198258
|
||||
1552483399116635372974898931188883743171689242311789612968114416972112951486134993116143393399793998
|
||||
8711188851122588629852724495172527356897321495229616597821333465358285422331924491418522517979118993
|
||||
9593315278649975951219952268211871741223727356181132397183838894499829221111978873973591418997289513
|
||||
3969997988729933184995613429919894232321166598283911973373115779211228919166877393889434215381781389
|
||||
5588221472469964598623295656797377199853717996631331495111278692241929496187813341637872397899624175
|
||||
9921637195158912596622263381891921897978588191413981249169189173199699294541171879989121615634351342
|
||||
3798931227871974751799777995169123924251123997219388112822621636398239724484812154741112812741472923
|
||||
1318745799964813125829815417129787311384489283415939129112478189111179617966392125599951899588399933
|
||||
9919168243159595589113819319611976889991646271868112472392818222893941139743434115977476121333191818
|
||||
3115972825613468816687921319481739413919883837749478584158912513417673612383549994987313463899975111
|
||||
9819245879871957475393932424291294189961391917998628819131487621819218799996929997391516748191973218
|
||||
2543119159599118542114782197275925148321199297951316238291197471953953113117231732381348855871885341
|
||||
8597192929968786896989279839331134411223192189898926119875521124153282436126568329811999323445191679
|
||||
3975785449971831818312568579176154978689122133184732928183381881141862482849263341279915278911683894
|
||||
3179111996949988298153199151389479257689125228811639199771592599998978715664289996372311512944263139
|
||||
3717731949295466943999325285695444691229948881923328813265999285999127111938229969918689613331778988
|
||||
3899774572142914257631398127999644341916848491762691872194259535697139312281868155191287342929193183
|
||||
3419531741121147372119481389754229993641415577459396295899232815823975392974927395711568972974293925
|
||||
1722176361244419285779288543598751211392531919462574932268633933695192352441119172662173735119515712
|
||||
8259287379497359112197399192874789929899857534134534892997117372192299398799696792833998919968157692
|
||||
9113588331521199442922126152433321148852971919741151158559612459789766141191421226791434779238851542
|
||||
9934485995397918323116671821935121371411639119196141711221111598878781853442188129954293234742142941
|
||||
5863996738774189559631311914763988372133998564893667341114799688887419869498499571261945352924543659
|
||||
1219173111621632848325722799121771234351313226119137299611516914998734631224397849155891733316457236
|
||||
2581119126696683198948223933432829124786552193519396275241779267529656466959196852322344769712989425
|
||||
9967141179556989992264146994141761832265411668193157248414232474791714884711961318296968187812563731
|
||||
2489879759889926897312354996751186797873869898953112749555984922414591917338857833991412625172181498
|
||||
9389457158881973888911321813181681241492541783691881299169396894618761158125679495966134894392982199
|
||||
9619992269841241296891999961333629572281414928995452682633291959449286127129612124227252269791663654
|
||||
1614835267511194414153578263179929291589313129387133978158911722592272783869578732691311815861241491
|
||||
9652116592834327221168619761719533625339966299211384947128885411279177514867942937963481178919941711
|
||||
2933298721252991578245341817819977199267549571111491876711439883927615991991196211296294697272313774
|
||||
1431715794741427753127381461152185596778586461419451428969132784392522194651111917169662896769767812
|
||||
5919195742129923589897349316296264144952749521471522921641452152978765849165829872135669664214112327
|
||||
6339474432243943991959119983361889756918344251994119969825144749941178381321286493218961118191911875
|
||||
5517228343299391617317192214769719192189853799115811159493116197825637676714396432979816281155693495
|
||||
6388461935842284623142112416943162883259817194297799981283439458172297191119123521515932483495126961
|
||||
7843191912999868941538811232841971381689242136381989791436989848478992513449168132392761291119899184
|
||||
1424114349573937523917871789194999469999119751164761884221519813273935995996288159921682217898434989
|
63
15.jl
Normal file
63
15.jl
Normal file
@ -0,0 +1,63 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
map(x->parse.(Int, x), split.(non_empty_lines(filename), ""))
|
||||
end
|
||||
|
||||
function search(entry_risk)
|
||||
width, height = size(entry_risk)
|
||||
total_risk = fill(typemax(Int64), width, height)
|
||||
total_risk[1, 1] = 0
|
||||
|
||||
to_visit = [(CartesianIndex(1,2), 0), (CartesianIndex(2,1), 0)]
|
||||
while length(to_visit) > 0
|
||||
rounds += 1
|
||||
coord, cost = popfirst!(to_visit)
|
||||
cost += entry_risk[coord]
|
||||
if cost < total_risk[coord]
|
||||
total_risk[coord] = cost
|
||||
if coord[1] > 1
|
||||
push!(to_visit, (CartesianIndex(coord[1] - 1, coord[2]), cost))
|
||||
end
|
||||
if coord[1] < width
|
||||
push!(to_visit, (CartesianIndex(coord[1] + 1, coord[2]), cost))
|
||||
end
|
||||
if coord[2] > 1
|
||||
push!(to_visit, (CartesianIndex(coord[1], coord[2] - 1), cost))
|
||||
end
|
||||
if coord[2] < height
|
||||
push!(to_visit, (CartesianIndex(coord[1], coord[2] + 1), cost))
|
||||
end
|
||||
end
|
||||
end
|
||||
total_risk[width, height]
|
||||
end
|
||||
|
||||
function solution15_1()
|
||||
entry_risk = parse_input("15.data")
|
||||
width = length(entry_risk)
|
||||
height = length(entry_risk[1])
|
||||
entry_risk = transpose(reshape(reduce(vcat, entry_risk), height, width))
|
||||
search(entry_risk)
|
||||
end
|
||||
|
||||
function solution15_2()
|
||||
entry_risk = parse_input("15.data")
|
||||
width = length(entry_risk)
|
||||
height = length(entry_risk[1])
|
||||
entry_risk = map(entry_risk) do line
|
||||
[line;
|
||||
map(x->mod((x-1)+1, 9)+1, line);
|
||||
map(x->mod((x-1)+2, 9)+1, line);
|
||||
map(x->mod((x-1)+3, 9)+1, line);
|
||||
map(x->mod((x-1)+4, 9)+1, line);
|
||||
]
|
||||
end
|
||||
for _ in 1:(4*height)
|
||||
push!(entry_risk, map(x->mod((x-1)+1, 9)+1, entry_risk[length(entry_risk) - (height - 1)]))
|
||||
end
|
||||
entry_risk = transpose(reshape(reduce(vcat, entry_risk), height*5, width*5))
|
||||
search(entry_risk)
|
||||
end
|
||||
|
||||
solution15_2()
|
10
15_ex.data
Normal file
10
15_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
1163751742
|
||||
1381373672
|
||||
2136511328
|
||||
3694931569
|
||||
7463417111
|
||||
1319128137
|
||||
1359912421
|
||||
3125421639
|
||||
1293138521
|
||||
2311944581
|
1
16.data
Normal file
1
16.data
Normal file
@ -0,0 +1 @@
|
||||
420D610055D273AF1630010092019207300B278BE5932551E703E608400C335003900AF0402905009923003880856201E95C00B60198D400B50034400E20101DC00E10024C00F1003C400B000212697140249D049F0F8952A8C6009780272D5D074B5741F3F37730056C0149658965E9AED7CA8401A5CC45BB801F0999FFFEEE0D67050C010C0036278A62D4D737F359993398027800BECFD8467E3109945C1008210C9C442690A6F719C48A351006E9359C1C5003E739087E80F27EC29A0030322BD2553983D272C67508E5C0804639D4BD004C401B8B918E3600021D1061D47A30053801C89EF2C4CCFF39204C53C212DABED04C015983A9766200ACE7F95C80D802B2F3499E5A700267838803029FC56203A009CE134C773A2D3005A77F4EDC6B401600043A35C56840200F4668A71580043D92D5A02535BAF7F9A89CF97C9F59A4F02C400C249A8CF1A49331004CDA00ACA46517E8732E8D2DB90F3005E92362194EF5E630CA5E5EEAD1803E200CC228E70700010A89D0BE3A08033146164177005A5AEEB1DA463BDC667600189C9F53A6FF6D6677954B27745CA00BCAE53A6EEDC60074C920001B93CFB05140289E8FA4812E071EE447218CBE1AA149008DBA00A497F9486262325FE521898BC9669B382015365715953C5FC01AA8002111721D4221007E13C448BA600B4F77F694CE6C01393519CE474D46009D802C00085C578A71E4001098F518639CC301802B400E7CDDF4B525C8E9CA2188032600E44B8F1094C0198CB16A29180351EA1DC3091F47A5CA0054C4234BDBC2F338A77B84F201232C01700042A0DC7A8A0200CC578B10A65A000601048B24B25C56995A30056C013927D927C91AB43005D127FDC610EF55273F76C96641002A4F0F8C01CCC579A8D68E52587F982996F537D600
|
116
16.jl
Normal file
116
16.jl
Normal file
@ -0,0 +1,116 @@
|
||||
using Pkg
|
||||
Pkg.add("Match")
|
||||
using Match
|
||||
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
reverse(collect(collect(non_empty_lines(filename))[1]))
|
||||
end
|
||||
|
||||
mutable struct BinaryReader
|
||||
input
|
||||
rest
|
||||
BinaryReader(input) = new(input, [])
|
||||
end
|
||||
|
||||
function fill_rest(reader)
|
||||
char = pop!(reader.input)
|
||||
code = codepoint(char)
|
||||
number = code < 0x3A ? code - 0x30 : code - (0x41 - 10)
|
||||
reader.rest = reverse(parse.(Int, collect(string(number, base=2, pad=4))))
|
||||
end
|
||||
|
||||
function read_bits(reader, count)
|
||||
result = []
|
||||
while length(result) < count
|
||||
if length(reader.rest) == 0
|
||||
fill_rest(reader)
|
||||
end
|
||||
push!(result, pop!(reader.rest))
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
function reader_length(reader)
|
||||
length(reader.rest) + length(reader.input) * 4
|
||||
end
|
||||
|
||||
function to_int(bits)
|
||||
parse(Int, reduce(*, string.(bits)), base=2)
|
||||
end
|
||||
|
||||
function parse_literal(reader, version)
|
||||
result = []
|
||||
cont = 1
|
||||
while cont == 1
|
||||
cont = read_bits(reader, 1)[1]
|
||||
result = [result; read_bits(reader, 4)]
|
||||
end
|
||||
(version, 4, to_int(result))
|
||||
end
|
||||
|
||||
function parse_operator(reader, version, type)
|
||||
length_type = read_bits(reader, 1)[1]
|
||||
subpackets = []
|
||||
if length_type == 0
|
||||
subpacket_bits = to_int(read_bits(reader, 15))
|
||||
start_remaining = reader_length(reader)
|
||||
while reader_length(reader) + subpacket_bits > start_remaining
|
||||
push!(subpackets, parse_packet(reader))
|
||||
end
|
||||
else
|
||||
subpacket_count = to_int(read_bits(reader, 11))
|
||||
for _ in 1:subpacket_count
|
||||
push!(subpackets, parse_packet(reader))
|
||||
end
|
||||
end
|
||||
(version, type, subpackets)
|
||||
end
|
||||
|
||||
function parse_packet(reader)
|
||||
version = to_int(read_bits(reader, 3))
|
||||
type = to_int(read_bits(reader, 3))
|
||||
if type == 4
|
||||
parse_literal(reader, version)
|
||||
else
|
||||
parse_operator(reader, version, type)
|
||||
end
|
||||
end
|
||||
|
||||
function sum_versions(packet)
|
||||
result = packet[1]
|
||||
if packet[2] != 4
|
||||
result += reduce(+, sum_versions.(packet[3]))
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
function solution16_1()
|
||||
input = parse_input("16.data")
|
||||
reader = BinaryReader(input)
|
||||
packet = parse_packet(reader)
|
||||
sum_versions(packet)
|
||||
end
|
||||
|
||||
function value(packet)
|
||||
@match packet[2] begin
|
||||
0 => reduce(+, value.(packet[3]))
|
||||
1 => reduce(*, value.(packet[3]))
|
||||
2 => reduce(min, value.(packet[3]))
|
||||
3 => reduce(max, value.(packet[3]))
|
||||
4 => packet[3]
|
||||
5 => value(packet[3][1]) > value(packet[3][2]) ? 1 : 0
|
||||
6 => value(packet[3][1]) < value(packet[3][2]) ? 1 : 0
|
||||
7 => value(packet[3][1]) == value(packet[3][2]) ? 1 : 0
|
||||
end
|
||||
end
|
||||
|
||||
function solution16_2()
|
||||
input = parse_input("16.data")
|
||||
reader = BinaryReader(input)
|
||||
packet = parse_packet(reader)
|
||||
value(packet)
|
||||
end
|
||||
|
||||
solution16_2()
|
1
16_ex.data
Normal file
1
16_ex.data
Normal file
@ -0,0 +1 @@
|
||||
D2FE28
|
1
16_ex_2.data
Normal file
1
16_ex_2.data
Normal file
@ -0,0 +1 @@
|
||||
38006F45291200
|
16
16_ex_3.data
Normal file
16
16_ex_3.data
Normal file
@ -0,0 +1,16 @@
|
||||
9C0141080250320F1802104A08
|
||||
9C005AC2F8F0
|
||||
F600BC2D8F
|
||||
D8005AC2A8F0
|
||||
CE00C43D881120
|
||||
880086C3E88112
|
||||
04005AC33890
|
||||
C200B40A82
|
||||
|
||||
|
||||
|
||||
A0016C880162017C3686B18A3D4780
|
||||
C0015000016115A2E0802F182340
|
||||
620080001611562C8802118E34
|
||||
8A004A801A8002F478
|
||||
EE00D40C823060
|
54
17.jl
Normal file
54
17.jl
Normal file
@ -0,0 +1,54 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
line = collect(non_empty_lines(filename))[1]
|
||||
println(line)
|
||||
map(x->parse(Int, x.match), eachmatch(r"-?[0-9]+", line))
|
||||
end
|
||||
|
||||
function inverse_gauss(x)
|
||||
sqrt(1/4 + 2 * x) - 1/2
|
||||
end
|
||||
|
||||
function valid_x_velocities(left, right)
|
||||
Int64(ceil(inverse_gauss(left))):Int64(floor(inverse_gauss(right)))
|
||||
end
|
||||
|
||||
function hitp(left, right, bottom, top, vel)
|
||||
pos = [0, 0]
|
||||
mpos = [0, 0]
|
||||
velocity = copy(vel)
|
||||
while pos[2] > bottom
|
||||
pos += velocity
|
||||
mpos = max(pos, mpos)
|
||||
velocity[1] = velocity[1] > 0 ? velocity[1] - 1 : 0
|
||||
velocity[2] -= 1
|
||||
|
||||
if pos[1] >= left && pos[1] <= right && pos[2] >= bottom && pos[2] <= top
|
||||
return true, mpos[2], vel
|
||||
end
|
||||
end
|
||||
false, mpos[2], vel
|
||||
end
|
||||
|
||||
function solution17_1()
|
||||
left, right, bottom, top = parse_input("17.data")
|
||||
for vx in valid_x_velocities(left, right)
|
||||
shots = map(v->hitp(left, right, bottom, top, v), [[vx, vy] for vy in 1:10000])
|
||||
hits = collect(Iterators.filter(x->x[1], shots))
|
||||
println(last(sort(hits, by=x->x[2])))
|
||||
end
|
||||
end
|
||||
|
||||
function solution17_2()
|
||||
left, right, bottom, top = parse_input("17.data")
|
||||
sum = 0
|
||||
for vx in 1:right
|
||||
shots = map(v->hitp(left, right, bottom, top, v), [[vx, vy] for vy in bottom:1000])
|
||||
hits = collect(map(x->x[3], Iterators.filter(x->x[1], shots)))
|
||||
sum += length(hits)
|
||||
end
|
||||
sum
|
||||
end
|
||||
|
||||
solution17_2()
|
1
17_ex.data
Normal file
1
17_ex.data
Normal file
@ -0,0 +1 @@
|
||||
target area: x=20..30, y=-10..-5
|
100
18.data
Normal file
100
18.data
Normal file
@ -0,0 +1,100 @@
|
||||
[[[[8,1],8],[[8,1],0]],[[8,[2,4]],[0,8]]]
|
||||
[[[[2,2],[7,4]],[[9,1],6]],8]
|
||||
[[[3,6],[[8,7],[2,9]]],[8,[[2,3],9]]]
|
||||
[[[[4,5],[1,4]],1],[[0,8],[2,[6,8]]]]
|
||||
[[7,[[4,6],[0,0]]],[[4,3],5]]
|
||||
[[[[8,4],4],[[4,4],[1,0]]],[[5,[5,5]],[[5,2],1]]]
|
||||
[[[0,[5,8]],[1,7]],[[[5,0],[1,3]],7]]
|
||||
[4,[[[6,2],[7,8]],[0,[4,4]]]]
|
||||
[[[3,[5,3]],8],[[[6,8],4],[8,9]]]
|
||||
[[[6,0],[9,[8,1]]],[[[9,7],3],0]]
|
||||
[[9,[[9,3],[0,8]]],[[[5,3],0],[[5,6],2]]]
|
||||
[[3,[[7,7],3]],[[7,[5,2]],[[6,9],0]]]
|
||||
[1,[4,[3,8]]]
|
||||
[[[[0,2],9],[[0,7],8]],[[5,4],[2,8]]]
|
||||
[[[[1,8],9],[1,7]],[[4,[8,5]],[[6,3],[1,0]]]]
|
||||
[[9,[[4,3],[3,3]]],[[[4,9],[0,9]],6]]
|
||||
[7,[[8,0],[5,6]]]
|
||||
[[[[3,2],1],[[4,9],6]],[[9,[1,1]],[[8,7],1]]]
|
||||
[[[[5,1],[3,3]],0],[1,[[3,2],2]]]
|
||||
[[7,9],[[9,9],[5,[9,5]]]]
|
||||
[[[[4,3],[1,7]],[4,[9,2]]],[[6,[1,7]],[[8,0],3]]]
|
||||
[[[5,[2,8]],[[1,2],7]],[[3,[0,5]],[[3,5],8]]]
|
||||
[[[[2,2],6],[[2,1],7]],[[[4,6],8],7]]
|
||||
[[2,[[3,0],[0,5]]],[[[3,4],[0,1]],0]]
|
||||
[[[[9,9],5],[[9,9],6]],[[[4,1],2],0]]
|
||||
[4,[[2,9],[6,2]]]
|
||||
[[[8,6],6],7]
|
||||
[[7,[8,2]],[[[5,5],6],[9,0]]]
|
||||
[5,[[2,5],[[4,9],[8,6]]]]
|
||||
[[4,[7,[9,6]]],7]
|
||||
[[[9,[3,3]],[[3,1],[8,7]]],[[6,[3,5]],[4,1]]]
|
||||
[[8,6],[8,[[0,2],[8,1]]]]
|
||||
[6,[8,[[7,7],0]]]
|
||||
[3,4]
|
||||
[[9,[8,0]],[[[7,8],3],1]]
|
||||
[5,[[3,[8,7]],[[5,0],[9,7]]]]
|
||||
[[[[4,2],9],[6,[0,2]]],6]
|
||||
[[4,[3,[4,9]]],[[4,[1,6]],1]]
|
||||
[[[6,3],[8,8]],[5,[[9,3],[6,3]]]]
|
||||
[[[9,9],[[7,1],6]],[[[1,0],[7,4]],[3,[2,0]]]]
|
||||
[[[[2,5],9],[3,[6,2]]],[4,7]]
|
||||
[[1,[7,8]],[[[0,1],8],[[1,1],9]]]
|
||||
[[[9,[6,4]],[[9,8],[0,2]]],[[[8,9],[2,3]],[3,[8,0]]]]
|
||||
[[[[6,8],2],3],[[2,2],5]]
|
||||
[[[4,[8,5]],[[4,3],1]],[[[2,4],[4,4]],[[4,1],[1,7]]]]
|
||||
[[[[2,6],6],[[9,2],4]],[[[9,9],[9,5]],5]]
|
||||
[[[[7,5],[4,9]],4],[[[0,7],[3,6]],[[6,5],[3,0]]]]
|
||||
[[[4,4],[[5,7],[8,5]]],[0,8]]
|
||||
[[3,[[1,3],[7,5]]],[6,[[8,1],0]]]
|
||||
[[[9,9],[5,[9,6]]],[[[4,0],[5,4]],6]]
|
||||
[0,[[[9,2],4],3]]
|
||||
[[[1,[8,5]],[0,[6,0]]],[[[6,5],[3,1]],[[6,2],[1,5]]]]
|
||||
[[[4,0],[4,7]],6]
|
||||
[1,[[[5,2],9],[[3,9],4]]]
|
||||
[[[[9,6],[4,1]],4],[2,[[0,2],6]]]
|
||||
[9,[[[1,5],[3,1]],1]]
|
||||
[5,0]
|
||||
[9,[[[7,5],[2,1]],[[2,3],[5,3]]]]
|
||||
[[5,[[0,5],[9,5]]],[[[2,7],3],[[2,9],[3,5]]]]
|
||||
[[[1,9],2],[[7,[1,7]],[8,[9,8]]]]
|
||||
[[8,9],[[5,[9,0]],[[6,8],[5,2]]]]
|
||||
[6,[[[1,3],[0,8]],4]]
|
||||
[[[[9,8],[0,9]],[[8,4],[3,5]]],[[[5,0],8],[[6,8],1]]]
|
||||
[[6,[[1,4],[7,0]]],[[3,4],[[2,1],[2,7]]]]
|
||||
[[[5,0],[3,[4,7]]],[[9,3],[[9,4],[9,6]]]]
|
||||
[[[[8,3],[8,0]],5],[[[5,5],[0,2]],[[0,1],9]]]
|
||||
[[[[6,4],[1,8]],[3,[0,2]]],[8,[[8,8],5]]]
|
||||
[2,[[2,1],[1,4]]]
|
||||
[8,[0,[3,5]]]
|
||||
[[[[0,2],3],[[4,9],[1,2]]],[[8,2],[6,[7,1]]]]
|
||||
[[[0,0],9],1]
|
||||
[8,[[4,1],[[1,3],9]]]
|
||||
[[[8,[5,9]],9],[[[5,7],[9,0]],3]]
|
||||
[[5,[2,9]],7]
|
||||
[5,6]
|
||||
[[[[7,5],[8,3]],[[4,3],8]],[[2,2],[[7,2],[4,2]]]]
|
||||
[[[9,5],[3,[1,5]]],6]
|
||||
[[[[7,4],[7,9]],[[3,1],[3,1]]],[[[6,4],[0,1]],1]]
|
||||
[[3,[[7,4],9]],[[[5,8],[2,7]],[[0,4],[3,6]]]]
|
||||
[[[3,[2,3]],[[6,0],[7,7]]],1]
|
||||
[[2,[[8,8],[2,3]]],[5,2]]
|
||||
[[[0,[5,5]],[8,1]],5]
|
||||
[[3,9],[6,[[0,5],[1,7]]]]
|
||||
[[[[3,0],9],[8,2]],[[[2,2],8],0]]
|
||||
[[[9,6],[[5,1],[4,9]]],[[[1,1],[0,3]],[[4,9],[7,5]]]]
|
||||
[[[2,[6,1]],[[5,7],[9,2]]],[[[4,2],8],9]]
|
||||
[[9,[7,1]],[[4,5],[9,1]]]
|
||||
[[9,[5,0]],[[1,7],[[9,6],[4,5]]]]
|
||||
[[[[1,1],[8,7]],4],[[0,4],[[1,7],[3,5]]]]
|
||||
[[5,[1,[8,4]]],[[[9,4],0],[1,[5,5]]]]
|
||||
[[[5,[1,6]],[6,0]],[[0,[9,7]],1]]
|
||||
[2,[9,[[0,3],[2,3]]]]
|
||||
[3,[4,[[0,9],8]]]
|
||||
[[5,6],[[[9,9],[4,0]],[7,[2,0]]]]
|
||||
[[[[5,1],6],[[1,0],[7,1]]],[[6,[1,0]],[[4,2],[0,0]]]]
|
||||
[[[4,[0,2]],6],[[[4,3],[8,0]],[[9,6],[1,5]]]]
|
||||
[[[[5,3],[2,2]],[8,[8,3]]],[[9,1],2]]
|
||||
[[3,4],[[[4,7],[2,3]],[9,[9,0]]]]
|
||||
[[[5,[6,2]],[[1,5],[9,2]]],[[[7,9],3],[[6,7],[6,2]]]]
|
||||
[[[5,3],9],[[2,[4,3]],[[5,3],1]]]
|
135
18.jl
Normal file
135
18.jl
Normal file
@ -0,0 +1,135 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_value(line, index)
|
||||
if line[index] == '['
|
||||
parse_tuple(line, index)
|
||||
else
|
||||
digits = match(r"^[0-9]+", SubString(line, index)).match
|
||||
index += length(digits)
|
||||
parse(Int, digits), index
|
||||
end
|
||||
end
|
||||
|
||||
function parse_tuple(line, index=1)
|
||||
@assert line[index] == '['
|
||||
index += 1
|
||||
|
||||
first, index = parse_value(line, index)
|
||||
|
||||
@assert line[index] == ','
|
||||
index += 1
|
||||
|
||||
second, index = parse_value(line, index)
|
||||
|
||||
@assert line[index] == ']'
|
||||
index +=1
|
||||
|
||||
return Any[first, second], index
|
||||
end
|
||||
|
||||
function parse_input(filename)
|
||||
map(x->x[1], map(parse_tuple, non_empty_lines(filename)))
|
||||
end
|
||||
|
||||
function split_sf(a)
|
||||
if typeof(a) == Int64
|
||||
if a > 9
|
||||
Any[div(a,2),div(a,2)+rem(a,2)], true
|
||||
else
|
||||
a, false
|
||||
end
|
||||
else
|
||||
l, changed = split_sf(a[1])
|
||||
a[1] = l
|
||||
if changed
|
||||
a, true
|
||||
else
|
||||
r, changed = split_sf(a[2])
|
||||
a[2] = r
|
||||
a, changed
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add_left_sf(a, number)
|
||||
if typeof(a) == Int64
|
||||
a + number
|
||||
else
|
||||
a[1] = add_left_sf(a[1], number)
|
||||
a
|
||||
end
|
||||
end
|
||||
|
||||
function add_right_sf(a, number)
|
||||
if typeof(a) == Int64
|
||||
a + number
|
||||
else
|
||||
a[2] = add_right_sf(a[2], number)
|
||||
a
|
||||
end
|
||||
end
|
||||
|
||||
function explode_sf(a, level=1)
|
||||
if typeof(a) == Int64
|
||||
return a, false, 0, 0
|
||||
end
|
||||
if level == 5
|
||||
@assert typeof(a[1]) == Int64 && typeof(a[2]) == Int64
|
||||
0, true, a[1], a[2]
|
||||
else
|
||||
l, changed, to_left, to_right = explode_sf(a[1], level + 1)
|
||||
if changed
|
||||
Any[l, add_left_sf(a[2], to_right)], true, to_left, 0
|
||||
else
|
||||
r, changed, to_left, to_right = explode_sf(a[2], level + 1)
|
||||
if changed
|
||||
Any[add_right_sf(l, to_left), r], true, 0, to_right
|
||||
else
|
||||
a, false, 0, 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function reduce_sf(a)
|
||||
changed = true
|
||||
while changed
|
||||
a, changed = explode_sf(a)
|
||||
if changed
|
||||
continue
|
||||
end
|
||||
a, changed = split_sf(a)
|
||||
end
|
||||
a
|
||||
end
|
||||
|
||||
function add_sf(a, b)
|
||||
reduce_sf(Any[deepcopy(a), deepcopy(b)])
|
||||
end
|
||||
|
||||
function mag_sf(a)
|
||||
if typeof(a) == Int64
|
||||
a
|
||||
else
|
||||
3 * mag_sf(a[1]) + 2 * mag_sf(a[2])
|
||||
end
|
||||
end
|
||||
|
||||
function solution18_1()
|
||||
mag_sf(reduce(add_sf, parse_input("18.data")))
|
||||
end
|
||||
|
||||
function solution18_2()
|
||||
input = collect(parse_input("18.data"))
|
||||
max_mag = 0
|
||||
for a in input
|
||||
for b in input
|
||||
print('.')
|
||||
max_mag = max(max_mag, mag_sf(add_sf(a, b)))
|
||||
end
|
||||
end
|
||||
println("")
|
||||
max_mag
|
||||
end
|
||||
|
||||
solution18_2()
|
10
18_ex.data
Normal file
10
18_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
[[[0,[5,8]],[[1,7],[9,6]]],[[4,[1,2]],[[1,4],2]]]
|
||||
[[[5,[2,8]],4],[5,[[9,9],0]]]
|
||||
[6,[[[6,2],[5,6]],[[7,6],[4,7]]]]
|
||||
[[[6,[0,7]],[0,9]],[4,[9,[9,0]]]]
|
||||
[[[7,[6,4]],[3,[1,3]]],[[[5,5],1],9]]
|
||||
[[6,[[7,3],[3,2]]],[[[3,8],[5,7]],4]]
|
||||
[[[[5,4],[7,7]],8],[[8,3],8]]
|
||||
[[9,3],[[9,9],[6,[4,9]]]]
|
||||
[[2,[[7,7],7]],[[5,8],[[9,3],[0,2]]]]
|
||||
[[[[5,2],5],[8,[3,7]]],[[5,[7,5]],[4,4]]]
|
140
19.jl
Normal file
140
19.jl
Normal file
@ -0,0 +1,140 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
scanners = []
|
||||
current = []
|
||||
for line in non_empty_lines(filename)
|
||||
if line[1] == '-' && line[2] == '-'
|
||||
push!(scanners, current)
|
||||
current = []
|
||||
else
|
||||
coord = collect(map(m->parse(Int, m.match), eachmatch(r"-?[0-9]+", line)))
|
||||
push!(current, coord)
|
||||
end
|
||||
end
|
||||
push!(scanners, current)
|
||||
scanners[2:length(scanners)]
|
||||
end
|
||||
|
||||
transforms = [
|
||||
# up: z
|
||||
a -> a,
|
||||
a -> [-a[2], a[1], a[3]],
|
||||
a -> [-a[1], -a[2], a[3]],
|
||||
a -> [a[2], -a[1], a[3]],
|
||||
# up: -z
|
||||
a -> [-a[1], a[2], -a[3]],
|
||||
a -> [a[2], a[1], -a[3]],
|
||||
a -> [a[1], -a[2], -a[3]],
|
||||
a -> [-a[2], -a[1], -a[3]],
|
||||
# up: x
|
||||
a -> [-a[3], a[2], a[1]],
|
||||
a -> [a[2], a[3], a[1]],
|
||||
a -> [a[3], -a[2], a[1]],
|
||||
a -> [-a[2], -a[3], a[1]],
|
||||
# up: -x
|
||||
a -> [a[3], a[2], -a[1]],
|
||||
a -> [-a[2], a[3], -a[1]],
|
||||
a -> [-a[3], -a[2], -a[1]],
|
||||
a -> [a[2], -a[3], -a[1]],
|
||||
# up: y
|
||||
a -> [a[1], -a[3], a[2]],
|
||||
a -> [-a[3], -a[1], a[2]],
|
||||
a -> [-a[1], a[3], a[2]],
|
||||
a -> [a[3], a[1], a[2]],
|
||||
# up: -y
|
||||
a -> [a[1], a[3], -a[2]],
|
||||
a -> [-a[3], a[1], -a[2]],
|
||||
a -> [-a[1], -a[3], -a[2]],
|
||||
a -> [a[3], -a[1], -a[2]],
|
||||
]
|
||||
|
||||
function try_match(a, b)
|
||||
for c in a
|
||||
for d in b
|
||||
t = c - d
|
||||
if length(intersect(a, map(x->x+t, b))) > 11
|
||||
println("pos $t")
|
||||
#println(intersect(a, map(x->x+t, b)))
|
||||
return true, collect(map(x->x+t, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
false, nothing
|
||||
end
|
||||
|
||||
function find_match(fixed, scanners)
|
||||
for (f,j) in fixed
|
||||
for i in 1:length(scanners)
|
||||
s,k = scanners[i]
|
||||
for t in transforms
|
||||
td = collect(map(t, s))
|
||||
matchp, transformed = try_match(f, td)
|
||||
if matchp
|
||||
println("f: $(j-1) s: $(k-1) ✓")
|
||||
return i, transformed
|
||||
end
|
||||
end
|
||||
# println("f: $(j-1) s: $(k-1) x")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function solution19_1()
|
||||
scanners = collect(parse_input("19.data"))
|
||||
zipped = collect(zip(scanners, 1:length(scanners)))
|
||||
fixed = [popfirst!(zipped)]
|
||||
while length(zipped) > 0
|
||||
index, transformed = find_match(fixed, zipped)
|
||||
s = popat!(zipped, index)
|
||||
# println(s[1])
|
||||
# println(transformed)
|
||||
push!(fixed, (transformed, s[2]))
|
||||
l = length(fixed)
|
||||
println("located $l")
|
||||
end
|
||||
length(reduce(union, map(x->x[1], fixed)))
|
||||
end
|
||||
|
||||
function solution19_2()
|
||||
positions = [[0, 0, 0],
|
||||
[-28, 1245, -161],
|
||||
[1163, 26, -170],
|
||||
[-1254, 90, -158],
|
||||
[-18, 1355, -1280],
|
||||
[1146, -1193, -28],
|
||||
[-2380, 15, -13],
|
||||
[-1078, 63, 1010],
|
||||
[-1105, 28, -1236],
|
||||
[-12, 2400, -1318],
|
||||
[-1075, 1190, -1385],
|
||||
[-2348, 173, -1313],
|
||||
[-2450, -1024, -26],
|
||||
[-3547, 0, -79],
|
||||
[-1233, -1211, 1144],
|
||||
[-1092, 1288, 1125],
|
||||
[-2449, 1277, -1238],
|
||||
[-2290, -2266, -141],
|
||||
[-4753, 30, -166],
|
||||
[-3532, 97, 1132],
|
||||
[-1224, 2573, 1061],
|
||||
[-2428, 1249, 1069],
|
||||
[-2269, -3556, -95],
|
||||
[-1131, -2278, -172],
|
||||
[-2337, -2411, 1197],
|
||||
[-4722, 31, 1198],
|
||||
[-6042, 159, -182],
|
||||
[-3560, 131, 2245],
|
||||
[-2385, -3457, 1117],
|
||||
[-2369, -4811, -22],
|
||||
[-1144, -3615, -89],
|
||||
[-4732, -17, 2315],
|
||||
[-5936, -1062, -10],
|
||||
[-2339, -3488, 2394],
|
||||
[-2334, -4684, 1017],
|
||||
[-3472, -3589, 2361],
|
||||
[-1256, -3495, 2220]]
|
||||
reduce(max, map(a->sum(abs.(a)), map(a->a[1]-a[2], [(a,b) for a in positions for b in positions])))
|
||||
end
|
||||
|
||||
solution19_2()
|
136
19_ex.data
Normal file
136
19_ex.data
Normal file
@ -0,0 +1,136 @@
|
||||
--- scanner 0 ---
|
||||
404,-588,-901
|
||||
528,-643,409
|
||||
-838,591,734
|
||||
390,-675,-793
|
||||
-537,-823,-458
|
||||
-485,-357,347
|
||||
-345,-311,381
|
||||
-661,-816,-575
|
||||
-876,649,763
|
||||
-618,-824,-621
|
||||
553,345,-567
|
||||
474,580,667
|
||||
-447,-329,318
|
||||
-584,868,-557
|
||||
544,-627,-890
|
||||
564,392,-477
|
||||
455,729,728
|
||||
-892,524,684
|
||||
-689,845,-530
|
||||
423,-701,434
|
||||
7,-33,-71
|
||||
630,319,-379
|
||||
443,580,662
|
||||
-789,900,-551
|
||||
459,-707,401
|
||||
|
||||
--- scanner 1 ---
|
||||
686,422,578
|
||||
605,423,415
|
||||
515,917,-361
|
||||
-336,658,858
|
||||
95,138,22
|
||||
-476,619,847
|
||||
-340,-569,-846
|
||||
567,-361,727
|
||||
-460,603,-452
|
||||
669,-402,600
|
||||
729,430,532
|
||||
-500,-761,534
|
||||
-322,571,750
|
||||
-466,-666,-811
|
||||
-429,-592,574
|
||||
-355,545,-477
|
||||
703,-491,-529
|
||||
-328,-685,520
|
||||
413,935,-424
|
||||
-391,539,-444
|
||||
586,-435,557
|
||||
-364,-763,-893
|
||||
807,-499,-711
|
||||
755,-354,-619
|
||||
553,889,-390
|
||||
|
||||
--- scanner 2 ---
|
||||
649,640,665
|
||||
682,-795,504
|
||||
-784,533,-524
|
||||
-644,584,-595
|
||||
-588,-843,648
|
||||
-30,6,44
|
||||
-674,560,763
|
||||
500,723,-460
|
||||
609,671,-379
|
||||
-555,-800,653
|
||||
-675,-892,-343
|
||||
697,-426,-610
|
||||
578,704,681
|
||||
493,664,-388
|
||||
-671,-858,530
|
||||
-667,343,800
|
||||
571,-461,-707
|
||||
-138,-166,112
|
||||
-889,563,-600
|
||||
646,-828,498
|
||||
640,759,510
|
||||
-630,509,768
|
||||
-681,-892,-333
|
||||
673,-379,-804
|
||||
-742,-814,-386
|
||||
577,-820,562
|
||||
|
||||
--- scanner 3 ---
|
||||
-589,542,597
|
||||
605,-692,669
|
||||
-500,565,-823
|
||||
-660,373,557
|
||||
-458,-679,-417
|
||||
-488,449,543
|
||||
-626,468,-788
|
||||
338,-750,-386
|
||||
528,-832,-391
|
||||
562,-778,733
|
||||
-938,-730,414
|
||||
543,643,-506
|
||||
-524,371,-870
|
||||
407,773,750
|
||||
-104,29,83
|
||||
378,-903,-323
|
||||
-778,-728,485
|
||||
426,699,580
|
||||
-438,-605,-362
|
||||
-469,-447,-387
|
||||
509,732,623
|
||||
647,635,-688
|
||||
-868,-804,481
|
||||
614,-800,639
|
||||
595,780,-596
|
||||
|
||||
--- scanner 4 ---
|
||||
727,592,562
|
||||
-293,-554,779
|
||||
441,611,-461
|
||||
-714,465,-776
|
||||
-743,427,-804
|
||||
-660,-479,-426
|
||||
832,-632,460
|
||||
927,-485,-438
|
||||
408,393,-506
|
||||
466,436,-512
|
||||
110,16,151
|
||||
-258,-428,682
|
||||
-393,719,612
|
||||
-211,-452,876
|
||||
808,-476,-593
|
||||
-575,615,604
|
||||
-485,667,467
|
||||
-680,325,-822
|
||||
-627,-443,-432
|
||||
872,-547,-609
|
||||
833,512,582
|
||||
807,604,487
|
||||
839,-516,451
|
||||
891,-625,532
|
||||
-652,-548,-490
|
||||
30,-46,-14
|
39
19_ex_2.data
Normal file
39
19_ex_2.data
Normal file
@ -0,0 +1,39 @@
|
||||
--- scanner 0 ---
|
||||
-1,-1,1
|
||||
-2,-2,2
|
||||
-3,-3,3
|
||||
-2,-3,1
|
||||
5,6,-4
|
||||
8,0,7
|
||||
|
||||
--- scanner 0 ---
|
||||
1,-1,1
|
||||
2,-2,2
|
||||
3,-3,3
|
||||
2,-1,3
|
||||
-5,4,-6
|
||||
-8,-7,0
|
||||
|
||||
--- scanner 0 ---
|
||||
-1,-1,-1
|
||||
-2,-2,-2
|
||||
-3,-3,-3
|
||||
-1,-3,-2
|
||||
4,6,5
|
||||
-7,0,8
|
||||
|
||||
--- scanner 0 ---
|
||||
1,1,-1
|
||||
2,2,-2
|
||||
3,3,-3
|
||||
1,3,-2
|
||||
-4,-6,5
|
||||
7,0,8
|
||||
|
||||
--- scanner 0 ---
|
||||
1,1,1
|
||||
2,2,2
|
||||
3,3,3
|
||||
3,1,2
|
||||
-6,-4,-5
|
||||
0,7,-8
|
51
2.jl
Normal file
51
2.jl
Normal file
@ -0,0 +1,51 @@
|
||||
using Pkg
|
||||
Pkg.add("Match")
|
||||
using Match
|
||||
|
||||
include("utils.jl")
|
||||
|
||||
function solution2_1()
|
||||
input_lines = non_empty_lines("2.data")
|
||||
|
||||
function parse_line(line)
|
||||
(command, amount) = split(line, " ")
|
||||
parsed_amount = parse(Int, amount)
|
||||
end
|
||||
|
||||
map(fline->split(line, " "), input_lines)
|
||||
|
||||
x = 0
|
||||
y = 0
|
||||
|
||||
for line in input_lines
|
||||
(command, amount) = split(line, " ")
|
||||
parsed_amount = parse(Int, amount)
|
||||
@match command begin
|
||||
"forward" => begin x += parsed_amount end
|
||||
"up" => begin y -= parsed_amount end
|
||||
"down" => begin y += parsed_amount end
|
||||
end
|
||||
end
|
||||
(x, y, x*y)
|
||||
end
|
||||
|
||||
function solution2_2()
|
||||
input_lines = non_empty_lines("2.data")
|
||||
|
||||
aim = 0
|
||||
x = 0
|
||||
y = 0
|
||||
|
||||
for line in input_lines
|
||||
(command, amount) = split(line, " ")
|
||||
parsed_amount = parse(Int, amount)
|
||||
@match command begin
|
||||
"forward" => begin x += parsed_amount; y += parsed_amount * aim end
|
||||
"up" => begin aim -= parsed_amount end
|
||||
"down" => begin aim += parsed_amount end
|
||||
end
|
||||
end
|
||||
(x, y, x*y)
|
||||
end
|
||||
|
||||
(solution2_1(), solution2_2())
|
102
20.data
Normal file
102
20.data
Normal file
@ -0,0 +1,102 @@
|
||||
#.#.....##...##..#.#......#.#...#.#.#...###.##......###.##.##..##.#...#.....###.#.....#.#.#...#.#..###.###..###..#..##..###..##..##.##.#..###########.##....#.#......#...#.###..###...#.####..########.#####.#.#..##.##.##..###.##.####.#..##.##..#...#####..#.#.##.##...##..#..##.....###.#.#....####.##.#...##.########.#.##.#.....###....#..###.####....############.#.##...#.####...#...##.#.#..#..#......#..##...#.########.#.#...#####..#..######.#.#.....#####...##.###.#.#.##.........#.#.##..##.#..#..##..##.###.##.##.
|
||||
|
||||
#.#...##.#.##.##...#......##....##...#.#....##.##.#.##....###.#####.#......###......#.#.##.####..#.#
|
||||
#.#...###.#.#.#...##...###....#####.#...#.####..########.#.#.#..#.###..##..#.####....#.#..#..##.####
|
||||
.....#.######..#.#.....#..#..####.########..#.#.####..#####..##.#..##..##.##.#..###.#.#.#.#...#..###
|
||||
#.#........#.###.#..######.##..#.##...#.....#.#.......#.##.....#.###.##.#..##..#.##...##...##.####..
|
||||
#...#.#.##..###..#..####..#####.##...###.#....#..###..#.#....####..####.####..#..###.####.###.#..###
|
||||
#..###..##.#....#.##..##.#..#.##....#.#.#.##..#.#.##..#..##.....#####..#..##.##.##..#.#####.###.#...
|
||||
..####..##...#....##.#...#######..#....##.###...#.#.........##........###.#.##....#.#.###...#...###.
|
||||
#######..#......##...##..###..##.#..##.#...###..##..#.#.##....##...##.#..##..##....#..###...##...#..
|
||||
.###.....#..#..##....#...#.##.#..#.#.#...#..#...#..#.#.###.####..#.###.###.###.#.#..#....#.#.#.#.##.
|
||||
...##.#.#.#..#..#..#.#.##..#.....#...#####..#####..#.#..#...##..#..#...###.....#...#.#.#....#..##.##
|
||||
.#####.##.##..#...###.#....##...###..#..#...#...########..#.#...#.#..####........####...###...##....
|
||||
.#..#..#.#....##..#.###...#..#.###...##.###.##.#...#####....#.###..#.#..#....#.##..#.......#.....#.#
|
||||
.#..##..#..####..##.#.#..##..###..#.......#...#...#.####.#.#.#..#.##......#.##.###.###.####.##.#.###
|
||||
.##..##.#..##..#.##.###...#.#####.#.#.#.##...#..#...##..##...#..###.###.##..##.#######.###....######
|
||||
....#.#..##...#..#####...##.#.##......#.###.#.#.###..#...###..##.#..#..####..#.#....#..#.####...#..#
|
||||
.#..##..##...#.####.#####.#######.######.####.......#.#.###.##.#.#.#.#.##.....#....#....#..###....##
|
||||
###.##..#.#.#.#.#..#######.#.########.#.#.#..####.#####.#.#..##..#..##.....#...#....#.##.##.#....#.#
|
||||
#..#.####.####.##.####...#.###.#.##......###..##.####..#..####..##.#.#....##..##.######...#..##.....
|
||||
#.##...#...#..##...#.#......#..######.#.###.####..#######..#.##...#.#...#.##..###.#####..#...#.####.
|
||||
##.###.#.######.#...#..##.#...#..##.##.....###..#.##.#..#..####....#.##.##..#.#..#.#....#.....####..
|
||||
.#.##.##.###..#...#.#.#.#.#.......#.####.#####..####.#....##.#...##.##.#.#.##.#..#.###.##..###...#.#
|
||||
#.###.#.##.#.........#..#.#.#.#..##.#..##.#####.###.#.#..#.#.#..##..###..#.##.####.#..#...###.....##
|
||||
##..#####.#...#.....###.#.#...##.####..#..###....##...#.##.##.##...#.###..#.##...........###.####.##
|
||||
.###....###.#..#.#..#..#.###..########..##......########.#..#######...#........#.#######..####..#..#
|
||||
####......#...#..#...#.######..#.##.#.##....#.##.#.#.##.#....##...###..##....#.#.##.##.....###.#.##.
|
||||
.#.####.##..##.#.#.#.##.###.##....#..#...#.###.#.#...#.....##..##.####....#..######.#.#.#.##...#...#
|
||||
...#.##...##..##.###..###....#..##.....#####.#.#..#.....##..##.###..##..##.##.....#.#..##.#..###..#.
|
||||
..##....####...##.....###.#...#.###...##.#.#..##.###....###.##........#.#..#..##..#.######..##......
|
||||
###.##.##.#...##.#...###.##.##.######.###.###..###.#....#.#....#.#.#...###..###.#.#...######.#...###
|
||||
..#.####.########.####.#.#...#..##...##...###..####.###..##..#.##..###..#.####.###..#.#.#.#######..#
|
||||
###..#.##.##.#..#..#.#..#.###...#...#.##.#####.#.###.#.###.#.##..#...#.#...##...###.....#..###....##
|
||||
..####.#....####..#.##.....#..#.#.###.###.#.#......#.....####.......##.#.######..####..#######.#..##
|
||||
.##.#.#..#..###....#....#...##.##.###..##.##...#.######......##....##..#.#.#..##..#####....#.#...#..
|
||||
##...##..#...#.#######..#.....#..##.....#####..#...##.###.####.###..###...#..###........###.##.#.###
|
||||
...###.#....#...##.....##.####..##.##.#.#..##.######.#..###.##.....##.####..#..##.###.##..###.###..#
|
||||
#.#...##....#....#.##....##...##..#.#...######..###.#.#..#.#.###.#####.#..###....#.##...####..####..
|
||||
#....###.###.#...########.##.##.######.##....#...##.#.#.#..#.##.#.....#..#.....#..........#.##..#...
|
||||
.#.#.#.#.##.##.###...#.#.#...##...#.##.##..#..#...##...##..#.##.#.##....#.###....####..#..###.#..###
|
||||
...#.#..##.#..##.#.##.####.#.#...###...#.#.###..########.#...###...###..#..#.###..####..##.#..#...#.
|
||||
##.#...#######.....#.###..#.#..####.##..##.#..##...#.##..##.#####......######.#.#.##.#..####..#.####
|
||||
#.......#.#########...#...#####...##.###.#..##..##..#...##..##.#.#.###.#.##..#...#....##..#.#.#...#.
|
||||
###..###..#...##.#...####.###..##.###..##..##.##.....#.#.#.####.######........#...#####.....#..#####
|
||||
##.#.#.########..#.#.##.#####..##.###...#...#.#.##...###.#.###..#..##.#......#.#.#.##.#.#.#....###.#
|
||||
#.##.#..#...##..###..##..#..##..##.###...#.##.##.#.#..........##...##.##..##..#....##.#####..##..#..
|
||||
.#...##.##.#..#.##....#..##.##...#...####.###..##...#...#.##...######.#.##.#.#.##.####.##..#.###.###
|
||||
##.#.#..#.#.###.#..#.##.#....#....####..#.#..##.#######..##..#...#..####.#####....#.####.#..#.#.###.
|
||||
....##.##..#.#####.###.#.###.#.#.#.#..#.###.#..######....##.##.....#.#.#...###..###..#..###....##.##
|
||||
#.#######.#..#.#.##.##...#.#..###.##.##..#..###...#.#...#..##.##..##.#.#.##.##.#######.#..#.#..#.#.#
|
||||
###.....#####..####..#...#..##.#....##.##...##...##..###...#..##..##..####.#.....##.####..#...##....
|
||||
####..##..##.#...#.###.##...###.#..#...##.##.#...#.##....####.#.#..#...##..##.##..###.......#..#..#.
|
||||
#.#.#####..#....#.#...#..##.##..##..#.####..###.####.####.#####.#.#..###.##....#....#.#.###.#.#..##.
|
||||
...##...#.#.#####.#.#....##.##..#...##...........#.#....#.##.##.....##..###...#.#####..........##.##
|
||||
.#..#..#.#...#.........####....##........##...#...#######.####.###.###...#....###..#.###.##.#.####.#
|
||||
..#.#.....#...###.####......###.#..#.#.#.#...####...#####.#..#....#.#.#....#.##.###....#..#....##.##
|
||||
##.#...##....###.#......####.#.####.##...#..#.#.#.#...#####.#..#..##.#.#...#.####....###.####.#.#.##
|
||||
.#.#..#....#.####.#..#.###..#.#.#.#.#.###...#.##.##.#.##...####..######....####...##.##.#..##.#.#..#
|
||||
..##.#...##.####..#.###..##..#.###.#.##..##.###.#.#####..#.##.#.....#.#####.####..#.#.######.#.##.#.
|
||||
#.....##..###..###.....###.##.###.#..##.#..##.###....#..#.#.##....#.##.##.#...###.###.#......#..#...
|
||||
.##.#..#...#...#.#..##.....#..#.###....###..#.##...#.##.#.##..##......#.#.#.####.#..#..##...##..##.#
|
||||
####...##...#......##.##..#######....###.##.#.###.#.#.###...####..#..#.#.##.........#.##.#....#####.
|
||||
.####.#####..##..###..#.##.##.####.......#.###.#####.#..#...#..#..####.#.....#.####.#.....###...####
|
||||
#.##......#.#.#.##....#.#.##..#...#.#.#..#...##..#.##.##..#..#####..###.##.#...##...#..#...##.##..#.
|
||||
.##.#.#.###..###.##....#...###...####...####..##.###.####.###.#..#.###.#..#.....#.##.#..#.##.#.#.#.#
|
||||
...#.###.#..#..#.###.#....##..##.#..###.######.#...##..#.#...###.....#.###.#.#....##...##.###.#.####
|
||||
.#..#..#....###..##..#....##.##..####.#.#.#..#.######....####.##.##....##.#.#.####.#..#.##.##....#..
|
||||
#..##.#...#.###..#.###..###..#.##.#.######.#.#.####....###.##....#.##.#......##.##...##....#.#.###.#
|
||||
#...##.#.####...#######..#....##.#...##..#.#....#.#.#####.####.##...#.###.##.#.#.##...##.#....##..##
|
||||
....#.##.#.##.##.#.#..###...##.#.#.#....#...#..........###.#####.##...##..#..#.##.#...#..###..#####.
|
||||
###..###.##..#.###.#.#.#...##.#.###.##.###...##.###.....####.#...##.#.#.#..#.##...#.....#..#.#.#...#
|
||||
####...#.####.#.#.#..#.##.##.##.#.#.####...#...#.#..###....##.##..##.###...##.#...#####.###.#..#....
|
||||
##..##...###..###.#.###.##.####.#..#.#..####.##.#...#..#..#.....##.#.#####...##.....#.#.#..#..##..#.
|
||||
.....#......#..##..#...#.#.#.######....###.##.##..#.###...#...#.####.##.##.###.#.######.#..#.#.##...
|
||||
#.#.#.###........#..#.#.#.#....##..##..###...##.#.##.#..#######.#..###.###.#.###.###.#.#.#.....##..#
|
||||
#.##....####.......#..##.####.#.##..###.##.###.#.#.###...###.....######...######.#.....###.##.......
|
||||
#.##..#...#..#..#....#.##...#..#.###...#...#########.#.#...#.....#...#..#.#...#.#.#...#.###.####..##
|
||||
.#..##........###.#.#....#.......##.#..#.#.#.##.......#.#.#.#..#.#.....#....#.###.#.##...###.....#..
|
||||
.#.#...##...#....#.##..##.#...#.##..#..##.#..###.#####..##.#.##.####.####.###...##....##......###..#
|
||||
#..##....##.###.##.....#.#.....#.#...#..##....##.###.#....###.....######.#.##.###..#..#.#...#.....#.
|
||||
....#.####.....#..#..#...#.###.#####..##...#.#..###.#...#...##.###.##..#.######..####.#.#....#.#..##
|
||||
##.#..##.#.#.##..##..#...###..##.##..#.###..#...###..##.#.###.####...#..#.#######.##.###.###.#.#..#.
|
||||
...##...##.#.#.##.#.##.###..##...##.#..#..##.##.##.##.#.####..##.######....#..#.#.#....###.#.##.#.#.
|
||||
.#.....#.###...##.#.##.#..###.##..####.###..#.#.....#..##.#.#..##...##.#..#.##..#########..#.#.##.#.
|
||||
####.#..#.#..##...#..#.##..#..#...#.###.....#..##...#..####....#######.....#.##.##..##...#.##..####.
|
||||
########...#.#.####..####.#.#.#..##.#.#.##...#...#..#...#..###.#.#..##..#####.#.#.#.##.#.###...#.##.
|
||||
.#....#..######.#.#.#..##.#.#...#####....##..##.##.#####....#.##..#..#.#.#.###..#.####.###.........#
|
||||
...####..##......###..#..###..#.#.###.#...#..####.#.#..###....#..##.####.#..#.....#.........##..###.
|
||||
.####...##...#####.##.##...##...##..##...#.#####...#...##...#.####..####.###.....##.##...##.#######.
|
||||
##..####....#.#..#.#....##..#####....#.#...#.####..#######..##.#####.#.#.#.##.#.#..#...#.###.##.#.##
|
||||
#.####....#..##########...###.#..#####.#.#.##....#..#....######.....#...#.##.##.#.##..#.###..###..#.
|
||||
##.#.##.###..#.###.....##..#.###.#....#####.###...#.#.##.#..#.###.#.#.#####.#.##.##.##.#.#.###.###..
|
||||
.###.#.#.##.######.#.#..##.#..####..#....##......#...##.##.#.......#.#.#.####.#.#.##....##.####..#.#
|
||||
####..#...##....#.#.#....#.#####...#..#....##..#..####...#..###...........####.###.###......#..##..#
|
||||
..##.####.##....####....#.#.####..#...###.#....#.##.###.#.##..####.#..###..#...#..#####..#...##...#.
|
||||
...#..#....#.#..##.#.####....#..####...##.#..#####.###..#.##..###.######...#...#...######.##....##..
|
||||
..#########.#####.#####.###.##.#.###.###..#.#.#.#.###.#...###........####..#####.#.##.##.#..#..#.##.
|
||||
#..###.##.###.#...#.#.#.##.###........#.#.#.#..#..##.##.#.....#.#.....##...#..#.##..#..#..#......#.#
|
||||
...##..#...##.....##...####.....#.##..###.....#..#.###.#..#.#...#..#.#.....###.###.##.#.#.#..#.#....
|
||||
#...#...#.#.#...#####.####..#....##...##.##.##.#...#.#.#..#...##....#...###.#.##.##....########..#..
|
||||
.#.####....#.#.....########.#....######.#.#######...##..#.###.#.###..###.#..###....#.#.###.....###.#
|
||||
..#.##.##....#..#...#..#.#.#...###...#..#.#.#.####.#.#####.####....##..#..###.#.#..####....##.####..
|
58
20.jl
Normal file
58
20.jl
Normal file
@ -0,0 +1,58 @@
|
||||
include("utils.jl")
|
||||
|
||||
function convert_to_binary(string)
|
||||
map(x->x=='#' ? 1 : 0, collect(string))
|
||||
end
|
||||
|
||||
function parse_input(filename, iterations)
|
||||
lines = collect(non_empty_lines(filename))
|
||||
algorithm = convert_to_binary(lines[1])
|
||||
|
||||
dim = length(lines[2])
|
||||
buffered_dim = 2 * iterations + dim
|
||||
|
||||
fix_lines = fill(fill(0, buffered_dim), iterations)
|
||||
|
||||
i = [fix_lines;
|
||||
map(convert_to_binary, map(x-> reduce(*, fill(".", iterations)) * x * reduce(*, fill(".", iterations)), lines[2:length(lines)]));
|
||||
fix_lines]
|
||||
image = transpose(reshape(reduce(vcat, i), buffered_dim, buffered_dim))
|
||||
algorithm, image
|
||||
end
|
||||
|
||||
function getv(algorithm, image, i, x, y)
|
||||
address = []
|
||||
for ox in (x-1):(x+1)
|
||||
for oy in (y-1):(y+1)
|
||||
if ox < 1 || ox > size(image)[1] || oy < 1 || oy > size(image)[1]
|
||||
# example
|
||||
# push!(address, "0")
|
||||
# real
|
||||
push!(address, i % 2 == 1 ? "0" : "1")
|
||||
else
|
||||
push!(address, string(image[ox,oy]))
|
||||
end
|
||||
end
|
||||
end
|
||||
algorithm[parse(Int, reduce(*, address), base=2)+1]
|
||||
end
|
||||
|
||||
function enhance(fname, iterations)
|
||||
algorithm, image = parse_input(fname, iterations)
|
||||
for i in 1:iterations
|
||||
new = copy(image)
|
||||
for x in 1:size(image)[1]
|
||||
for y in 1:size(image)[1]
|
||||
new[x, y] = getv(algorithm, image, i, x, y)
|
||||
end
|
||||
end
|
||||
image = new
|
||||
end
|
||||
length(filter(==(1), image))
|
||||
end
|
||||
|
||||
function solution20_1()
|
||||
enhance("20.data", 50)
|
||||
end
|
||||
|
||||
solution20_1()
|
7
20_ex.data
Normal file
7
20_ex.data
Normal file
@ -0,0 +1,7 @@
|
||||
..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
|
||||
|
||||
#..#.
|
||||
#....
|
||||
##..#
|
||||
..#..
|
||||
..###
|
70
21.jl
Normal file
70
21.jl
Normal file
@ -0,0 +1,70 @@
|
||||
function make_dice(max_value)
|
||||
next = max_value - 1
|
||||
r = 0
|
||||
function roll()
|
||||
r += 1
|
||||
next += 1
|
||||
next %= max_value
|
||||
return next + 1
|
||||
end
|
||||
function rolls()
|
||||
r
|
||||
end
|
||||
roll, rolls
|
||||
end
|
||||
|
||||
function advance(pos, dice)
|
||||
pos += dice()+dice()+dice()
|
||||
((pos - 1) % 10) + 1
|
||||
end
|
||||
|
||||
function solution21_1()
|
||||
pos_a = 8
|
||||
pos_b = 5
|
||||
dice, times = make_dice(100)
|
||||
score_a = 0
|
||||
score_b = 0
|
||||
while true
|
||||
pos_a = advance(pos_a, dice)
|
||||
score_a += pos_a
|
||||
println("a -> $pos_a ($score_a)")
|
||||
if score_a >= 1000
|
||||
r = times()
|
||||
println("$score_b $r $(score_b * r)")
|
||||
break
|
||||
end
|
||||
pos_b = advance(pos_b, dice)
|
||||
score_b += pos_b
|
||||
println("b -> $pos_b ($score_b)")
|
||||
if score_b >= 1000
|
||||
r = times()
|
||||
println("$score_a $r $(score_a * r)")
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
using Pkg
|
||||
Pkg.add("Memoize")
|
||||
using Memoize
|
||||
|
||||
DICE = [(a,b,c) for a in 1:3 for b in 1:3 for c in 1:3]
|
||||
|
||||
@memoize function round(pa, pb, sa, sb)
|
||||
sum(map(DICE) do dice
|
||||
npa = pa + sum(dice)
|
||||
npa = ((npa - 1) % 10) + 1
|
||||
nsa = sa + npa
|
||||
if nsa >= 21
|
||||
[1, 0]
|
||||
else
|
||||
circshift(round(pb, npa, sb, nsa), 1)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function solution21_2()
|
||||
round(8, 5, 0, 0)
|
||||
end
|
||||
|
||||
solution21_2()
|
420
22.data
Normal file
420
22.data
Normal file
@ -0,0 +1,420 @@
|
||||
on x=-9..45,y=-15..37,z=-2..46
|
||||
on x=-48..2,y=-11..37,z=3..48
|
||||
on x=-47..4,y=-47..-3,z=-12..34
|
||||
on x=-24..29,y=-12..40,z=-20..29
|
||||
on x=-48..3,y=-38..16,z=-22..31
|
||||
on x=-35..13,y=-10..43,z=-11..42
|
||||
on x=-4..47,y=1..47,z=-26..18
|
||||
on x=-49..1,y=-29..22,z=-44..2
|
||||
on x=-12..33,y=-14..38,z=-9..35
|
||||
on x=-44..8,y=0..46,z=-28..20
|
||||
off x=-44..-31,y=-37..-21,z=35..49
|
||||
on x=-2..42,y=-49..-4,z=-10..39
|
||||
off x=-26..-17,y=-38..-29,z=-32..-18
|
||||
on x=-41..10,y=-1..49,z=-22..24
|
||||
off x=-49..-35,y=-26..-15,z=11..24
|
||||
on x=-5..47,y=-34..10,z=-3..42
|
||||
off x=-16..-7,y=-9..0,z=-4..12
|
||||
on x=-45..1,y=-25..22,z=-2..49
|
||||
off x=21..40,y=30..44,z=-16..1
|
||||
on x=-11..37,y=-44..1,z=-20..25
|
||||
on x=7379..15679,y=62885..66145,z=40785..66699
|
||||
on x=55922..93809,y=1651..21593,z=-29830..-6845
|
||||
on x=-31566..-20771,y=49570..87512,z=-38744..-20396
|
||||
on x=4993..41166,y=-27079..-6497,z=-88189..-66473
|
||||
on x=60741..69319,y=-13925..8370,z=-62720..-33863
|
||||
on x=34284..42689,y=-71439..-58324,z=22610..47957
|
||||
on x=8592..42171,y=-65708..-43885,z=-61206..-46568
|
||||
on x=64371..79931,y=28477..37185,z=13392..20753
|
||||
on x=-59117..-37612,y=-64167..-37759,z=35921..54572
|
||||
on x=-14064..20202,y=-90417..-70077,z=25371..40391
|
||||
on x=-67395..-41025,y=17787..31773,z=-57128..-48199
|
||||
on x=-70962..-46942,y=19586..45376,z=-54426..-31169
|
||||
on x=31777..46666,y=-28152..-20207,z=-66876..-55373
|
||||
on x=13530..27088,y=-90327..-70591,z=-1912..25782
|
||||
on x=40408..67678,y=38887..66828,z=-30776..-13301
|
||||
on x=-29414..-16610,y=56466..86239,z=20871..32428
|
||||
on x=-76113..-67766,y=37613..40645,z=-16702..13708
|
||||
on x=-53053..-28552,y=57577..78562,z=14326..42575
|
||||
on x=-58889..-42881,y=16768..21306,z=42955..76041
|
||||
on x=-73073..-51398,y=46632..48316,z=20149..34615
|
||||
on x=-66303..-54970,y=-61600..-49802,z=-11768..9094
|
||||
on x=-53654..-27948,y=9591..45638,z=-71810..-58350
|
||||
on x=-69622..-52612,y=-45011..-38959,z=24484..44518
|
||||
on x=3515..15378,y=41121..59682,z=-61133..-55743
|
||||
on x=-90134..-62577,y=208..23739,z=26851..46343
|
||||
on x=65530..81406,y=42070..52596,z=-11235..13125
|
||||
on x=64169..84257,y=-10178..17467,z=-29044..-16366
|
||||
on x=17446..26654,y=-66194..-47798,z=-42530..-24698
|
||||
on x=-58456..-32175,y=-57823..-50339,z=35867..54337
|
||||
on x=47156..63257,y=-36128..-21908,z=33134..41699
|
||||
on x=-48529..-31263,y=-62437..-39211,z=-56496..-37240
|
||||
on x=-34149..-14003,y=-79123..-45929,z=-55215..-40418
|
||||
on x=-84191..-64387,y=-11156..17366,z=31098..34346
|
||||
on x=-82865..-68797,y=-5798..8421,z=28104..58202
|
||||
on x=29311..45767,y=-88790..-62482,z=-29612..-214
|
||||
on x=8842..27908,y=68184..82736,z=-55247..-19216
|
||||
on x=-42756..-14515,y=74498..84491,z=-20007..4343
|
||||
on x=-37638..-28150,y=-72221..-45636,z=49412..60164
|
||||
on x=32841..44894,y=-62963..-55317,z=-44129..-18308
|
||||
on x=41325..48341,y=14656..22614,z=-63334..-57171
|
||||
on x=39491..70558,y=48229..67699,z=14708..39318
|
||||
on x=-16935..-15423,y=72793..82573,z=-9454..8508
|
||||
on x=28720..40689,y=29779..36750,z=-74342..-54201
|
||||
on x=65984..88372,y=-3884..15208,z=19130..38834
|
||||
on x=-85972..-61107,y=-27882..-5274,z=-23592..-4731
|
||||
on x=-65737..-48051,y=-4370..32823,z=-51562..-27039
|
||||
on x=53568..75174,y=13164..34585,z=-62900..-49637
|
||||
on x=43348..67279,y=37890..47849,z=6060..34285
|
||||
on x=-88633..-60579,y=-40956..-20401,z=-20101..8972
|
||||
on x=-70097..-44904,y=37603..69889,z=-21021..-5234
|
||||
on x=-76016..-71353,y=10592..39343,z=5961..25639
|
||||
on x=26814..51079,y=-76683..-51852,z=-32221..-7926
|
||||
on x=78022..90710,y=-6329..7380,z=-30398..3225
|
||||
on x=-81947..-59036,y=6212..27865,z=-30191..-23650
|
||||
on x=-14260..5518,y=-59292..-33347,z=-80781..-44527
|
||||
on x=61127..77249,y=-44821..-16717,z=-15659..9963
|
||||
on x=7812..29885,y=46232..56927,z=56252..66587
|
||||
on x=-70864..-55068,y=36351..66673,z=2115..29365
|
||||
on x=-21385..-5787,y=-24942..-1426,z=62656..77888
|
||||
on x=21748..31508,y=44194..75368,z=42392..61013
|
||||
on x=-30140..-13716,y=60038..82957,z=-55563..-22103
|
||||
on x=15892..46641,y=28104..45417,z=-69780..-49812
|
||||
on x=-35304..-14704,y=-69612..-54212,z=-64119..-43604
|
||||
on x=-75511..-53167,y=-16408..-5573,z=-34276..-13669
|
||||
on x=-49880..-26128,y=-78019..-53301,z=563..27150
|
||||
on x=-3710..31007,y=635..31231,z=-89739..-67701
|
||||
on x=16417..27647,y=59484..83416,z=-38071..-8125
|
||||
on x=-55486..-36218,y=-18343..-1162,z=48973..70778
|
||||
on x=6364..25168,y=-73763..-55266,z=-47439..-20212
|
||||
on x=-77074..-63388,y=13325..37503,z=26475..47125
|
||||
on x=47836..63427,y=-22005..-1081,z=-56895..-36496
|
||||
on x=52594..78952,y=1602..34837,z=-55674..-29580
|
||||
on x=9195..36803,y=-42634..-16959,z=49912..77645
|
||||
on x=-43313..-9809,y=-61189..-27305,z=-73518..-57945
|
||||
on x=-15098..-247,y=-84505..-61173,z=-6903..10359
|
||||
on x=-14761..20062,y=42726..66812,z=-67450..-36194
|
||||
on x=-6269..13514,y=27764..51152,z=-65770..-56309
|
||||
on x=-11702..12085,y=4154..19444,z=74342..85810
|
||||
on x=20250..40759,y=-12245..12965,z=-85663..-56952
|
||||
on x=14397..31766,y=-77031..-60677,z=-13856..14510
|
||||
on x=-57268..-50706,y=-61409..-55384,z=-8347..2644
|
||||
on x=27634..48898,y=66690..87119,z=-27363..-7996
|
||||
on x=11697..40665,y=-92019..-67357,z=-28564..-4579
|
||||
on x=-23635..-7962,y=23732..32687,z=-83083..-62791
|
||||
on x=40495..46668,y=-62018..-49602,z=-65022..-33630
|
||||
on x=13198..30010,y=-82290..-65531,z=-17978..9547
|
||||
on x=12582..25248,y=-22745..3631,z=70846..86218
|
||||
on x=-26583..-5966,y=41977..55683,z=36463..75892
|
||||
on x=-65277..-49356,y=37876..57024,z=-52763..-45440
|
||||
on x=-64608..-41498,y=-8129..16874,z=50097..71345
|
||||
on x=42175..49606,y=-70140..-50383,z=35730..40798
|
||||
on x=54705..58189,y=-56152..-49341,z=-400..24932
|
||||
on x=68337..79185,y=-25307..-6874,z=-3313..19891
|
||||
on x=5018..29619,y=62462..81105,z=18248..30135
|
||||
on x=-76041..-38663,y=38551..70709,z=-12671..23088
|
||||
on x=-72729..-54213,y=-6076..24031,z=-57821..-37810
|
||||
on x=43326..72010,y=20000..41816,z=51160..69275
|
||||
on x=1558..30222,y=-73358..-70358,z=16312..51532
|
||||
on x=-35043..-18417,y=-44261..-25881,z=-78549..-52077
|
||||
on x=28098..46713,y=18474..22660,z=-78742..-54633
|
||||
on x=-14412..8266,y=70802..80415,z=-14992..9258
|
||||
on x=-26641..-7645,y=60425..75589,z=-43589..-23911
|
||||
on x=-25876..-19902,y=53219..77507,z=-48144..-17584
|
||||
on x=-43367..-22330,y=68271..77937,z=9057..20584
|
||||
on x=-17237..2381,y=3583..28698,z=-94572..-73051
|
||||
on x=-6829..3379,y=65792..90689,z=-5002..16981
|
||||
on x=-54132..-45538,y=-78237..-50736,z=-11644..8605
|
||||
on x=-59532..-53419,y=34745..56394,z=30582..53444
|
||||
on x=-20732..5101,y=-77256..-61756,z=30478..35782
|
||||
on x=14347..38867,y=9283..24381,z=-87398..-53279
|
||||
on x=36595..57756,y=38640..51025,z=-58273..-44565
|
||||
on x=-54582..-27927,y=-78804..-46081,z=13910..33182
|
||||
on x=16349..35830,y=71332..87852,z=8157..16797
|
||||
on x=-43956..-33473,y=33808..56755,z=42846..61246
|
||||
on x=11314..13439,y=-38033..-17400,z=-76284..-68981
|
||||
on x=46492..76990,y=8474..15734,z=-55742..-41584
|
||||
on x=27131..36354,y=-29792..-5590,z=-74708..-55530
|
||||
on x=52353..74451,y=33392..55689,z=19093..30505
|
||||
on x=10590..26407,y=26646..44875,z=53669..85124
|
||||
on x=10328..23456,y=52345..77588,z=31705..56684
|
||||
on x=-46182..-26197,y=20916..52128,z=-61613..-51850
|
||||
on x=-5902..15644,y=7302..32746,z=-89842..-71630
|
||||
on x=-13813..21172,y=-87032..-70414,z=-36..11650
|
||||
on x=-43300..-20544,y=-39391..-20796,z=-78685..-54411
|
||||
on x=53826..59621,y=-22659..6182,z=34874..57854
|
||||
on x=56180..78116,y=-17473..-11209,z=33329..48534
|
||||
on x=-27987..-9324,y=45080..55335,z=48847..80731
|
||||
on x=71719..89566,y=-25531..-10083,z=-22109..-12785
|
||||
on x=-29430..-21311,y=-89432..-55080,z=14731..25873
|
||||
on x=32126..44985,y=48444..71257,z=16998..38903
|
||||
on x=24388..50981,y=-66328..-57172,z=-52521..-27884
|
||||
on x=30463..45384,y=-7855..28748,z=-86869..-55644
|
||||
on x=-67671..-45297,y=-29469..-5222,z=44296..53119
|
||||
on x=35058..42106,y=-69099..-47111,z=40655..63310
|
||||
on x=33046..64904,y=-70169..-43042,z=13896..36888
|
||||
on x=-22322..-13112,y=-25157..-2838,z=-93853..-69670
|
||||
on x=73781..84202,y=-1016..31182,z=9547..30589
|
||||
on x=-72865..-63710,y=-50800..-28031,z=-15998..20829
|
||||
on x=6767..15631,y=-17255..-11461,z=-97425..-59135
|
||||
on x=25319..31792,y=-93050..-64825,z=8041..20183
|
||||
on x=-70089..-30927,y=36115..69616,z=-39401..-14311
|
||||
on x=62942..69074,y=-22392..-1078,z=-66440..-27451
|
||||
on x=-13913..4148,y=-75097..-42466,z=35698..57507
|
||||
on x=-85917..-59242,y=-11125..2601,z=19575..55603
|
||||
on x=15134..42927,y=-79064..-64982,z=-1971..24343
|
||||
on x=39880..58909,y=56469..72390,z=-1437..26115
|
||||
on x=-21090..-12306,y=-94355..-77198,z=-29560..52
|
||||
on x=-28671..-8856,y=45669..64627,z=31384..51891
|
||||
on x=-75912..-56733,y=-23901..1139,z=28555..57092
|
||||
on x=-47744..-10650,y=71138..83710,z=4554..27540
|
||||
on x=25710..42555,y=-33622..-14274,z=52056..65528
|
||||
on x=-76115..-63779,y=-29627..-15804,z=-1106..16981
|
||||
on x=14189..34263,y=-62546..-38815,z=42727..81264
|
||||
on x=7852..41042,y=31315..42334,z=55681..71183
|
||||
on x=-88315..-67768,y=-8097..8232,z=22878..36892
|
||||
on x=-75367..-48994,y=-65971..-49798,z=-331..14292
|
||||
on x=-25718..1445,y=-80169..-61373,z=-57242..-32282
|
||||
on x=-13075..7644,y=-14640..-3379,z=75167..96592
|
||||
on x=35741..67984,y=-60591..-37834,z=-42879..-23133
|
||||
on x=-26071..-15399,y=-54535..-33151,z=64373..77023
|
||||
on x=70725..90684,y=8312..29942,z=-28004..2695
|
||||
on x=54936..67698,y=10377..30841,z=-45783..-36371
|
||||
on x=-2020..25407,y=-78434..-50839,z=-48610..-39223
|
||||
on x=-45717..-43647,y=48801..70774,z=31062..45511
|
||||
on x=34206..54314,y=-70584..-47392,z=-45786..-24983
|
||||
on x=-49858..-27145,y=-8313..12257,z=-80733..-65761
|
||||
on x=19194..48953,y=-76824..-50937,z=-38483..-20184
|
||||
on x=-11056..8975,y=60011..77711,z=-47016..-22798
|
||||
on x=23444..61412,y=-8792..27162,z=54757..77897
|
||||
on x=-75528..-48686,y=-2534..13417,z=-72418..-47078
|
||||
on x=21664..55288,y=9053..15264,z=54771..84777
|
||||
on x=45230..57868,y=-35816..-19600,z=-70489..-40910
|
||||
on x=30646..56513,y=-73290..-51396,z=-48109..-23594
|
||||
on x=-19927..8133,y=20111..22064,z=-78790..-65966
|
||||
on x=-73214..-50284,y=-42781..-29543,z=-52080..-40858
|
||||
on x=59641..92804,y=-14320..9890,z=10580..32686
|
||||
on x=6948..24112,y=59008..83939,z=9209..29435
|
||||
on x=20747..42638,y=54010..87392,z=-10349..6792
|
||||
on x=-82467..-56030,y=-63078..-36419,z=-18052..-7281
|
||||
on x=43143..53517,y=-42852..-33677,z=-75322..-38352
|
||||
on x=34903..68087,y=-53600..-43300,z=19263..37332
|
||||
on x=-75090..-51229,y=39553..54421,z=-29984..-11983
|
||||
on x=31297..41923,y=40810..55544,z=41336..65242
|
||||
on x=48907..76926,y=44120..55019,z=19408..32113
|
||||
on x=-28350..-11619,y=-96073..-68302,z=7131..23826
|
||||
on x=-71444..-52453,y=-46437..-37331,z=-23610..-7727
|
||||
on x=-90114..-62112,y=-11142..11966,z=10310..30329
|
||||
on x=-8298..10663,y=-89901..-65346,z=26819..55136
|
||||
on x=-83214..-52210,y=-28546..-6449,z=26105..44117
|
||||
on x=-48292..-15887,y=-32421..-24179,z=-72733..-50252
|
||||
on x=2675..6592,y=57643..77972,z=-45680..-31319
|
||||
on x=-27301..-19021,y=52139..65771,z=40324..62506
|
||||
on x=-15122..12261,y=76124..83252,z=-6966..26871
|
||||
on x=-28135..-5592,y=42253..66391,z=61120..81631
|
||||
on x=41458..59123,y=-65686..-28325,z=18007..42560
|
||||
on x=-7254..2575,y=-37975..-25118,z=-83436..-55842
|
||||
on x=-69756..-51850,y=-14700..11743,z=-64913..-57730
|
||||
on x=46050..60943,y=29947..49852,z=-29174..-16871
|
||||
on x=-24798..-1730,y=72778..96749,z=7809..19201
|
||||
on x=-23651..-9598,y=-57234..-34582,z=-70338..-60811
|
||||
off x=-62738..-27200,y=9928..29860,z=-82061..-55735
|
||||
off x=-35621..-8459,y=71584..77639,z=-24783..543
|
||||
on x=5884..24918,y=4508..27365,z=-79957..-56399
|
||||
off x=50195..64289,y=48376..65137,z=-21184..896
|
||||
off x=24188..59760,y=-44337..-27583,z=42362..66284
|
||||
off x=-57347..-28736,y=-60601..-44136,z=-63070..-43716
|
||||
off x=48377..66842,y=5381..28487,z=-56713..-36405
|
||||
off x=-30632..-10325,y=-68112..-57776,z=-70249..-44986
|
||||
on x=-27258..-24687,y=-27831..179,z=67481..80119
|
||||
off x=25197..36490,y=58147..79063,z=-55819..-29388
|
||||
on x=-42369..-14014,y=35824..40212,z=49626..67639
|
||||
on x=72482..78811,y=2743..24960,z=-21034..9641
|
||||
on x=-38737..-16444,y=-19459..-7136,z=70522..89734
|
||||
off x=-47053..-18446,y=-49781..-27644,z=-63382..-45445
|
||||
on x=-61779..-53562,y=-68401..-43173,z=-26499..2615
|
||||
on x=70280..90492,y=-22017..-1048,z=-11788..9915
|
||||
on x=16973..40998,y=55375..78623,z=5729..32627
|
||||
on x=6679..29613,y=46958..81428,z=27700..55392
|
||||
off x=-54278..-31989,y=37760..65264,z=47082..48144
|
||||
on x=-24395..-1817,y=-3077..6849,z=62195..88101
|
||||
off x=32931..47933,y=-80935..-47905,z=12414..35416
|
||||
on x=-4833..29094,y=-74517..-46510,z=-50662..-36261
|
||||
off x=17745..39300,y=-77063..-52076,z=14430..34896
|
||||
on x=-4254..2793,y=-27799..-2199,z=61332..85652
|
||||
on x=-11125..-6797,y=-67626..-59797,z=45783..53770
|
||||
on x=-51997..-22683,y=-75871..-59016,z=-35612..-29371
|
||||
off x=-53070..-30804,y=-37612..-16817,z=-61098..-33579
|
||||
on x=-52249..-27676,y=65019..73794,z=8944..31489
|
||||
on x=54561..70311,y=8710..27762,z=-60193..-29447
|
||||
on x=-79526..-54134,y=-48561..-39181,z=12782..46387
|
||||
off x=19885..33599,y=62071..83093,z=-50279..-13755
|
||||
on x=23245..46830,y=20494..44306,z=-73620..-54933
|
||||
on x=-79449..-67759,y=-24475..-10791,z=5687..32934
|
||||
off x=-30071..-21031,y=54871..72346,z=32042..55267
|
||||
off x=-30238..-2898,y=-77564..-51143,z=35341..64987
|
||||
off x=54103..57884,y=36694..60345,z=-45985..-16112
|
||||
on x=52740..71478,y=15648..46995,z=9255..41940
|
||||
off x=47709..56624,y=42824..76404,z=-16692..-4361
|
||||
off x=-79808..-65764,y=11636..14621,z=6874..40024
|
||||
off x=-53031..-20679,y=-63906..-40440,z=24661..46608
|
||||
off x=21238..38683,y=-78416..-46878,z=-47880..-35504
|
||||
on x=-53581..-36276,y=-1941..20566,z=-71887..-54358
|
||||
off x=-32154..-11432,y=-79738..-67958,z=-10706..17360
|
||||
off x=10696..21438,y=-53803..-22129,z=-87224..-56070
|
||||
off x=28285..52461,y=-49037..-26856,z=36499..53886
|
||||
on x=-260..5955,y=24586..37153,z=-83960..-67924
|
||||
off x=-50570..-23890,y=-75797..-57497,z=-41895..-29533
|
||||
off x=-4478..14154,y=25690..41167,z=-78169..-65042
|
||||
off x=53823..62681,y=-65274..-48164,z=11640..36739
|
||||
off x=7445..17160,y=3112..20438,z=-79277..-66317
|
||||
off x=-72283..-62851,y=-18551..17812,z=26518..45970
|
||||
off x=-59435..-35677,y=-61145..-49053,z=-28620..-19260
|
||||
on x=52909..71776,y=-35904..-8679,z=-45640..-18257
|
||||
on x=-28198..-10547,y=47520..75387,z=-56238..-36602
|
||||
on x=-78021..-57108,y=-202..20511,z=22910..26211
|
||||
on x=6366..17660,y=-81206..-59720,z=-20739..4299
|
||||
off x=62320..70434,y=-46472..-33338,z=24434..41197
|
||||
on x=65053..71471,y=16283..27975,z=-53360..-32879
|
||||
on x=25858..60433,y=-26017..-21914,z=48513..63801
|
||||
off x=-79152..-68671,y=22088..30479,z=-22648..-10494
|
||||
off x=67085..79404,y=-9147..17587,z=-34597..-22908
|
||||
on x=-25433..-14453,y=-65170..-45979,z=46473..59725
|
||||
on x=-85030..-67943,y=-43295..-20298,z=-28190..-8337
|
||||
off x=14793..29071,y=51299..70682,z=-63333..-48581
|
||||
on x=-22738..-3843,y=62665..91255,z=-40441..-6764
|
||||
off x=-69466..-51782,y=-28726..-4741,z=51052..65722
|
||||
off x=-37894..-19524,y=-83016..-54967,z=-15269..4234
|
||||
off x=-51737..-36058,y=49755..52567,z=40935..52695
|
||||
on x=5160..16270,y=-63557..-29172,z=-66325..-60455
|
||||
on x=-12754..14999,y=42410..57660,z=-81237..-44235
|
||||
off x=-21896..-1639,y=-6683..12111,z=-86947..-66486
|
||||
on x=17671..34865,y=25801..50054,z=-69110..-52941
|
||||
off x=53780..79949,y=-19080..-1582,z=-51267..-26442
|
||||
on x=11705..31955,y=-18273..10873,z=-79513..-72321
|
||||
off x=42225..64739,y=-63751..-38399,z=-21976..3241
|
||||
on x=-83556..-68733,y=-27434..-7743,z=-13017..9177
|
||||
on x=56237..76149,y=-34497..-16008,z=-39077..-19458
|
||||
on x=-43305..-25014,y=-73343..-49996,z=-7825..-3892
|
||||
on x=-64308..-43967,y=-33788..-28512,z=52866..68806
|
||||
on x=-70700..-50756,y=31972..50876,z=-38908..-15838
|
||||
off x=-57164..-42932,y=19342..48612,z=33732..55624
|
||||
on x=-36748..-10589,y=51955..83318,z=-48442..-26669
|
||||
on x=25359..40927,y=-79085..-59846,z=8036..36888
|
||||
off x=10380..14539,y=71572..87896,z=-24628..-4781
|
||||
off x=-47176..-28461,y=65456..67163,z=-40894..-16836
|
||||
off x=-18332..8399,y=47821..71986,z=26668..47522
|
||||
on x=-20965..-9481,y=-20308..4897,z=-95419..-57801
|
||||
off x=31539..51751,y=35462..53163,z=-57494..-42838
|
||||
off x=-18472..1572,y=75988..93471,z=-26864..1039
|
||||
on x=-70785..-33731,y=-73997..-43660,z=-23224..9946
|
||||
on x=19380..37078,y=53776..78064,z=-31936..-10509
|
||||
on x=-8062..-2825,y=-82342..-69826,z=-13266..3969
|
||||
off x=10179..29342,y=31007..48598,z=64959..69127
|
||||
off x=-60805..-32266,y=43431..69404,z=8577..28595
|
||||
off x=-22720..-3203,y=60404..66611,z=34857..59638
|
||||
off x=-53582..-38618,y=52017..73240,z=27473..42769
|
||||
off x=-72814..-66689,y=-45388..-21812,z=-14516..3856
|
||||
on x=-73641..-69708,y=-15500..7339,z=-39764..-29382
|
||||
off x=-4677..17044,y=-91970..-68336,z=-5685..15742
|
||||
on x=11739..24073,y=35242..45244,z=-80024..-60736
|
||||
on x=64670..76998,y=26199..39053,z=-15372..11264
|
||||
on x=32930..62408,y=7820..14870,z=-84786..-50274
|
||||
off x=1793..28795,y=19984..43135,z=67050..87662
|
||||
on x=62730..81556,y=-59681..-32462,z=-9119..17314
|
||||
off x=51211..84860,y=-10649..27833,z=33629..61327
|
||||
on x=4877..24218,y=58754..64225,z=-51294..-29252
|
||||
on x=-34998..-23262,y=-7791..15688,z=-77251..-73653
|
||||
on x=-8985..2565,y=-80674..-57237,z=31372..66054
|
||||
on x=26910..46858,y=-70174..-50719,z=-39433..-6303
|
||||
on x=-77313..-45494,y=-35534..-19783,z=-56939..-23493
|
||||
off x=-86093..-58555,y=-10764..-7163,z=32984..39939
|
||||
off x=22629..45516,y=56413..69690,z=23879..45264
|
||||
off x=6426..22257,y=-81295..-58682,z=-4833..30396
|
||||
on x=-20499..-623,y=68725..85089,z=-3165..16088
|
||||
on x=-22113..-8769,y=50723..69731,z=35423..63761
|
||||
off x=17927..28889,y=66820..87168,z=7146..17344
|
||||
on x=-51150..-32434,y=4434..29601,z=-87179..-50635
|
||||
on x=44312..65806,y=-17376..-4824,z=-60807..-46664
|
||||
off x=-74021..-63274,y=18155..23737,z=23087..44175
|
||||
on x=53142..78645,y=11091..24149,z=-33898..-15733
|
||||
on x=-89734..-59095,y=5415..39645,z=-30819..-14415
|
||||
off x=-3526..9687,y=44579..60215,z=-61672..-41733
|
||||
off x=73321..97678,y=7224..33092,z=-23526..-6480
|
||||
on x=-38319..-18652,y=-94091..-57143,z=-27008..-10399
|
||||
off x=-39624..-25656,y=-27151..-17149,z=62826..73496
|
||||
off x=11777..31489,y=27498..41343,z=-66823..-64400
|
||||
off x=-86379..-57406,y=1305..22612,z=-19292..-12364
|
||||
off x=46778..72347,y=-30615..-14497,z=-57631..-38999
|
||||
off x=11620..35158,y=60858..89766,z=3059..17854
|
||||
off x=12508..29190,y=-69508..-58455,z=23048..41891
|
||||
on x=-18252..13098,y=36042..44460,z=50978..82816
|
||||
on x=-6496..13599,y=-32852..-21957,z=70926..82031
|
||||
on x=69343..93866,y=-13495..12902,z=20150..37520
|
||||
on x=14399..46141,y=-16440..-4786,z=64520..82073
|
||||
on x=34907..49197,y=-77417..-58364,z=7116..41283
|
||||
off x=-964..13645,y=-84374..-61091,z=5528..26680
|
||||
on x=17413..51768,y=18101..39773,z=59112..72097
|
||||
on x=-66173..-34985,y=-64364..-26681,z=-46312..-32514
|
||||
on x=4907..25817,y=-86293..-63574,z=20626..51969
|
||||
off x=25870..59523,y=34211..49946,z=40232..74133
|
||||
off x=-54230..-38453,y=30481..43869,z=-54591..-40302
|
||||
on x=-19584..11278,y=-61815..-44911,z=-59169..-54278
|
||||
off x=9524..37706,y=69604..90591,z=2047..19112
|
||||
off x=-55707..-36536,y=32805..48941,z=-69826..-44814
|
||||
off x=-47397..-26251,y=-45541..-17561,z=51498..63966
|
||||
on x=-26274..-8974,y=-11082..14341,z=-95770..-63704
|
||||
on x=63227..82757,y=-53349..-33869,z=6276..38367
|
||||
off x=-9009..17116,y=-1685..15956,z=-89391..-75291
|
||||
off x=-60467..-32934,y=-16532..8638,z=66520..73970
|
||||
on x=42282..63814,y=-52404..-29292,z=16300..39083
|
||||
on x=59807..76726,y=-59577..-30112,z=-6617..22740
|
||||
off x=-71581..-61332,y=-11793..7729,z=28377..51215
|
||||
off x=58949..86888,y=-38405..-857,z=-27434..-1959
|
||||
on x=-38039..-18664,y=-52842..-30904,z=-69197..-39328
|
||||
on x=34271..60705,y=-13427..9155,z=-86631..-62294
|
||||
on x=-47181..-37507,y=52951..66180,z=31932..41322
|
||||
on x=50153..80932,y=-4041..16916,z=32832..52829
|
||||
on x=-5561..25588,y=-10476..10520,z=78611..97383
|
||||
off x=-83214..-60530,y=-3562..17310,z=7405..28737
|
||||
on x=-60777..-54134,y=54086..73346,z=-11397..12806
|
||||
on x=8008..14420,y=-63596..-41593,z=-68526..-45673
|
||||
off x=24007..49083,y=-16462..-7045,z=57536..81481
|
||||
off x=-11681..3645,y=-58012..-41953,z=55142..76200
|
||||
off x=-76656..-52954,y=35846..55582,z=-53872..-34722
|
||||
on x=-12038..8659,y=-87346..-69918,z=28070..47940
|
||||
on x=-11947..10184,y=-53409..-34027,z=-72583..-47438
|
||||
off x=-55067..-35621,y=-69939..-60505,z=-14835..1042
|
||||
off x=32935..37139,y=-85226..-70552,z=-25685..4412
|
||||
on x=-28948..-4652,y=36671..63289,z=-68708..-50580
|
||||
off x=11959..12834,y=37735..57272,z=-76650..-51945
|
||||
off x=-80869..-62027,y=-29135..1722,z=-41049..-20272
|
||||
off x=-16105..-9908,y=13813..43802,z=-91236..-73026
|
||||
on x=-49560..-40469,y=43630..61941,z=-52839..-35457
|
||||
off x=9147..25541,y=-80287..-59670,z=42741..55735
|
||||
off x=50379..79472,y=29160..49483,z=-5978..29107
|
||||
on x=-88412..-58603,y=-3423..3159,z=19531..41416
|
||||
off x=-1015..23656,y=53461..84876,z=27264..47816
|
||||
off x=-34955..-31932,y=56566..75983,z=-11994..10763
|
||||
off x=-33477..-1860,y=19104..24306,z=-77651..-71897
|
||||
on x=-73047..-48583,y=28931..56704,z=23154..30012
|
||||
off x=70083..72794,y=-5597..15786,z=-51791..-23271
|
||||
on x=28989..57370,y=40583..60178,z=-62971..-45863
|
||||
on x=55125..91706,y=-15559..4561,z=15786..49181
|
||||
off x=-24690..-3730,y=59694..97039,z=724..22523
|
||||
on x=50442..59532,y=-34136..-13939,z=-73167..-41283
|
||||
on x=-42457..-22829,y=28486..55735,z=-61093..-54803
|
||||
off x=59374..88933,y=-35520..-16575,z=21065..24982
|
||||
off x=47891..77004,y=-55581..-33892,z=-24958..-20207
|
||||
on x=-39381..-6103,y=25106..44027,z=51236..84981
|
||||
off x=53027..72033,y=-66349..-40215,z=-1886..6465
|
||||
off x=-16688..3581,y=-13126..2347,z=-92211..-65235
|
||||
on x=-42613..-26870,y=-29924..-12291,z=-67035..-61494
|
||||
off x=63092..79122,y=988..21133,z=-16953..3867
|
||||
off x=-67216..-58011,y=-53495..-33034,z=-11608..-1856
|
||||
off x=53934..86965,y=-44444..-9436,z=16273..30447
|
||||
off x=-4034..19635,y=-54143..-37719,z=-78365..-41039
|
||||
on x=-34211..-14894,y=-25413..-719,z=56386..88338
|
||||
on x=-57326..-35994,y=-38049..-8173,z=-56649..-54035
|
||||
off x=30271..50936,y=-87052..-56522,z=3300..32145
|
||||
on x=55833..75804,y=18495..43321,z=-27127..-11497
|
106
22.jl
Normal file
106
22.jl
Normal file
@ -0,0 +1,106 @@
|
||||
include("utils.jl")
|
||||
|
||||
function interval(coords)
|
||||
coords[1]:coords[2]
|
||||
end
|
||||
|
||||
function parse_input(filename)
|
||||
map(non_empty_lines(filename)) do line
|
||||
command, coords = split(line)
|
||||
coords = map(x->parse(Int, x.match), eachmatch(r"-?[0-9]+", coords))
|
||||
coords = [interval(sort(coords[1:2])),
|
||||
interval(sort(coords[3:4])),
|
||||
interval(sort(coords[5:6]))]
|
||||
command, coords
|
||||
end
|
||||
end
|
||||
|
||||
function ccontains(a, b)
|
||||
all(issubset.(a, b))
|
||||
end
|
||||
|
||||
function cempty(cube)
|
||||
reduce(min, length.(cube)) == 0
|
||||
end
|
||||
|
||||
function setdiffcubes(cube, subcube)
|
||||
above = [cube[1], cube[2], (subcube[3].stop+1):(cube[3].stop)]
|
||||
below = [cube[1], cube[2], (cube[3].start):(subcube[3].start-1)]
|
||||
far = [cube[1], (subcube[2].stop+1):(cube[2].stop), subcube[3]]
|
||||
near = [cube[1], (cube[2].start):(subcube[2].start-1), subcube[3]]
|
||||
right = [(subcube[1].stop+1):(cube[1].stop), subcube[2], subcube[3]]
|
||||
left = [(cube[1].start):(subcube[1].start-1), subcube[2], subcube[3]]
|
||||
|
||||
filter(c->!cempty(c), [above, below, far, near, right, left])
|
||||
end
|
||||
|
||||
function add_cube(cubes, cube)
|
||||
if length(cubes) == 0
|
||||
return [cube]
|
||||
end
|
||||
|
||||
if any(map(c->ccontains(cube, c), cubes))
|
||||
return cubes
|
||||
end
|
||||
cubes = filter(c->!ccontains(c, cube), cubes)
|
||||
|
||||
result = [cube]
|
||||
for c in cubes
|
||||
inter = intersect.(c, cube)
|
||||
if cempty(inter)
|
||||
push!(result, c)
|
||||
else
|
||||
append!(result, setdiffcubes(c, inter))
|
||||
end
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
function remove_cube(cubes, cube)
|
||||
if length(cubes) == 0
|
||||
return []
|
||||
end
|
||||
result = []
|
||||
for c in cubes
|
||||
if ccontains(c, cube)
|
||||
continue
|
||||
end
|
||||
inter = intersect.(c, cube)
|
||||
if cempty(inter)
|
||||
push!(result, c)
|
||||
continue
|
||||
end
|
||||
append!(result, setdiffcubes(c, inter))
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
function magnitude(cube)
|
||||
reduce(*, length.(cube))
|
||||
end
|
||||
|
||||
function run(filter=nothing)
|
||||
cubes = []
|
||||
for (command, coords) in parse_input("22.data")
|
||||
if typeof(filter) == Int64 && reduce(max, map(x->reduce(max, abs.(x)), coords)) > filter
|
||||
continue
|
||||
end
|
||||
if command == "on"
|
||||
cubes = add_cube(cubes, coords)
|
||||
else
|
||||
cubes = remove_cube(cubes, coords)
|
||||
end
|
||||
end
|
||||
sum(map(magnitude, cubes))
|
||||
end
|
||||
|
||||
|
||||
function solution22_1()
|
||||
run(50)
|
||||
end
|
||||
|
||||
function solution22_2()
|
||||
run()
|
||||
end
|
||||
|
||||
solution22_1(), solution22_2()
|
4
22_ex.data
Normal file
4
22_ex.data
Normal file
@ -0,0 +1,4 @@
|
||||
on x=10..12,y=10..12,z=10..12
|
||||
on x=11..13,y=11..13,z=11..13
|
||||
off x=9..11,y=9..11,z=9..11
|
||||
on x=10..10,y=10..10,z=10..10
|
22
22_ex_2.data
Normal file
22
22_ex_2.data
Normal file
@ -0,0 +1,22 @@
|
||||
on x=-20..26,y=-36..17,z=-47..7
|
||||
on x=-20..33,y=-21..23,z=-26..28
|
||||
on x=-22..28,y=-29..23,z=-38..16
|
||||
on x=-46..7,y=-6..46,z=-50..-1
|
||||
on x=-49..1,y=-3..46,z=-24..28
|
||||
on x=2..47,y=-22..22,z=-23..27
|
||||
on x=-27..23,y=-28..26,z=-21..29
|
||||
on x=-39..5,y=-6..47,z=-3..44
|
||||
on x=-30..21,y=-8..43,z=-13..34
|
||||
on x=-22..26,y=-27..20,z=-29..19
|
||||
off x=-48..-32,y=26..41,z=-47..-37
|
||||
on x=-12..35,y=6..50,z=-50..-2
|
||||
off x=-48..-32,y=-32..-16,z=-15..-5
|
||||
on x=-18..26,y=-33..15,z=-7..46
|
||||
off x=-40..-22,y=-38..-28,z=23..41
|
||||
on x=-16..35,y=-41..10,z=-47..6
|
||||
off x=-32..-23,y=11..30,z=-14..3
|
||||
on x=-49..-5,y=-3..45,z=-29..18
|
||||
off x=18..30,y=-20..-8,z=-3..13
|
||||
on x=-41..9,y=-7..43,z=-33..15
|
||||
on x=-54112..-39298,y=-85059..-49293,z=-27449..7877
|
||||
on x=967..23432,y=45373..81175,z=27513..53682
|
60
22_ex_3.data
Normal file
60
22_ex_3.data
Normal file
@ -0,0 +1,60 @@
|
||||
on x=-5..47,y=-31..22,z=-19..33
|
||||
on x=-44..5,y=-27..21,z=-14..35
|
||||
on x=-49..-1,y=-11..42,z=-10..38
|
||||
on x=-20..34,y=-40..6,z=-44..1
|
||||
off x=26..39,y=40..50,z=-2..11
|
||||
on x=-41..5,y=-41..6,z=-36..8
|
||||
off x=-43..-33,y=-45..-28,z=7..25
|
||||
on x=-33..15,y=-32..19,z=-34..11
|
||||
off x=35..47,y=-46..-34,z=-11..5
|
||||
on x=-14..36,y=-6..44,z=-16..29
|
||||
on x=-57795..-6158,y=29564..72030,z=20435..90618
|
||||
on x=36731..105352,y=-21140..28532,z=16094..90401
|
||||
on x=30999..107136,y=-53464..15513,z=8553..71215
|
||||
on x=13528..83982,y=-99403..-27377,z=-24141..23996
|
||||
on x=-72682..-12347,y=18159..111354,z=7391..80950
|
||||
on x=-1060..80757,y=-65301..-20884,z=-103788..-16709
|
||||
on x=-83015..-9461,y=-72160..-8347,z=-81239..-26856
|
||||
on x=-52752..22273,y=-49450..9096,z=54442..119054
|
||||
on x=-29982..40483,y=-108474..-28371,z=-24328..38471
|
||||
on x=-4958..62750,y=40422..118853,z=-7672..65583
|
||||
on x=55694..108686,y=-43367..46958,z=-26781..48729
|
||||
on x=-98497..-18186,y=-63569..3412,z=1232..88485
|
||||
on x=-726..56291,y=-62629..13224,z=18033..85226
|
||||
on x=-110886..-34664,y=-81338..-8658,z=8914..63723
|
||||
on x=-55829..24974,y=-16897..54165,z=-121762..-28058
|
||||
on x=-65152..-11147,y=22489..91432,z=-58782..1780
|
||||
on x=-120100..-32970,y=-46592..27473,z=-11695..61039
|
||||
on x=-18631..37533,y=-124565..-50804,z=-35667..28308
|
||||
on x=-57817..18248,y=49321..117703,z=5745..55881
|
||||
on x=14781..98692,y=-1341..70827,z=15753..70151
|
||||
on x=-34419..55919,y=-19626..40991,z=39015..114138
|
||||
on x=-60785..11593,y=-56135..2999,z=-95368..-26915
|
||||
on x=-32178..58085,y=17647..101866,z=-91405..-8878
|
||||
on x=-53655..12091,y=50097..105568,z=-75335..-4862
|
||||
on x=-111166..-40997,y=-71714..2688,z=5609..50954
|
||||
on x=-16602..70118,y=-98693..-44401,z=5197..76897
|
||||
on x=16383..101554,y=4615..83635,z=-44907..18747
|
||||
off x=-95822..-15171,y=-19987..48940,z=10804..104439
|
||||
on x=-89813..-14614,y=16069..88491,z=-3297..45228
|
||||
on x=41075..99376,y=-20427..49978,z=-52012..13762
|
||||
on x=-21330..50085,y=-17944..62733,z=-112280..-30197
|
||||
on x=-16478..35915,y=36008..118594,z=-7885..47086
|
||||
off x=-98156..-27851,y=-49952..43171,z=-99005..-8456
|
||||
off x=2032..69770,y=-71013..4824,z=7471..94418
|
||||
on x=43670..120875,y=-42068..12382,z=-24787..38892
|
||||
off x=37514..111226,y=-45862..25743,z=-16714..54663
|
||||
off x=25699..97951,y=-30668..59918,z=-15349..69697
|
||||
off x=-44271..17935,y=-9516..60759,z=49131..112598
|
||||
on x=-61695..-5813,y=40978..94975,z=8655..80240
|
||||
off x=-101086..-9439,y=-7088..67543,z=33935..83858
|
||||
off x=18020..114017,y=-48931..32606,z=21474..89843
|
||||
off x=-77139..10506,y=-89994..-18797,z=-80..59318
|
||||
off x=8476..79288,y=-75520..11602,z=-96624..-24783
|
||||
on x=-47488..-1262,y=24338..100707,z=16292..72967
|
||||
off x=-84341..13987,y=2429..92914,z=-90671..-1318
|
||||
off x=-37810..49457,y=-71013..-7894,z=-105357..-13188
|
||||
off x=-27365..46395,y=31009..98017,z=15428..76570
|
||||
off x=-70369..-16548,y=22648..78696,z=-1892..86821
|
||||
on x=-53470..21291,y=-120233..-33476,z=-44150..38147
|
||||
off x=-93533..-4276,y=-16170..68771,z=-104985..-24507
|
61
3.jl
Normal file
61
3.jl
Normal file
@ -0,0 +1,61 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
input_lines = collect(non_empty_lines(filename))
|
||||
width = length(input_lines[1])
|
||||
integers = map(x->parse(Int, x, base = 2), input_lines)
|
||||
(integers, width)
|
||||
end
|
||||
|
||||
function most_common_bit(integers, width)
|
||||
score = zeros(Int, width)
|
||||
for int in integers
|
||||
for index in 1:width
|
||||
score[index] += ((int >> (index-1) & 1) - 0.5) * 2
|
||||
end
|
||||
end
|
||||
map(map(sign, score)) do x
|
||||
if x == 0
|
||||
1
|
||||
else
|
||||
x
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function solution3_1()
|
||||
integers, width = parse_input("3.data")
|
||||
|
||||
score = most_common_bit(integers, width)
|
||||
|
||||
result = 0
|
||||
cresult = 0
|
||||
for i in 1:width
|
||||
result += ((score[i] + 1) >> 1) << (i - 1)
|
||||
cresult += (((score[i] * -1) + 1) >> 1) << (i - 1)
|
||||
end
|
||||
(result, cresult, result * cresult)
|
||||
end
|
||||
|
||||
function filterdata(integers, width, score_factor)
|
||||
ints = copy(integers)
|
||||
for i in reverse(1:width)
|
||||
score = most_common_bit(ints, width) * score_factor
|
||||
ints = filter(ints) do x
|
||||
(x & (1 << (i - 1))) >> (i - 1) == (score[i] + 1) >> 1
|
||||
end
|
||||
if length(ints) == 1
|
||||
break
|
||||
end
|
||||
end
|
||||
ints[1]
|
||||
end
|
||||
|
||||
function solution3_2()
|
||||
integers, width = parse_input("3.data")
|
||||
oxy = filterdata(integers, width, 1)
|
||||
co2 = filterdata(integers, width, -1)
|
||||
(oxy, co2, oxy * co2)
|
||||
end
|
||||
|
||||
solution3_2()
|
12
3_ex.data
Normal file
12
3_ex.data
Normal file
@ -0,0 +1,12 @@
|
||||
00100
|
||||
11110
|
||||
10110
|
||||
10111
|
||||
10101
|
||||
01111
|
||||
00111
|
||||
11100
|
||||
10000
|
||||
11001
|
||||
00010
|
||||
01010
|
601
4.data
Normal file
601
4.data
Normal file
@ -0,0 +1,601 @@
|
||||
31,50,79,59,39,53,58,95,92,55,40,97,81,22,69,26,6,23,3,29,83,48,18,75,47,49,62,45,35,34,1,88,54,16,56,77,28,94,52,15,0,87,93,90,60,67,68,85,80,51,20,96,61,66,63,91,8,99,70,13,71,17,7,38,44,43,5,25,72,2,57,33,82,78,89,21,30,11,73,84,4,46,14,19,12,10,42,32,64,98,9,74,86,27,24,65,37,41,76,36
|
||||
|
||||
31 5 70 8 88
|
||||
38 63 14 91 56
|
||||
22 67 17 47 74
|
||||
93 52 69 29 53
|
||||
33 66 64 19 73
|
||||
|
||||
35 63 17 48 77
|
||||
25 58 33 14 96
|
||||
32 87 90 66 70
|
||||
16 4 98 72 23
|
||||
19 74 39 29 59
|
||||
|
||||
40 29 44 17 27
|
||||
56 98 83 62 70
|
||||
25 91 20 60 84
|
||||
42 66 34 77 31
|
||||
16 8 6 50 28
|
||||
|
||||
13 6 58 39 74
|
||||
3 15 69 5 23
|
||||
81 65 0 85 93
|
||||
72 7 60 42 52
|
||||
45 64 47 53 67
|
||||
|
||||
94 21 67 0 14
|
||||
2 75 77 15 78
|
||||
38 25 49 99 92
|
||||
76 35 69 4 64
|
||||
42 96 86 84 70
|
||||
|
||||
46 7 74 65 80
|
||||
99 12 4 38 77
|
||||
30 90 78 94 21
|
||||
22 15 72 52 57
|
||||
11 67 59 3 9
|
||||
|
||||
18 17 63 53 96
|
||||
16 76 55 5 92
|
||||
33 82 60 51 8
|
||||
29 99 87 95 58
|
||||
88 15 75 61 21
|
||||
|
||||
10 24 79 28 90
|
||||
64 43 21 48 99
|
||||
45 85 80 71 94
|
||||
68 39 57 50 72
|
||||
47 60 3 62 49
|
||||
|
||||
82 92 58 16 89
|
||||
76 90 74 61 29
|
||||
2 72 43 69 23
|
||||
84 38 0 4 55
|
||||
5 64 49 78 94
|
||||
|
||||
79 60 28 45 95
|
||||
47 2 93 89 77
|
||||
56 18 54 97 33
|
||||
55 91 68 58 90
|
||||
87 37 88 35 10
|
||||
|
||||
42 76 25 15 38
|
||||
6 34 33 88 30
|
||||
43 10 27 26 72
|
||||
78 66 62 14 37
|
||||
1 65 95 54 5
|
||||
|
||||
14 0 46 72 75
|
||||
83 2 62 76 26
|
||||
65 85 19 18 95
|
||||
57 45 87 51 29
|
||||
32 37 61 34 43
|
||||
|
||||
9 75 56 60 50
|
||||
53 81 41 55 11
|
||||
86 54 29 85 2
|
||||
92 6 97 46 84
|
||||
5 0 70 3 82
|
||||
|
||||
3 15 61 94 85
|
||||
62 7 12 10 45
|
||||
84 66 18 33 86
|
||||
91 19 11 22 39
|
||||
57 16 80 26 9
|
||||
|
||||
1 69 46 98 61
|
||||
19 7 63 56 90
|
||||
9 3 66 38 73
|
||||
40 49 72 0 94
|
||||
42 23 75 89 32
|
||||
|
||||
33 59 17 15 86
|
||||
62 96 84 2 18
|
||||
27 63 55 3 82
|
||||
0 89 19 73 24
|
||||
56 93 12 87 41
|
||||
|
||||
31 56 33 3 9
|
||||
55 52 87 57 30
|
||||
44 89 6 5 65
|
||||
15 53 62 51 11
|
||||
61 35 13 4 46
|
||||
|
||||
15 84 95 88 65
|
||||
96 18 93 14 21
|
||||
49 40 46 1 30
|
||||
50 64 69 80 81
|
||||
3 19 87 9 38
|
||||
|
||||
71 68 18 81 41
|
||||
95 26 45 24 25
|
||||
42 73 62 36 94
|
||||
5 61 98 99 48
|
||||
31 55 8 1 88
|
||||
|
||||
0 73 19 12 4
|
||||
72 22 27 59 48
|
||||
71 26 28 66 37
|
||||
54 87 8 2 65
|
||||
20 60 35 32 29
|
||||
|
||||
44 41 93 76 47
|
||||
24 33 15 14 61
|
||||
78 49 81 67 52
|
||||
74 73 54 23 66
|
||||
75 10 18 3 60
|
||||
|
||||
94 95 52 23 10
|
||||
55 14 35 44 56
|
||||
0 49 50 60 79
|
||||
59 54 90 67 46
|
||||
17 81 4 37 58
|
||||
|
||||
38 29 8 79 77
|
||||
91 98 1 68 30
|
||||
86 13 95 46 61
|
||||
55 36 90 42 97
|
||||
69 7 0 93 27
|
||||
|
||||
82 5 67 40 3
|
||||
61 16 56 68 29
|
||||
55 20 13 15 0
|
||||
75 28 45 17 77
|
||||
86 85 10 2 26
|
||||
|
||||
98 73 72 43 17
|
||||
32 41 56 46 76
|
||||
85 7 31 69 91
|
||||
86 21 37 40 82
|
||||
33 57 15 39 30
|
||||
|
||||
83 18 90 75 29
|
||||
17 73 32 88 50
|
||||
51 99 5 23 22
|
||||
60 47 35 42 2
|
||||
37 86 82 14 30
|
||||
|
||||
17 47 7 54 0
|
||||
65 83 33 11 57
|
||||
85 16 27 75 61
|
||||
60 90 44 69 81
|
||||
71 73 38 46 28
|
||||
|
||||
57 79 76 91 99
|
||||
96 20 13 34 52
|
||||
0 21 5 47 63
|
||||
60 62 55 29 71
|
||||
44 59 58 78 65
|
||||
|
||||
83 30 7 1 80
|
||||
90 2 11 41 92
|
||||
3 27 33 10 78
|
||||
63 75 0 38 86
|
||||
96 76 87 67 6
|
||||
|
||||
63 19 42 56 12
|
||||
35 89 87 13 81
|
||||
21 23 4 16 11
|
||||
64 78 25 92 33
|
||||
41 10 66 68 99
|
||||
|
||||
56 76 37 18 41
|
||||
38 27 17 50 14
|
||||
60 23 0 6 1
|
||||
9 8 30 93 44
|
||||
58 99 16 46 26
|
||||
|
||||
40 77 4 96 68
|
||||
55 21 30 24 76
|
||||
81 58 41 91 98
|
||||
56 46 20 78 0
|
||||
82 29 87 67 53
|
||||
|
||||
59 33 4 18 95
|
||||
2 52 54 96 19
|
||||
46 72 3 43 81
|
||||
20 97 87 55 53
|
||||
9 80 84 76 29
|
||||
|
||||
2 25 44 64 46
|
||||
93 35 17 84 67
|
||||
14 48 21 73 90
|
||||
89 62 53 54 52
|
||||
38 59 69 45 50
|
||||
|
||||
71 96 56 57 72
|
||||
47 39 25 15 90
|
||||
29 65 44 3 83
|
||||
36 30 92 59 95
|
||||
97 86 48 74 94
|
||||
|
||||
51 91 75 25 28
|
||||
72 56 9 21 93
|
||||
88 32 58 24 37
|
||||
82 48 95 53 23
|
||||
68 20 43 84 69
|
||||
|
||||
68 75 33 39 96
|
||||
0 65 45 27 53
|
||||
36 71 2 91 97
|
||||
10 82 44 41 7
|
||||
11 42 17 26 14
|
||||
|
||||
61 36 56 6 64
|
||||
72 10 62 77 21
|
||||
99 73 37 38 25
|
||||
60 7 44 43 14
|
||||
81 59 29 19 92
|
||||
|
||||
63 49 13 31 56
|
||||
59 76 62 83 44
|
||||
69 24 57 40 91
|
||||
20 41 2 55 9
|
||||
50 60 46 15 52
|
||||
|
||||
87 90 97 53 23
|
||||
85 67 7 71 98
|
||||
1 22 48 82 69
|
||||
15 21 17 91 80
|
||||
99 57 28 94 79
|
||||
|
||||
24 25 44 95 99
|
||||
55 97 9 18 27
|
||||
71 37 13 52 39
|
||||
30 3 79 14 28
|
||||
81 62 98 22 31
|
||||
|
||||
49 90 17 65 4
|
||||
59 42 15 14 54
|
||||
91 55 67 58 8
|
||||
13 61 79 32 99
|
||||
92 28 16 72 20
|
||||
|
||||
73 47 39 94 45
|
||||
93 53 95 71 27
|
||||
66 40 65 37 58
|
||||
15 61 63 50 55
|
||||
57 8 99 90 85
|
||||
|
||||
6 45 79 9 14
|
||||
82 12 42 38 15
|
||||
31 71 48 5 96
|
||||
35 81 25 63 19
|
||||
2 90 64 22 33
|
||||
|
||||
62 56 60 29 63
|
||||
47 33 75 77 76
|
||||
86 7 90 34 46
|
||||
85 3 0 16 65
|
||||
71 44 11 40 52
|
||||
|
||||
18 19 73 67 64
|
||||
66 85 37 10 51
|
||||
62 46 11 40 35
|
||||
83 69 57 1 78
|
||||
81 48 36 6 22
|
||||
|
||||
99 0 41 81 52
|
||||
68 31 27 30 5
|
||||
12 62 54 43 50
|
||||
58 36 10 55 86
|
||||
61 69 97 22 49
|
||||
|
||||
59 18 91 86 90
|
||||
87 20 57 61 42
|
||||
15 99 31 32 73
|
||||
23 89 64 96 49
|
||||
79 47 97 19 51
|
||||
|
||||
17 46 19 20 58
|
||||
67 29 4 8 22
|
||||
52 18 13 34 70
|
||||
82 73 71 95 47
|
||||
35 28 33 42 62
|
||||
|
||||
15 16 78 99 74
|
||||
61 81 84 72 69
|
||||
12 11 17 62 94
|
||||
76 63 96 42 98
|
||||
89 64 10 32 18
|
||||
|
||||
18 21 63 89 14
|
||||
95 5 79 19 11
|
||||
29 82 77 59 90
|
||||
13 3 31 46 45
|
||||
80 37 97 78 61
|
||||
|
||||
75 9 94 11 80
|
||||
93 27 10 2 82
|
||||
89 32 64 52 60
|
||||
42 56 23 20 18
|
||||
70 78 45 76 40
|
||||
|
||||
16 98 0 94 73
|
||||
28 13 48 90 11
|
||||
30 43 20 9 78
|
||||
14 39 89 4 6
|
||||
15 63 91 45 37
|
||||
|
||||
41 55 44 2 39
|
||||
38 14 19 72 64
|
||||
75 95 35 6 47
|
||||
70 7 1 29 86
|
||||
83 79 90 96 82
|
||||
|
||||
32 29 42 60 3
|
||||
85 93 16 41 35
|
||||
11 90 46 13 58
|
||||
26 19 79 30 86
|
||||
72 56 63 18 95
|
||||
|
||||
25 71 26 35 59
|
||||
80 21 11 24 87
|
||||
48 29 64 66 34
|
||||
74 83 84 60 57
|
||||
44 30 95 20 32
|
||||
|
||||
29 60 31 2 7
|
||||
51 78 32 45 14
|
||||
70 6 59 33 81
|
||||
16 26 11 38 88
|
||||
49 74 39 46 3
|
||||
|
||||
58 91 95 21 47
|
||||
61 52 30 2 96
|
||||
83 19 89 9 1
|
||||
41 64 28 23 11
|
||||
62 55 43 60 53
|
||||
|
||||
81 15 33 4 19
|
||||
51 97 88 70 13
|
||||
76 38 58 28 82
|
||||
67 3 6 22 47
|
||||
57 41 53 31 79
|
||||
|
||||
29 42 12 64 86
|
||||
23 0 14 28 82
|
||||
99 63 79 9 17
|
||||
75 73 3 45 1
|
||||
93 52 43 54 76
|
||||
|
||||
15 70 19 3 44
|
||||
47 60 46 93 59
|
||||
16 87 41 30 68
|
||||
88 9 26 45 43
|
||||
28 49 73 98 78
|
||||
|
||||
57 30 65 22 25
|
||||
99 21 36 47 11
|
||||
70 83 31 73 16
|
||||
61 77 94 93 23
|
||||
91 26 13 87 63
|
||||
|
||||
13 58 63 4 82
|
||||
5 89 11 39 51
|
||||
12 43 75 97 8
|
||||
15 56 21 0 74
|
||||
23 66 62 70 44
|
||||
|
||||
37 25 82 80 86
|
||||
58 89 30 91 38
|
||||
75 40 87 50 67
|
||||
78 4 55 0 39
|
||||
54 64 52 96 45
|
||||
|
||||
61 57 42 74 26
|
||||
88 48 8 13 70
|
||||
81 69 7 97 10
|
||||
16 23 18 55 36
|
||||
11 46 68 39 27
|
||||
|
||||
37 85 59 41 2
|
||||
3 29 91 87 84
|
||||
65 18 70 78 12
|
||||
9 80 97 19 24
|
||||
1 75 58 13 92
|
||||
|
||||
62 8 80 34 86
|
||||
72 6 40 57 3
|
||||
85 82 48 84 37
|
||||
79 29 70 21 96
|
||||
41 5 33 32 94
|
||||
|
||||
58 21 50 7 72
|
||||
34 71 93 35 90
|
||||
77 43 79 55 88
|
||||
57 12 45 95 70
|
||||
38 9 29 37 52
|
||||
|
||||
57 26 2 22 98
|
||||
87 4 53 17 97
|
||||
75 25 70 62 93
|
||||
3 9 86 33 28
|
||||
58 50 72 27 5
|
||||
|
||||
16 15 71 64 94
|
||||
37 56 84 32 7
|
||||
54 99 73 20 8
|
||||
60 19 22 70 27
|
||||
69 83 79 48 77
|
||||
|
||||
94 38 0 31 19
|
||||
43 58 22 93 84
|
||||
2 88 56 13 50
|
||||
90 68 46 95 47
|
||||
32 59 89 42 69
|
||||
|
||||
94 60 26 63 86
|
||||
21 64 81 47 71
|
||||
36 32 93 20 67
|
||||
16 10 68 39 74
|
||||
75 99 82 27 18
|
||||
|
||||
24 31 35 82 18
|
||||
49 16 98 90 26
|
||||
8 64 25 87 92
|
||||
54 76 2 22 15
|
||||
7 50 44 94 68
|
||||
|
||||
1 31 72 28 18
|
||||
76 93 20 4 16
|
||||
35 54 49 30 10
|
||||
59 32 53 62 84
|
||||
99 52 92 75 25
|
||||
|
||||
1 75 51 22 90
|
||||
61 83 58 63 28
|
||||
9 5 85 43 92
|
||||
69 8 62 93 48
|
||||
84 31 21 82 78
|
||||
|
||||
99 6 70 73 75
|
||||
65 53 29 31 16
|
||||
78 61 37 90 7
|
||||
54 64 20 35 4
|
||||
97 44 1 10 3
|
||||
|
||||
73 50 53 24 49
|
||||
15 56 94 82 39
|
||||
31 40 65 79 44
|
||||
92 70 57 95 30
|
||||
21 74 55 3 64
|
||||
|
||||
44 42 78 31 37
|
||||
33 69 71 24 81
|
||||
12 7 23 8 30
|
||||
10 9 11 68 29
|
||||
93 28 94 63 87
|
||||
|
||||
87 53 75 85 0
|
||||
34 52 37 49 28
|
||||
11 72 2 86 62
|
||||
66 17 61 46 45
|
||||
13 96 18 99 29
|
||||
|
||||
50 76 71 10 92
|
||||
4 99 46 39 86
|
||||
23 94 12 73 40
|
||||
5 70 96 43 51
|
||||
55 61 67 18 15
|
||||
|
||||
51 88 97 58 33
|
||||
36 12 90 53 85
|
||||
86 5 42 6 2
|
||||
95 57 19 34 17
|
||||
26 1 77 78 20
|
||||
|
||||
61 17 79 97 10
|
||||
29 65 21 55 63
|
||||
19 88 74 62 6
|
||||
73 76 89 33 31
|
||||
50 30 12 22 39
|
||||
|
||||
18 94 15 17 26
|
||||
69 37 91 30 85
|
||||
13 67 25 84 58
|
||||
95 90 27 82 33
|
||||
20 56 62 4 65
|
||||
|
||||
58 19 17 83 89
|
||||
14 82 48 36 97
|
||||
5 46 20 50 57
|
||||
60 92 52 85 9
|
||||
95 34 31 53 73
|
||||
|
||||
89 47 3 15 21
|
||||
2 10 59 76 36
|
||||
5 24 14 30 72
|
||||
37 77 57 48 91
|
||||
16 9 73 94 26
|
||||
|
||||
62 1 32 85 9
|
||||
13 52 75 34 84
|
||||
93 24 95 51 90
|
||||
86 35 22 72 38
|
||||
0 46 96 88 7
|
||||
|
||||
67 80 84 34 4
|
||||
39 11 37 47 82
|
||||
29 63 57 86 77
|
||||
78 64 5 32 96
|
||||
38 69 55 87 50
|
||||
|
||||
91 26 89 87 54
|
||||
51 43 22 68 21
|
||||
74 62 88 38 53
|
||||
28 92 4 39 40
|
||||
96 97 73 72 29
|
||||
|
||||
40 83 35 5 91
|
||||
41 45 57 94 60
|
||||
61 31 59 47 95
|
||||
81 89 69 25 33
|
||||
3 36 15 93 27
|
||||
|
||||
19 49 37 14 48
|
||||
96 55 43 6 12
|
||||
22 21 50 47 75
|
||||
78 40 51 91 63
|
||||
59 87 28 93 86
|
||||
|
||||
86 44 3 54 17
|
||||
71 82 70 88 49
|
||||
14 43 63 76 15
|
||||
78 81 61 22 46
|
||||
84 65 9 29 83
|
||||
|
||||
15 28 5 45 29
|
||||
12 19 64 93 48
|
||||
83 40 7 99 74
|
||||
20 30 85 67 58
|
||||
22 21 59 76 18
|
||||
|
||||
42 1 46 8 62
|
||||
69 27 67 68 38
|
||||
88 35 83 14 84
|
||||
53 85 82 29 59
|
||||
61 73 39 74 99
|
||||
|
||||
38 32 50 9 74
|
||||
75 66 63 3 62
|
||||
68 15 17 98 6
|
||||
81 29 52 88 21
|
||||
58 2 87 96 56
|
||||
|
||||
49 12 26 89 98
|
||||
92 69 90 50 35
|
||||
74 40 0 87 48
|
||||
19 47 65 42 31
|
||||
17 3 33 28 85
|
||||
|
||||
47 64 43 73 81
|
||||
32 49 65 42 24
|
||||
95 93 36 78 62
|
||||
34 96 79 10 4
|
||||
39 54 15 17 51
|
||||
|
||||
53 32 41 16 95
|
||||
54 47 56 69 17
|
||||
31 0 42 66 13
|
||||
88 9 43 38 79
|
||||
21 8 19 98 92
|
||||
|
||||
78 43 38 75 14
|
||||
36 62 64 45 53
|
||||
31 96 16 46 44
|
||||
93 11 57 56 65
|
||||
27 3 73 74 68
|
||||
|
||||
66 23 39 13 58
|
||||
40 85 68 50 57
|
||||
97 37 77 28 83
|
||||
48 29 51 84 91
|
||||
95 1 70 78 56
|
||||
|
||||
51 74 68 89 91
|
||||
49 54 8 83 36
|
||||
86 65 99 28 47
|
||||
82 57 32 81 58
|
||||
13 66 3 94 67
|
83
4.jl
Normal file
83
4.jl
Normal file
@ -0,0 +1,83 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_boards(lines)
|
||||
num_boards = div(length(lines),5)
|
||||
boards = Array{Array{Int}}(undef, num_boards)
|
||||
for i in 1:num_boards
|
||||
boards[i] = zeros(5, 5)
|
||||
for li in 1:5
|
||||
values = map(x->parse(Int, x), split(lines[(i - 1)*5+li]))
|
||||
boards[i][li,:] .= values
|
||||
end
|
||||
end
|
||||
boards
|
||||
end
|
||||
|
||||
function parse_input(filename)
|
||||
lines = Iterators.Stateful(non_empty_lines(filename))
|
||||
numbers = map(x->parse(Int, x), split(popfirst!(lines), ","))
|
||||
boards = parse_boards(collect(lines))
|
||||
numbers, boards
|
||||
end
|
||||
|
||||
function apply(number, boards)
|
||||
for board in boards
|
||||
for i in CartesianIndices((1:5, 1:5))
|
||||
if board[i] == number
|
||||
board[i] = -1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function check(boards)
|
||||
for board in boards
|
||||
for i in 1:5
|
||||
if (reduce(+, board[i,:]) == -5) || (reduce(+, board[:,i]) == -5)
|
||||
return true, board
|
||||
end
|
||||
end
|
||||
end
|
||||
false, nothing
|
||||
end
|
||||
|
||||
function solution4_1()
|
||||
numbers, boards = parse_input("4.data")
|
||||
for number in numbers
|
||||
apply(number, boards)
|
||||
winning, board = check(boards)
|
||||
if winning
|
||||
score = reduce(+, filter(>(0), board))
|
||||
return (score, number, score * number)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function remove_winning_boards(boards)
|
||||
last = nothing
|
||||
filtered = filter(boards) do board
|
||||
for i in 1:5
|
||||
if (reduce(+, board[i,:]) == -5) || (reduce(+, board[:,i]) == -5)
|
||||
last = board
|
||||
return false
|
||||
end
|
||||
end
|
||||
true
|
||||
end
|
||||
filtered, last
|
||||
end
|
||||
|
||||
|
||||
function solution4_2()
|
||||
numbers, boards = parse_input("4.data")
|
||||
for number in numbers
|
||||
apply(number, boards)
|
||||
boards, board = remove_winning_boards(boards)
|
||||
if length(boards) == 0
|
||||
score = reduce(+, filter(>(0), board))
|
||||
return (score, number, score * number)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
solution4_2()
|
19
4_ex.data
Normal file
19
4_ex.data
Normal file
@ -0,0 +1,19 @@
|
||||
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
|
||||
|
||||
22 13 17 11 0
|
||||
8 2 23 4 24
|
||||
21 9 14 16 7
|
||||
6 10 3 18 5
|
||||
1 12 20 15 19
|
||||
|
||||
3 15 0 2 22
|
||||
9 18 13 17 5
|
||||
19 8 7 25 23
|
||||
20 11 10 24 4
|
||||
14 21 16 12 6
|
||||
|
||||
14 21 17 24 4
|
||||
10 16 15 9 19
|
||||
18 8 23 26 20
|
||||
22 11 13 6 5
|
||||
2 0 12 3 7
|
500
5.data
Normal file
500
5.data
Normal file
@ -0,0 +1,500 @@
|
||||
427,523 -> 427,790
|
||||
94,639 -> 94,951
|
||||
757,371 -> 465,663
|
||||
503,935 -> 503,148
|
||||
655,565 -> 655,951
|
||||
167,754 -> 710,211
|
||||
634,433 -> 245,433
|
||||
449,889 -> 449,509
|
||||
152,753 -> 207,808
|
||||
301,90 -> 301,982
|
||||
566,405 -> 482,405
|
||||
758,741 -> 847,652
|
||||
342,686 -> 921,107
|
||||
741,317 -> 741,533
|
||||
976,917 -> 976,664
|
||||
273,272 -> 273,899
|
||||
326,616 -> 326,478
|
||||
483,906 -> 391,814
|
||||
20,165 -> 20,349
|
||||
860,533 -> 860,137
|
||||
846,834 -> 846,610
|
||||
155,923 -> 241,923
|
||||
989,984 -> 17,12
|
||||
711,681 -> 82,52
|
||||
312,788 -> 312,281
|
||||
319,746 -> 892,746
|
||||
568,555 -> 757,555
|
||||
659,450 -> 940,450
|
||||
870,260 -> 870,487
|
||||
110,794 -> 604,794
|
||||
509,141 -> 509,99
|
||||
29,68 -> 29,713
|
||||
340,688 -> 820,688
|
||||
428,46 -> 902,520
|
||||
539,525 -> 539,210
|
||||
181,822 -> 806,822
|
||||
551,338 -> 551,79
|
||||
894,542 -> 894,151
|
||||
700,625 -> 700,60
|
||||
143,736 -> 143,770
|
||||
810,975 -> 54,219
|
||||
44,373 -> 44,514
|
||||
849,794 -> 120,794
|
||||
347,690 -> 97,440
|
||||
10,625 -> 57,625
|
||||
541,202 -> 799,202
|
||||
375,491 -> 809,925
|
||||
271,474 -> 271,905
|
||||
980,825 -> 980,908
|
||||
600,751 -> 624,751
|
||||
120,978 -> 958,140
|
||||
262,916 -> 262,794
|
||||
399,350 -> 399,666
|
||||
623,270 -> 158,735
|
||||
585,792 -> 585,381
|
||||
168,34 -> 168,88
|
||||
256,806 -> 566,806
|
||||
196,397 -> 326,397
|
||||
583,677 -> 172,677
|
||||
45,242 -> 311,508
|
||||
530,469 -> 433,566
|
||||
46,101 -> 877,932
|
||||
607,655 -> 485,777
|
||||
773,672 -> 461,360
|
||||
340,30 -> 659,30
|
||||
846,952 -> 846,917
|
||||
457,700 -> 125,368
|
||||
571,656 -> 561,656
|
||||
251,30 -> 576,30
|
||||
79,197 -> 79,87
|
||||
518,51 -> 518,904
|
||||
916,802 -> 181,67
|
||||
23,626 -> 485,626
|
||||
956,106 -> 956,811
|
||||
849,384 -> 743,278
|
||||
893,153 -> 893,608
|
||||
17,989 -> 933,73
|
||||
701,119 -> 701,704
|
||||
494,580 -> 494,821
|
||||
605,740 -> 605,363
|
||||
823,58 -> 823,166
|
||||
250,363 -> 566,363
|
||||
418,178 -> 783,178
|
||||
273,82 -> 273,115
|
||||
545,489 -> 656,489
|
||||
468,671 -> 966,671
|
||||
376,744 -> 178,942
|
||||
62,728 -> 589,201
|
||||
588,150 -> 467,29
|
||||
202,664 -> 751,115
|
||||
519,547 -> 916,150
|
||||
803,483 -> 380,60
|
||||
599,459 -> 922,459
|
||||
162,680 -> 162,385
|
||||
823,94 -> 18,899
|
||||
802,734 -> 415,347
|
||||
115,964 -> 115,935
|
||||
749,595 -> 749,770
|
||||
229,64 -> 582,64
|
||||
103,496 -> 551,48
|
||||
137,581 -> 707,11
|
||||
501,563 -> 895,957
|
||||
59,222 -> 620,222
|
||||
874,249 -> 874,938
|
||||
201,927 -> 927,201
|
||||
630,619 -> 655,619
|
||||
666,331 -> 413,78
|
||||
517,650 -> 425,558
|
||||
803,256 -> 803,598
|
||||
303,460 -> 606,763
|
||||
124,975 -> 967,132
|
||||
867,528 -> 867,363
|
||||
239,140 -> 239,211
|
||||
975,779 -> 364,168
|
||||
971,49 -> 531,49
|
||||
408,932 -> 143,932
|
||||
927,663 -> 392,128
|
||||
497,246 -> 497,389
|
||||
849,935 -> 15,101
|
||||
582,517 -> 543,517
|
||||
410,85 -> 237,85
|
||||
292,316 -> 841,316
|
||||
753,708 -> 753,38
|
||||
266,328 -> 267,327
|
||||
789,980 -> 16,207
|
||||
514,963 -> 514,180
|
||||
865,532 -> 687,710
|
||||
544,620 -> 956,208
|
||||
132,287 -> 557,287
|
||||
268,710 -> 268,684
|
||||
234,746 -> 234,688
|
||||
51,906 -> 51,911
|
||||
191,159 -> 428,159
|
||||
834,956 -> 834,565
|
||||
916,242 -> 230,928
|
||||
227,789 -> 227,689
|
||||
206,767 -> 705,268
|
||||
291,403 -> 578,403
|
||||
35,890 -> 956,890
|
||||
185,618 -> 402,401
|
||||
989,858 -> 284,858
|
||||
391,284 -> 391,74
|
||||
717,158 -> 670,111
|
||||
188,146 -> 785,743
|
||||
602,696 -> 602,367
|
||||
975,972 -> 975,317
|
||||
146,301 -> 146,205
|
||||
328,215 -> 861,215
|
||||
15,653 -> 990,653
|
||||
48,101 -> 48,34
|
||||
929,547 -> 506,970
|
||||
901,519 -> 670,519
|
||||
801,560 -> 19,560
|
||||
953,829 -> 876,829
|
||||
856,317 -> 856,787
|
||||
618,171 -> 86,703
|
||||
823,622 -> 369,168
|
||||
209,291 -> 846,928
|
||||
944,601 -> 944,544
|
||||
678,223 -> 987,223
|
||||
893,143 -> 54,982
|
||||
30,740 -> 244,740
|
||||
974,974 -> 15,15
|
||||
497,557 -> 63,557
|
||||
846,193 -> 846,964
|
||||
83,119 -> 946,982
|
||||
864,179 -> 864,387
|
||||
583,312 -> 77,818
|
||||
612,154 -> 612,641
|
||||
487,136 -> 487,938
|
||||
502,611 -> 215,898
|
||||
648,978 -> 648,885
|
||||
373,372 -> 318,372
|
||||
582,988 -> 168,574
|
||||
453,261 -> 899,261
|
||||
467,578 -> 33,578
|
||||
876,138 -> 683,331
|
||||
708,248 -> 132,824
|
||||
686,56 -> 686,211
|
||||
687,964 -> 687,485
|
||||
626,76 -> 626,222
|
||||
630,176 -> 630,485
|
||||
968,608 -> 968,382
|
||||
943,69 -> 943,856
|
||||
173,344 -> 173,902
|
||||
193,918 -> 326,918
|
||||
811,748 -> 379,316
|
||||
484,941 -> 113,570
|
||||
277,635 -> 156,514
|
||||
770,573 -> 691,573
|
||||
37,475 -> 464,475
|
||||
720,856 -> 676,856
|
||||
988,13 -> 25,976
|
||||
414,74 -> 140,74
|
||||
169,158 -> 29,298
|
||||
611,910 -> 611,718
|
||||
851,161 -> 507,161
|
||||
76,969 -> 76,114
|
||||
270,243 -> 976,949
|
||||
375,607 -> 325,657
|
||||
738,450 -> 196,450
|
||||
153,776 -> 153,325
|
||||
862,123 -> 862,535
|
||||
705,933 -> 931,933
|
||||
900,26 -> 35,891
|
||||
870,66 -> 79,857
|
||||
815,569 -> 347,569
|
||||
950,290 -> 757,290
|
||||
719,446 -> 317,848
|
||||
243,531 -> 671,531
|
||||
320,807 -> 380,807
|
||||
221,984 -> 221,858
|
||||
832,308 -> 832,950
|
||||
522,694 -> 584,694
|
||||
412,48 -> 412,328
|
||||
898,690 -> 646,690
|
||||
602,191 -> 106,191
|
||||
58,961 -> 58,879
|
||||
177,413 -> 147,383
|
||||
48,159 -> 48,639
|
||||
18,935 -> 883,70
|
||||
26,68 -> 406,68
|
||||
579,73 -> 579,523
|
||||
975,825 -> 975,737
|
||||
390,125 -> 737,472
|
||||
127,179 -> 127,111
|
||||
506,557 -> 576,487
|
||||
161,210 -> 324,47
|
||||
524,165 -> 524,67
|
||||
938,790 -> 184,36
|
||||
302,431 -> 548,677
|
||||
559,363 -> 559,913
|
||||
936,10 -> 176,770
|
||||
828,976 -> 657,976
|
||||
864,14 -> 864,607
|
||||
28,46 -> 28,347
|
||||
732,742 -> 732,615
|
||||
91,712 -> 91,279
|
||||
982,884 -> 772,674
|
||||
917,47 -> 683,47
|
||||
631,697 -> 83,697
|
||||
463,413 -> 463,949
|
||||
719,348 -> 197,870
|
||||
980,25 -> 24,981
|
||||
64,608 -> 410,954
|
||||
103,882 -> 103,842
|
||||
279,10 -> 830,561
|
||||
409,573 -> 409,247
|
||||
673,291 -> 222,291
|
||||
315,143 -> 942,770
|
||||
216,89 -> 80,225
|
||||
134,936 -> 967,103
|
||||
387,566 -> 82,566
|
||||
282,259 -> 862,839
|
||||
930,225 -> 930,775
|
||||
460,370 -> 460,922
|
||||
276,254 -> 518,496
|
||||
647,881 -> 293,527
|
||||
983,977 -> 90,84
|
||||
336,836 -> 336,392
|
||||
96,888 -> 963,21
|
||||
42,47 -> 978,983
|
||||
923,280 -> 726,83
|
||||
311,486 -> 505,292
|
||||
496,637 -> 861,637
|
||||
575,438 -> 575,498
|
||||
228,754 -> 228,599
|
||||
965,963 -> 21,19
|
||||
834,171 -> 730,171
|
||||
497,234 -> 497,448
|
||||
977,970 -> 977,618
|
||||
335,422 -> 335,640
|
||||
931,954 -> 36,59
|
||||
140,966 -> 871,235
|
||||
352,88 -> 449,88
|
||||
631,332 -> 735,332
|
||||
765,823 -> 48,106
|
||||
496,685 -> 103,685
|
||||
89,416 -> 89,37
|
||||
121,544 -> 569,544
|
||||
643,712 -> 596,712
|
||||
662,656 -> 739,656
|
||||
42,386 -> 42,697
|
||||
959,875 -> 959,527
|
||||
874,967 -> 120,213
|
||||
962,649 -> 240,649
|
||||
627,714 -> 266,714
|
||||
148,301 -> 148,383
|
||||
883,491 -> 883,605
|
||||
242,401 -> 348,401
|
||||
660,931 -> 420,931
|
||||
475,72 -> 955,552
|
||||
912,949 -> 912,881
|
||||
928,330 -> 45,330
|
||||
474,203 -> 131,203
|
||||
805,459 -> 818,459
|
||||
534,645 -> 639,750
|
||||
68,911 -> 933,46
|
||||
717,276 -> 21,972
|
||||
233,615 -> 957,615
|
||||
902,495 -> 902,867
|
||||
230,427 -> 230,421
|
||||
630,917 -> 845,917
|
||||
884,903 -> 34,53
|
||||
157,205 -> 157,409
|
||||
857,588 -> 608,588
|
||||
422,863 -> 422,469
|
||||
890,83 -> 722,251
|
||||
546,318 -> 138,726
|
||||
691,881 -> 52,242
|
||||
171,435 -> 209,435
|
||||
978,15 -> 702,15
|
||||
581,86 -> 581,282
|
||||
61,767 -> 61,903
|
||||
835,289 -> 835,941
|
||||
176,351 -> 707,882
|
||||
571,84 -> 571,788
|
||||
700,373 -> 700,650
|
||||
40,40 -> 945,945
|
||||
82,616 -> 809,616
|
||||
351,402 -> 455,402
|
||||
517,242 -> 73,686
|
||||
489,795 -> 814,795
|
||||
543,734 -> 611,734
|
||||
688,849 -> 688,571
|
||||
631,903 -> 883,903
|
||||
312,636 -> 667,281
|
||||
213,575 -> 699,89
|
||||
752,128 -> 161,719
|
||||
754,931 -> 754,474
|
||||
748,666 -> 748,54
|
||||
123,667 -> 57,667
|
||||
140,497 -> 140,644
|
||||
634,961 -> 187,514
|
||||
822,865 -> 822,126
|
||||
58,162 -> 632,736
|
||||
417,164 -> 166,164
|
||||
943,597 -> 943,274
|
||||
355,756 -> 355,167
|
||||
340,546 -> 232,438
|
||||
166,125 -> 166,96
|
||||
354,394 -> 354,579
|
||||
147,844 -> 155,844
|
||||
652,723 -> 719,656
|
||||
584,582 -> 667,665
|
||||
514,373 -> 685,202
|
||||
308,404 -> 966,404
|
||||
124,179 -> 916,971
|
||||
706,597 -> 455,597
|
||||
52,822 -> 510,364
|
||||
419,900 -> 860,900
|
||||
153,649 -> 872,649
|
||||
915,160 -> 56,160
|
||||
422,346 -> 422,38
|
||||
940,73 -> 940,784
|
||||
922,581 -> 922,753
|
||||
949,821 -> 949,621
|
||||
591,778 -> 145,778
|
||||
93,685 -> 164,756
|
||||
287,469 -> 287,948
|
||||
953,952 -> 446,445
|
||||
935,47 -> 12,970
|
||||
458,109 -> 458,639
|
||||
71,643 -> 644,70
|
||||
812,214 -> 812,655
|
||||
488,496 -> 158,496
|
||||
113,868 -> 755,226
|
||||
666,429 -> 666,920
|
||||
962,246 -> 517,246
|
||||
400,261 -> 400,713
|
||||
601,617 -> 943,275
|
||||
904,847 -> 120,63
|
||||
556,334 -> 278,612
|
||||
416,463 -> 59,463
|
||||
724,401 -> 871,548
|
||||
701,210 -> 426,485
|
||||
786,116 -> 786,904
|
||||
976,979 -> 157,160
|
||||
674,377 -> 674,891
|
||||
321,829 -> 891,829
|
||||
404,84 -> 404,800
|
||||
975,850 -> 906,781
|
||||
753,331 -> 978,331
|
||||
87,240 -> 87,383
|
||||
167,390 -> 167,20
|
||||
258,931 -> 107,780
|
||||
672,313 -> 696,313
|
||||
589,88 -> 589,13
|
||||
637,65 -> 637,808
|
||||
532,610 -> 532,756
|
||||
612,482 -> 318,482
|
||||
522,322 -> 135,322
|
||||
89,49 -> 89,679
|
||||
475,506 -> 475,973
|
||||
385,348 -> 229,348
|
||||
633,978 -> 633,255
|
||||
978,833 -> 978,436
|
||||
746,553 -> 707,553
|
||||
970,820 -> 970,548
|
||||
589,59 -> 589,19
|
||||
674,890 -> 16,890
|
||||
838,315 -> 413,740
|
||||
39,129 -> 860,950
|
||||
923,755 -> 425,257
|
||||
757,929 -> 940,746
|
||||
639,390 -> 104,925
|
||||
650,512 -> 260,902
|
||||
718,90 -> 987,90
|
||||
352,228 -> 795,671
|
||||
141,629 -> 491,279
|
||||
755,616 -> 368,616
|
||||
117,113 -> 707,703
|
||||
206,73 -> 926,793
|
||||
372,415 -> 372,130
|
||||
894,632 -> 611,632
|
||||
974,554 -> 878,554
|
||||
823,710 -> 823,972
|
||||
730,711 -> 582,859
|
||||
94,912 -> 108,912
|
||||
782,190 -> 88,884
|
||||
668,567 -> 336,567
|
||||
87,266 -> 327,506
|
||||
738,303 -> 36,303
|
||||
320,358 -> 445,358
|
||||
566,725 -> 695,725
|
||||
94,364 -> 94,64
|
||||
884,184 -> 159,909
|
||||
947,575 -> 947,662
|
||||
658,741 -> 658,470
|
||||
512,776 -> 512,960
|
||||
96,757 -> 950,757
|
||||
349,604 -> 349,760
|
||||
459,247 -> 355,143
|
||||
90,12 -> 95,12
|
||||
28,27 -> 981,980
|
||||
388,959 -> 508,959
|
||||
704,194 -> 148,194
|
||||
349,546 -> 349,259
|
||||
30,38 -> 720,728
|
||||
307,631 -> 307,282
|
||||
520,417 -> 154,417
|
||||
746,771 -> 924,771
|
||||
838,932 -> 20,114
|
||||
406,141 -> 406,75
|
||||
15,35 -> 963,983
|
||||
264,143 -> 948,827
|
||||
545,899 -> 742,899
|
||||
759,356 -> 309,356
|
||||
686,707 -> 224,245
|
||||
226,985 -> 962,249
|
||||
826,628 -> 826,637
|
||||
985,329 -> 683,631
|
||||
586,283 -> 586,258
|
||||
602,703 -> 243,703
|
||||
419,883 -> 419,556
|
||||
475,375 -> 211,111
|
||||
981,15 -> 19,977
|
||||
989,10 -> 10,989
|
||||
238,350 -> 479,591
|
||||
720,714 -> 603,714
|
||||
969,985 -> 35,51
|
||||
844,356 -> 837,349
|
||||
450,354 -> 450,834
|
||||
385,870 -> 385,758
|
||||
911,856 -> 89,34
|
||||
948,124 -> 989,124
|
||||
439,556 -> 439,310
|
||||
990,233 -> 990,633
|
||||
747,723 -> 943,527
|
||||
418,23 -> 804,23
|
||||
876,96 -> 38,934
|
||||
556,92 -> 532,92
|
||||
727,155 -> 727,279
|
||||
674,545 -> 940,811
|
||||
118,879 -> 420,879
|
||||
141,50 -> 426,335
|
||||
591,180 -> 591,537
|
||||
662,511 -> 681,511
|
||||
776,858 -> 776,956
|
||||
872,329 -> 87,329
|
||||
183,985 -> 114,985
|
||||
186,179 -> 186,801
|
||||
354,933 -> 491,933
|
||||
10,223 -> 759,972
|
||||
112,626 -> 702,36
|
||||
498,78 -> 161,78
|
||||
196,61 -> 814,679
|
||||
629,71 -> 116,71
|
||||
23,281 -> 23,32
|
||||
819,810 -> 432,423
|
||||
187,276 -> 187,912
|
||||
95,683 -> 576,683
|
||||
125,813 -> 856,82
|
||||
98,882 -> 140,882
|
||||
843,909 -> 198,909
|
||||
192,904 -> 192,335
|
||||
375,342 -> 375,668
|
||||
61,804 -> 61,832
|
||||
475,387 -> 966,878
|
||||
822,740 -> 822,186
|
67
5.jl
Normal file
67
5.jl
Normal file
@ -0,0 +1,67 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
map(non_empty_lines(filename)) do line
|
||||
collect(map(x->parse(Int, x.match), eachmatch(r"[0-9]+", line)))
|
||||
end
|
||||
end
|
||||
|
||||
function solution5_1()
|
||||
max_x = 0
|
||||
max_y = 0
|
||||
lines = filter(parse_input("5.data")) do line
|
||||
max_x = max(max_x, line[1], line[2])
|
||||
max_y = max(max_y, line[2], line[4])
|
||||
line[1] == line[3] || line[2] == line[4]
|
||||
end
|
||||
board = fill(0, max_x + 1 , max_y + 1)
|
||||
for line in lines
|
||||
if line[1] == line[3]
|
||||
if line[2] <= line[4]
|
||||
for i in line[2]:line[4]
|
||||
board[line[1] + 1, i + 1] += 1
|
||||
end
|
||||
else
|
||||
for i in line[4]:line[2]
|
||||
board[line[1] + 1, i + 1] += 1
|
||||
end
|
||||
end
|
||||
else
|
||||
if line[1] <= line[3]
|
||||
for i in line[1]:line[3]
|
||||
board[i + 1, line[2] + 1] += 1
|
||||
end
|
||||
else
|
||||
for i in line[3]:line[1]
|
||||
board[i + 1, line[2] + 1] += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
length(filter(>(1), board))
|
||||
end
|
||||
|
||||
function solution5_2()
|
||||
max_x = 0
|
||||
max_y = 0
|
||||
lines = filter(parse_input("5.data")) do line
|
||||
max_x = max(max_x, line[1], line[2])
|
||||
max_y = max(max_y, line[2], line[4])
|
||||
true
|
||||
end
|
||||
board = fill(0, max_x + 1 , max_y + 1)
|
||||
for line in lines
|
||||
x = line[1]
|
||||
y = line[2]
|
||||
board[x + 1, y + 1] += 1
|
||||
while x != line[3] || y != line[4]
|
||||
x += sign(line[3]-line[1])
|
||||
y += sign(line[4]-line[2])
|
||||
board[x + 1, y + 1] += 1
|
||||
end
|
||||
end
|
||||
length(filter(>(1), board))
|
||||
# transpose(board)
|
||||
end
|
||||
|
||||
solution5_2()
|
10
5_ex.data
Normal file
10
5_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
0,9 -> 5,9
|
||||
8,0 -> 0,8
|
||||
9,4 -> 3,4
|
||||
2,2 -> 2,1
|
||||
7,0 -> 7,4
|
||||
6,4 -> 2,0
|
||||
0,9 -> 2,9
|
||||
3,4 -> 1,4
|
||||
0,0 -> 8,8
|
||||
5,5 -> 8,2
|
1
6.data
Normal file
1
6.data
Normal file
@ -0,0 +1 @@
|
||||
2,1,1,4,4,1,3,4,2,4,2,1,1,4,3,5,1,1,5,1,1,5,4,5,4,1,5,1,3,1,4,2,3,2,1,2,5,5,2,3,1,2,3,3,1,4,3,1,1,1,1,5,2,1,1,1,5,3,3,2,1,4,1,1,1,3,1,1,5,5,1,4,4,4,4,5,1,5,1,1,5,5,2,2,5,4,1,5,4,1,4,1,1,1,1,5,3,2,4,1,1,1,4,4,1,2,1,1,5,2,1,1,1,4,4,4,4,3,3,1,1,5,1,5,2,1,4,1,2,4,4,4,4,2,2,2,4,4,4,2,1,5,5,2,1,1,1,4,4,1,4,2,3,3,3,3,3,5,4,1,5,1,4,5,5,1,1,1,4,1,2,4,4,1,2,3,3,3,3,5,1,4,2,5,5,2,1,1,1,1,3,3,1,1,2,3,2,5,4,2,1,1,2,2,2,1,3,1,5,4,1,1,5,3,3,2,2,3,1,1,1,1,2,4,2,2,5,1,2,4,2,1,1,3,2,5,5,3,1,3,3,1,4,1,1,5,5,1,5,4,1,1,1,1,2,3,3,1,2,3,1,5,1,3,1,1,3,1,1,1,1,1,1,5,1,1,5,5,2,1,1,5,2,4,5,5,1,1,5,1,5,5,1,1,3,3,1,1,3,1
|
19
6.jl
Normal file
19
6.jl
Normal file
@ -0,0 +1,19 @@
|
||||
function solution6(n)
|
||||
initial = parse.(Int, split(readline("6.data"),","))
|
||||
fish = [count(initial .== i) for i in 0:8]
|
||||
for _ in 1:n
|
||||
fish = circshift(fish, -1)
|
||||
fish[7] += fish[9]
|
||||
end
|
||||
sum(fish)
|
||||
end
|
||||
|
||||
function solution6_1()
|
||||
solution6(80)
|
||||
end
|
||||
|
||||
function solution6_2()
|
||||
solution6(256)
|
||||
end
|
||||
|
||||
solution6_1(),solution6_2()
|
1
7.data
Normal file
1
7.data
Normal file
@ -0,0 +1 @@
|
||||
1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,478,1187,253,1892,900,155,20,787,17,248,1397,407,167,686,638,1020,960,124,840,220,1824,700,373,4,551,229,294,567,254,350,1144,679,124,361,145,483,335,202,1334,367,60,870,11,557,482,645,672,1296,1538,427,78,542,1135,13,65,0,140,705,13,642,187,1085,36,1118,349,601,382,584,941,26,949,200,763,198,430,204,1352,1135,210,342,11,1089,830,1523,9,523,167,762,254,805,8,132,29,102,1299,936,756,59,134,183,235,316,139,48,182,44,88,213,113,93,169,565,601,1899,1191,189,796,770,32,1183,365,374,867,918,1084,86,75,20,47,99,1140,2,99,1024,366,455,752,556,1220,66,326,450,213,1,342,756,49,675,160,280,68,221,193,379,88,179,94,16,109,570,1145,1207,824,355,1389,1601,168,86,236,923,120,759,14,478,460,84,167,1723,1005,269,6,171,861,311,832,952,701,3,1598,1466,96,780,57,161,631,572,276,105,594,276,17,405,688,1444,173,23,199,177,689,19,565,472,151,986,76,379,1430,212,928,106,25,143,84,833,942,860,1555,271,239,720,596,1209,235,535,361,1794,79,283,275,17,342,1687,1434,173,967,740,217,1370,18,1579,1259,546,94,623,475,834,1000,456,101,520,120,1023,360,167,213,617,42,1149,629,760,17,33,27,1347,414,646,1116,1340,134,259,143,407,249,328,968,677,241,438,98,313,27,791,1,634,3,918,1482,213,123,444,45,24,26,26,1203,64,67,1562,1,4,298,12,384,32,443,37,268,674,356,202,286,694,272,163,950,1022,54,59,21,73,519,462,106,76,1112,10,72,388,194,6,120,9,645,209,1121,75,599,362,661,439,69,62,339,390,23,1247,365,1266,4,246,511,47,467,134,276,497,130,458,427,669,1191,701,917,168,1191,294,641,236,801,375,106,872,800,87,356,583,1096,253,459,951,1331,719,66,1091,525,15,370,290,141,1201,30,43,37,76,1131,616,297,172,402,1016,654,301,63,872,303,69,1195,502,351,52,1659,86,104,294,807,166,120,190,333,60,283,819,198,184,144,278,343,1395,496,103,705,485,172,642,225,181,583,188,38,436,801,91,5,634,180,28,20,146,488,676,121,420,965,220,1564,1011,241,423,3,1631,709,106,725,164,1032,65,205,503,188,397,1072,49,121,761,721,249,418,87,126,258,712,500,435,157,127,681,108,270,647,504,505,83,407,212,165,1177,160,715,1292,491,195,141,25,829,1316,242,754,364,1707,33,594,434,488,368,298,183,1156,29,1674,537,378,8,9,860,240,571,749,471,331,501,156,62,427,1103,52,12,832,1198,284,388,827,556,194,288,218,397,84,1485,95,401,739,986,994,305,668,1324,1437,312,993,15,822,923,707,135,42,423,37,1183,1344,997,19,699,395,119,7,168,1711,50,151,38,20,163,686,1364,21,24,411,32,335,188,55,628,274,1766,439,180,286,1024,87,15,1498,290,561,971,32,294,67,113,219,42,18,715,3,664,242,583,221,1045,236,74,46,1612,639,325,164,100,69,518,38,502,26,329,112,1174,127,124,90,144,527,468,152,1098,800,125,349,191,290,191,27,651,446,267,9,1304,269,586,64,983,152,236,512,8,248,177,109,311,957,47,126,69,13,709,204,381,1151,580,340,994,865,258,190,9,1149,930,1128,321,100,471,0,507,1308,326,585,813,1088,76,174,333,387,631,186,430,988,24,820,11,45,173,167,1494,98,1467,456,167,21,1363,1173,394,318,1601,1111,1249,757,282,672,1227,1214,277,336,815,136,1192,681,689,431,130,1488,154,465,14,709,339,1123,68,151,1280,143,1797,23,250,1231,1007,302,1103,2,585,552,1732,994,225,771,1495,82,229,700,910,15,38,159,1122,316,1044,711,1436,920,1722,523,1398,188,443,1032,93,33,397,272,187,24,489,53,79,1277,671,1094,68,1705,984,1096,512,145,389,167,161,1174,94,4,534,1295,648,75,24,366,995,175,220,714,843,412,267,634,1209,66,1094,125,822,1114,1513,694,1520,30,676,817,245,26,77,1146,552,143,165,39,343,971,87,0,90,1434,588,616,99,297,1034,114,5,702,917,582,733,31,54,820,0,212,192,282,33,639,1661,460,75,680,115,178,194,271,274,582,1008,89,139,611,707,0,376,65,9,161,135,40,134,566,66,601,95,817,745,202,352,447,322,842,6,1247,175,468,330,608,368,139,21,29,486,121,9,1293,298,73,328,302,145,889,1794,677,56,952,520,80
|
14
7.jl
Normal file
14
7.jl
Normal file
@ -0,0 +1,14 @@
|
||||
function solution7(costfunction)
|
||||
start = parse.(Int, split(readline("7.data"),","))
|
||||
min(map(x -> costfunction(x, start), min(start...):max(start...))...)
|
||||
end
|
||||
|
||||
function solution7_1()
|
||||
solution7((x, positions) -> sum(abs.(positions .- x)))
|
||||
end
|
||||
|
||||
function solution7_2()
|
||||
solution7((x, positions) -> sum(div.(map(n->n * (n+1), abs.(positions .- x)), 2)))
|
||||
end
|
||||
|
||||
solution7_1(), solution7_2()
|
200
8.data
Normal file
200
8.data
Normal file
@ -0,0 +1,200 @@
|
||||
dcagfb cbegda cabdf bagedf dcb cd dcbegaf aebcf bgdaf dgcf | dacebgf cbafd dbacf cdgf
|
||||
dfgbc ceagbd egb cgdae eafcgd ecbgd eb aefbgcd bfaceg deba | baed ecabgd aebd cadfebg
|
||||
acbd bagfec bedcf efbca dbfecag gadcfe dc dbcaef cde fbegd | deacfg bfagcde bgedf cde
|
||||
dgec dfc fabgd bfcgae dfbcg baegdcf cd fbdace cdbefg becgf | cedg adfbecg badgf dgbfc
|
||||
be bacedg dfacb fbge deagcf eba egacf gcebfa febac dbgacfe | befg be egbf aedgcbf
|
||||
gafbd gbafce agced fdgae bcedgaf gdeacb efdc eaf fe cgeadf | cgdae fdec fcdeabg ef
|
||||
cdaefgb cfadbe gc afgcbe afedcg faecb cabg egc bfgde bfgce | fbaedc gc abgc bfcea
|
||||
egcafb adgecf caebf fdgbaec fbaed cebg facbgd cfe fgabc ec | fbgca deagfc ce ce
|
||||
fcdab deb cdbfea fecb befcdga abecd gdcae efbgda fcdgba be | cfbad dacge gbdeaf bed
|
||||
afdecg gfcadb ecadfbg facgd ed egda efbgc ecd cdegf bfadec | becgf fcbeg de cgefb
|
||||
caedbg gcfdba bfdae ge beagfdc bedag gcabd egac gcefbd deg | fdbecg acge bgfacd abefd
|
||||
befad ecgad adgefcb febg gb afdcbe dcbfag beafgd dbg eagdb | feabd aedfb gbd aebdcf
|
||||
bcfde acbfed dcaf dbcae gacbfe fc dgbcae egbacfd fcb edbfg | gbdfe gbeafc bcf cebfga
|
||||
cgbade adcbgfe fb efgbad gbcfde aecfd edgba afbg bfeda fbe | ecafbdg bfdea fgab edfbgc
|
||||
cbfa gefbd bcfedga bagefc ab bga ecdgab gbaef gfacde fcage | acdegf gab cegadb gab
|
||||
cafbeg dfaebc fdca dgcbe eacbf fde debgfca egabfd dfceb fd | df eabcf egbdc dfe
|
||||
egcdfa ebdac fdaecbg ed fdacb agecb cbdgaf ecd efdb dbaecf | dcabf cbeag ebdf ecgba
|
||||
gacdebf decfbg afbdg dcagbf cg agdbc agcf ebcad abgedf bcg | badec dcbga cgfa abcde
|
||||
fgcad dfebga gdbef ec ebcd fbcgea ceg fgedc defgbac dcfgbe | ce gbdfe fbcgdea fcgbdea
|
||||
cgbef afcbeg dgbec ebafcd cgbfeda adbge cd ecd gfcd fgbdec | edc gcebd fegacdb cd
|
||||
bafdcg egfdc bcfge dgeabf cd cgbadfe agefd facegd eadc cgd | cgd dcg defbagc cfdbega
|
||||
degfcb fdg edabgf cadge fg gfcb cdeafbg bcefd dgfec beadcf | dgcbfe cabfed fecbd cgdfbea
|
||||
dbfaec bfcgae cdb cdaf defbcg abgde ceabf adceb decgafb cd | fcda bdc dc afgecb
|
||||
cead efcdg adbcfeg fagdc def acegfd fcbagd cbgef ed fgdaeb | ecad fcaedg cgadf cfaged
|
||||
egdbfa cbgefad dgacbf cb dfbgec gefbd cbf gefbc gcefa bdec | ebcd ecgdbf fgebc cfb
|
||||
fagbe acbged bf eagcf dgaebcf gbf febadg deabg cdagbf fbed | fbcdag fgeca abgdcf cdbage
|
||||
baefc febgadc fcag dbgec feg gacfbe gfecb afedgb fg edafcb | aegdfb feabc agbfed fabged
|
||||
gfedcb eadgcf fed befdagc gaedf bgdea bdafcg fe acdfg feca | bcfdga cagfd afce efca
|
||||
cbfed degfba fgdbac acdg fdcab ac acgebf agdfb bac gcbfdea | cbdegfa caefgbd ca gdbcafe
|
||||
dbcgea dc dcg cadf abgcdf efgdb afgbc gefacdb fbcdg agebfc | dabgce gbceda dgc dc
|
||||
ef dgfbc cefbg gabecfd agceb feg gbcadf dfbe fcdgeb dfagec | gfe cafegd dfeb fe
|
||||
ebgdc egdacb dfbcega dfe dbfge bagef ecdbfg bdcf df fgecad | dbgce fd cfdb edf
|
||||
bdage ab fbgaecd aefb bfadeg gefad cdgeb agcbdf gba fgcdae | cgdbfa befa dgefca acebfdg
|
||||
aecb dbgecf eagfcb ecdbfag fdegba geacf gebfa cge cgdfa ec | acgfe gec cabe fgcda
|
||||
acd cafg abedcgf cfebda efcbgd cegfd ca cdgafe agcde bgeda | egcfbda gcfdae gefacd dca
|
||||
dcefga gdefa db fbaed abefdgc faebc fbgaed bdf gbed dcafgb | bfd db db gbdfae
|
||||
befac abcd bdcfe ecd cd baegfc edfgca adfbce aebcdgf edbfg | cgedfab feabc cd dabc
|
||||
eacdgf cebgdfa acgebd ecdba dbcfea fdgcb dag ga acgdb abge | ag ga adg ag
|
||||
gca fagbe dfageb bagce ecgfab gfce gc dcfeabg fadbcg bedac | afbdceg gadfeb cga acbdfg
|
||||
gbad febac dea gadbecf fdegbc edfacg da bdecg cdbea bdcgae | dbag cdeabg gcdaeb adbg
|
||||
cdgfeb cbeaf adef cfa fa aecbg fedcb acdebf bdcfga cdefbga | fdea eadf efad caefb
|
||||
aedgb df cgbaed gdef bfcgda bfd efbac dgfeab debfa aegcbdf | acbfe egfd afebgd gefd
|
||||
badcfe fcbg bf dfecbga faged gfadbc dfb dfgab abdcg dbceag | bf fb dafbgec fbd
|
||||
bdae decgbf afcbge bdecfa afcbd edgfcab ebcaf bd dfacg dbc | ebda db cbd cbd
|
||||
acfgde ae eac agbdec gadcb ebgcafd baed gfcbe cgabe bfgadc | cea fecdga ebgdac eac
|
||||
cbedga cfb adcbe bfae afcdgeb cgdaf fcedab bf fcbdeg dacbf | dfceba fcdga fbc fcebda
|
||||
cdafg dfgeac fc dbgcef gadbc gacfebd dcf edfgab gefad caef | fadgc facged adgefb ecgbdaf
|
||||
gdcbf eabdgf gaefd fbdge afcedg bacgfe fagbedc dbea efb be | ecagfb dgaef be eb
|
||||
gbecad faced abgedf cd cbfd abedcf dacgbfe cde deabf agcfe | cd edbfac cgabed daebfg
|
||||
cgebaf dacbge gafed eadbgf dgcef ad fadgbce dea bgafe dafb | fegad dgeaf ad gdfae
|
||||
ecfadb eagdbc afbcdge abfcgd cf bgedf agfc cfd gbfdc bcagd | fcga fcd befgd gdbfc
|
||||
afcbg gfeb gfcad ecgdba cbf cafbeg bacge fb ebdfac baedcfg | fbc gabce egabc fcadg
|
||||
agd gadbc da agcfed gcebad dgfcb ecabg ebcagdf eadb becfag | fgbeadc bcega geacb gceab
|
||||
gaebf gfdbce aefbgd fde aefcbg ed dcaebfg agde aefdb acfdb | efd agcdebf cbgefd ebgfa
|
||||
cdgfe ecbafd ebgca ad gedbcfa cad adbg cedabg egcad fcebga | gbedac adgb ecdgab daceg
|
||||
efcb fcdag begdfa egcdf edf fe gfcdeb cdbega geacdbf becdg | dagfc gbadef decbg fe
|
||||
bgaed agfdc fdgea fae fabcgd gcfe fe decfga afgedcb facbed | gdafe ef eacfbgd fe
|
||||
ebgfca def fd ecgfbd efbda eabdg edgcfba afdc ecbfa bfdaec | abcefd fd dafc debcagf
|
||||
eacbg efbdgca fdbga gde abecdg beagd cdeafg de cebd ecagbf | gaedbc gdcbafe gaecdf bgdeac
|
||||
bafce cedb edacgfb fbgac fbe aedfgb be cbedfa cdefa eacfgd | be acbfg gfbac edbc
|
||||
dgba cbgfdea gbe fbaegc cbedga fegdc decafb cdbge bg daecb | cadfbe bgad beadgc bgedc
|
||||
abd fdbcae aedfb daec ad bacfdg dgefcb agbef cbefd cbagdef | ad dab acde da
|
||||
cdagbe dagbe fageb gdfbeca gdcba edac dgcfba egd egcfbd ed | fbgcad cafdbg de facbged
|
||||
dbecf egadfb cfagde da fcebga cagef dae fadec dagc dfbcaeg | da dgac bfedc ad
|
||||
efa adcf fgcde acgeb bgedfa efcga degfbc aegcfdb fa efdgac | cfgea fedgc ecagf efdacgb
|
||||
fecga eafgd acgefb cf gceab fbcdag gecdafb cabedg fbec gcf | agcbfd gfc cgf ceagf
|
||||
egcaf ecdafgb dfgea cbafe dfebgc bgac cbagef cg gfc ecdfab | edbfgca edafg cgf gfc
|
||||
afdcgb decgb fbdegca fbgae fdbaeg dgfbe gbafce df fdb efda | gcbed dafe gbfdca aefgb
|
||||
gaebd baefg cfadbg fb gaedfbc gadbef cfgea bfde baf gacdeb | abf cdbagf aecbdg fagec
|
||||
cfdb dcg geadbf febdg edfabcg dc bgecd eabcg fcgead cgbfde | dgc dc bdfge dcfebga
|
||||
dfbcaeg fdgcae gfdab bagc gabcdf fecbgd cadgf gb fbade bdg | bdg gacb bgac ecfbdg
|
||||
eg befdg fceabd badfg dbecf egbcfa bedgcf gbacefd egb dceg | beg faecdb gfdbe dbacef
|
||||
cdagef edfca dgfa fca fa agedc gfcabe bdfec bdcage fbcaedg | caedbfg ecafgbd fdcega decgfba
|
||||
gfc cfeb cafgdb fc aedgbfc cgdfe degfb aedcg fbegcd dfgbea | acdge fedbg agedc ebgdfa
|
||||
aegdcb gde dgbfca eg bdecfga fedbgc gcbfd fgecd bfge acefd | ge debcag bgedcf bfeg
|
||||
gbd eagbc cbefagd gcde aefdb gcebad cgdafb dg aegbd facbge | cdeg cged ebdaf gbd
|
||||
eagbcf cba aebd cdfga cdegbf afcbedg dcbfe ab adfcb acfbde | bcfeag fgdcbe daeb bdae
|
||||
gc dabcfg dcfageb acg ecabf bgadef facge gfeda ecdg fagced | gcde efdga agc fgaed
|
||||
bcgdea bacfdg aeg cdabg dfeagc befgd aebc dabfgec ae degba | ebfdg egadcf aceb gbdac
|
||||
ceadf defagb fg agbed dfgaebc bfaecg eacdbg afgde efg fgbd | gf egbda fabegc badfgec
|
||||
begcfd fdecb fbdga ca bace cfadb egfdca cda cfaedb efabdcg | gacefd fdgba fcdebg bcae
|
||||
bcga agbefc fageb ca afc debfc dafegc fdgeab abfdgec fecab | gdafceb befac fdecga ac
|
||||
fce adcfg cgdefa bgcfda fdae acegf fe cgbae adgfceb cdegfb | gedacbf fdebgac deaf afde
|
||||
agcf dbegf bga cfeba gfdebca fgaeb cbdefa ag egadcb cbfega | fbdge gcabef cagf ebdafc
|
||||
aedg ge decbga bafce ecg gcdab degfcab gcfdeb ceabg abdcfg | cbfea ecg bafec eacfb
|
||||
gfdceb cgb bcdfe gebdc egcabdf egcf bafcgd bgdae edabfc cg | gbc bgdfca cgfe gc
|
||||
bg bedcf dgfaec fdbgc gcbafed fbg bfaged gadcf cgab acbgfd | agfbde bg bgcdf fgb
|
||||
gafcb cdfgab abfcge cbgde bdcfae ea faeg dbgcafe ace agebc | decbaf fbacde bcagf ace
|
||||
bgfdac cgabdef efdca fagce febagc cd fcd dfeacg gdce aefdb | dc dgcfba ecdagf gfacbe
|
||||
bde eb egfbdc ebgfd fbdgc daebgc cagfbd gfbceda efbc aedfg | cgebadf becf cfbdg cfbedg
|
||||
ebcdfag fadec daceg gbecaf eabcfd fd fad aebfc fcgbad efbd | dcefbag fceagb fdecabg adf
|
||||
efgd fd bfagcd acefb febad gdbaef edcgba badge dbgaefc daf | eafbd gbcdfa gdfe edgba
|
||||
cefdag bfagec bedcg da acd bcfead bdgcefa gcaef acdeg agfd | geacbf faegdc fcdgbea eacgfdb
|
||||
bcedgaf bgfae cab bdcg cb gcade egdacf abdegc agbec becfad | gfcadbe adgbec gebfcda cfaedg
|
||||
gf edbcafg cfge gdafe gdf cdabfg eabdg dgefac acfed fbceda | geabd cbgdfa ceadbf agbfdc
|
||||
fcbgde fbged cgfdb gdebcaf cfge ebg deabf baedcg ge dfabcg | beadf ge dcbgef cfeg
|
||||
eafdcb gcdfbea eag dgcba gacdef agebd dbefag deabf ge fgbe | fcbdea bgcdeaf dbgac fagcebd
|
||||
dc fgebad ecd aedcfb cdga ebcagd dfbaecg adebg debcg gbecf | bcegd gcdeb dacg eagdb
|
||||
cad feabgd fadegc bgcdfea gbcfa bgcda bgaced decb dc ebadg | acd adfbge cd dc
|
||||
af cfbge fadecg afbgc dbaf gbdfac bdgeacf dbcga cfa gebcda | fa dabcg dafb gbceda
|
||||
fbgdea gcefa agfdb fecdba egbd fdgea de bagfcd gdcbafe dae | ed eda abdefc fadgeb
|
||||
fdbcga fdbae bfa adfcge gcbfaed bfeg fdage eacbd fgbaed fb | bdcfage fbeg eadfbg gbef
|
||||
cfdbga fdeab gefbad bcaefd egad fdaegbc ag gcefb afg agefb | abfgecd egda bgcfe adefb
|
||||
fbeda ae dae bdgfe gcadbf beac fedabc badfc ceagfd dgcbafe | bfcad gfabdc aed fbdac
|
||||
fgcaed bagcef bdfc edabg efacd ebcadf fb afb abefd agfbdce | cfdb fb abf abf
|
||||
fed bfaedc fceab edabg bfdea ecdagf begfdac df fceabg bfcd | cebgfa df eagbd gafced
|
||||
egfdc fcg cadg dfebc dfebcga cg dgabef ebgacf dfgea gcfade | fbedc gcfed dcag fgc
|
||||
fcbde fbeacgd afedb da fcegda dabg ebgaf dgfaeb dea febagc | da bfdce egfacb ad
|
||||
fcdeg cdbe fgcab dceagf febcg eb cebdgf geb edfgab dbgcaef | abgcfed bdec gdcfe cfgdbe
|
||||
degfb ebdacf edbfcg agdfce dbf bd bgcd dgfce gfdcbae abegf | gebfcd fgeab gecdfb gdafcbe
|
||||
egacd abedg decfgba dagceb ca cabe cag dagfcb badfeg cegfd | gca caeb cfgde ca
|
||||
gfa ebafd fg gafdbec gaecfb gbdfa edfg gaedbf bdgca ecadfb | fbagec fecabd caegbf fg
|
||||
dfgce cgfbe cefad bfdace fcaged cdg badceg fdceagb dg afdg | gcfbe dg gadf edfabc
|
||||
dfgbc cbfeda bdgcfe fdb efbg bf gcedb fdaecgb gdecba fgadc | bgdafec bgcde fbgdc agdfc
|
||||
fgecd dbegfac adbfgc fa bdcage acegb eacgf efab fca fceabg | gafce af gdcbea af
|
||||
fgdacb fbdec adb gfda acbdegf edbcga cfgba da cbgefa cadfb | gbcfea bgcfda da dab
|
||||
fbcdg abfcdg cfegbda ed dbcaef gedcfb aecgb dcegb ced egdf | cabfgde egcdfb fbcade dgcfab
|
||||
dbec fcd cegbdf dc fdacgeb abdfg baefcg gbfcd dafgce gfbec | dcf cfd fcd agefcb
|
||||
fcdeg gdefb cfgadbe fb bef bfcg edfacb fecdgb gcdfea gadeb | efb feb fbcg dabge
|
||||
acebd dacfg bdf agdcbfe gcafdb fcegad afgdbe bcfg bfcad bf | dbf bdaec bf febacdg
|
||||
acdegf bdfa afdebg febcga gaefb fd fed dgefcab bedgf edbcg | efgdab aecdgf cedgbfa def
|
||||
ecdfabg dfge cedfba fcadgb fgabd ebgfad fea egafb bcgae ef | efgdbca eagcfdb defg bfgda
|
||||
efacgd bfda bcadg gab gbceadf ab cfbdga gadfc bcgfae dgbec | fgecad dbaf ba abfgdec
|
||||
bcgaed fbgc edcfg dgbecf fgdae dgc cg abdcef gfcbdea ebfdc | cg cdfeb cg edbcfag
|
||||
cagb fgcdeab gdebaf fcegd ecabfd acfeg ag afceb fga acgbfe | ga agf bcadfe fag
|
||||
fbgde efbagc ecgd efdgabc ebdcf fdcgbe abfdg fcbead egb eg | dcge cedbgf fbgad acegfbd
|
||||
febadcg cfdbge bgcef gecd ed gbdaf bfdeg deb gfabce fcbead | efdbca ed fgcbe cebdaf
|
||||
eagbc cgde cafbg abdge fbdgae gacedb aec ec acefbgd abcefd | bgacf cgbfeda agbed dgec
|
||||
efgbdca gfdb cadbfg dag dg degfac bcdaef gdacb bfcad agebc | gda dfagecb gcfdea dag
|
||||
gefab bfde acbfgde gfdac ebfgad bfgeca aegbcd eda gfade de | gafbce gcfeabd aefgd fgbcae
|
||||
gaecfb cdebgf fec ebcafgd bgecad cf debgc bfead ebfdc cgdf | cdbfe gfcd egbdca edfcgb
|
||||
cfdeba bfgd gcedfa gbdae dgefcab cbega dg febadg agd bdaef | dfgb adg gecdfa fcebda
|
||||
dea bgdeaf da befdc gdcfaeb ecdbga abecd gacd bgafce eagcb | aedcb facebg abfecdg bagefdc
|
||||
gcebf dfbae dbgcfe egdc dgebcaf febcd bcd cagfeb fdgcba dc | bcd efcbd daefb agbdfce
|
||||
fa acged bdfec afeg gcfadb bfdagce ecgafd caf acdfe dgaecb | debfc af afge adegc
|
||||
bacfdg fadbe egbdfc ba bage acefd baf bgdafe fgebd gdacbef | dbfage bgedf aedgbf acedf
|
||||
acgb dgcbfa dba edgbfac acdefb begdf bdgfa dceafg dcagf ba | abd dfbge abd gacb
|
||||
gcdea gc agfdce egdfa egcf fbeagd aecbd dgc fcebgad cagfbd | acebd egcf defag gfadceb
|
||||
fab begadc ebcad dfbea gfcdab acdfgbe fa fedgb adcfbe feca | cbgead bfcdega fba gbadce
|
||||
gb efcagd fgcad cfbg bedca abg fcgbda dgbcafe acbgd bdafeg | abcdgf bcgf cgfb bg
|
||||
fbcagd fcdae beacgf gf agf baecdg fecag bgfe cagdbef gbcea | edbagfc ebfg gebf bgcae
|
||||
cdgfea bdeacf aefcgb dbca beafc bcgdefa ebdgf ad defab ade | dbcgefa da ade bacd
|
||||
bcgaedf badecg cfegb afceg dcbf egdbfa gcedb gbf bf fgcdbe | bagfed bdagfe fdbc gefcbd
|
||||
cegba bgeda cgefa cbde fegadb dagcbe acfgdb cb cbg ecbdafg | cdegabf ebgda bfgade ebgac
|
||||
afbdg gdabec gcafdeb fc cfdeba bcf fgebdc cefg gcdbf ecdbg | fecg cdbefg gdbfc gfce
|
||||
bgdfa egbf bcdgfa fe dfcbea aef feadgb edcag dagef afdcegb | fea cbedfa acdfgeb dfgeab
|
||||
eacgfd caegdb gbfecad bdfce edcfa dgaf fea fa egdac aegbcf | af fa edbcf gdeacbf
|
||||
baefg fedabcg gbfac gacbfe cb dfageb dcfag cgb bcea cfdegb | cabe eabc gfacd fgdcabe
|
||||
fgdeac cgd ebdfga agefdbc bfcegd cdgbf cd cfabg dceb befgd | cgd cfgab fdgeb efbgd
|
||||
aedgbf cgebda dbcagf gbf gbefd gdecf gdfabec fb eabdg feab | bf fbea cefdagb adgbe
|
||||
fcgea fbgedca gbecfa efbadc efgd fcagd df cdfaeg fdc acgdb | efgac fcd dfceba fegac
|
||||
egdfac cab cadbf gbdaf bc eadcf dcebagf dbecag fbdace cebf | cedabfg cgbaed bc efacbdg
|
||||
be abcged afcgb ebg bgefc gebfcd cgefd efdb gdeafc daecgbf | gabedc dbeafcg debf febcadg
|
||||
dgebafc cefdbg db edfb fcgdb fdceg dgecfa bdc abcfg baecdg | fegdca baecdfg bcd bd
|
||||
fbgead cfab cdbgefa agcbdf aedgc fgcbd fa fagcd ecgbdf gaf | adgcebf gaf gaf af
|
||||
debagfc eb fcedba ebc cgdab efdgac befa eadcf edabc gdbefc | bcdagfe fbae ecadb eabf
|
||||
gaedcb bfcgd bcegf bagdcf fd aedfgbc bfd cbdga cabefd adfg | ecfbda cbfgda cfbadg fbgcd
|
||||
agdcfbe bcfega cbeag ge dacfeb facged bcaef gbdac gce efbg | feabc acfbdeg aefbc gce
|
||||
febcdg egdacb bedcf debfacg abdfce ba bae fbeda gdfea acfb | eadbf ab ab eab
|
||||
cdfbg dfbcae dcabe egba ag cgdfea abdcg aefcdgb cga decagb | defabc edacb cbfgd ag
|
||||
fgac dfgec eag cfbdge bacde ag abdgef bagfdec dcgfae agcde | aecbdgf gcaf efcgd befcdg
|
||||
de gecad fbcgae gcafd dge edfbcg eadb eacfdbg bcedag acbge | gabce fcegba bgfcead ed
|
||||
gbacd dbefcg fdcgae edgca afdeg aecf egc gfaedb dcfagbe ce | feac acegd caefbdg aecf
|
||||
egacbd aedbc dagbc fcdagb ec bacefdg ace dcge ecfagb febda | afecgb fgdbac bcade cea
|
||||
ceadgb cgaedf bfdge cfg cf fdgbc dgabc cfdabg gdcebaf bacf | gebdf fdeacg dafbgec cgf
|
||||
bgfda gdcfae afce bfecgd ac acdfg afebdgc dgefc bdcaeg cag | gdbfec gcedf gfdaceb cegdab
|
||||
fa fgeabdc bfga faedb fad ebgdfa daceb fgbcde fgdeb dafcge | efdab gcdfeb fa gabf
|
||||
ebfc fb aedbgc ebagdf fab cgfeab gcdfeba acbeg abcfg gfdca | gbfac bgfeac bfa bcfga
|
||||
fagdec gadebc cg cabfegd agdfb cbge dbeac cdfabe adcbg cgd | acgbed dgfeabc fdeacb dgbacef
|
||||
fgbdc gbedaf bdgaf dfc cbfadg gfceb degcfa dc bacd gbafcde | dcf egfdca cd cdegaf
|
||||
fcb aebf bf cafgb efgabc cgadbe egbadfc egbca gcfebd acdgf | beacgfd gebfcd dfbgec bf
|
||||
bfgcd deb bfacdg ed fcebgd baefg dbaecfg efdc dabecg fdgbe | de gebaf dbcgfe bde
|
||||
facgdbe gda ebdfag gabdf da cagfeb gebaf deaf dbagec dcfbg | egfba dgebca aefd cgdbf
|
||||
deabg eg gdfacb bdfea egd gebfdca ecdgab acge dacbg cefgbd | eg dgcbef agcdb fadbceg
|
||||
cafbged feacb gbafd dc gfdc agdcbf fcabd deabgf cad acgedb | fdcba egbfdac cad dca
|
||||
dfagce fbd eabdfc gdfeb ebgfa dfabcge fdgce cedfbg bcgd bd | cdbg agbcefd db db
|
||||
fdagec fcg gf gbace efbgacd ecgbfd dfcea caefg dagf dbecaf | acdegfb fg gbdfaec fadg
|
||||
edfag bgfced dga ag cfbgdea bfdcag bfged decfa afedbg bgae | abeg dgaef ag edfgb
|
||||
dcaegb fageb cdga begda adbce gd dge gbecafd cabfed cgfebd | gdaebc ged egd dcga
|
||||
cfb agebfc fegb fb adcef afbec ebgdca bafdgc gbcea fdbeagc | ebfg gabce fbc agfdceb
|
||||
fdcega cbgfea febg agdebfc cfe afecb gbcae ef bcdfa acgedb | fbgdeac egbf acfgeb bfge
|
||||
fbadge dfgebc fbgacde bg fdage afdcge cedba agbf bge dgbea | adgbe fgba gabf fceagd
|
||||
cfbda bgedca fgdcba abcfe dc agbfd dbc fdgc facbged dagfeb | cd fbcda fdcab fdgc
|
||||
cdefa fbgdce aebdg geacd ebcdgfa gc cdg baegdc febdag gbac | fdeca cg dgfbcae bcgfde
|
||||
gcadeb ef ecbfga acbgfed fbdga bcade dafcbe dcfe deabf feb | fdegacb agdbf fgbedac fcdbaeg
|
||||
adgc fac ca gdfcae cfdegb gcdef adcfbe dgefcba cagef abgef | gcadbfe feabdc cdefg bgdeafc
|
||||
cfdeba dega fga gadfec cdfabeg aecbfg cbdfg ag faedc dfcag | ag ga acfed cebfad
|
||||
efcgb feagdc gdfbea fadc ac cea gadbfce cfgae aedgbc geafd | fcgeabd cafeg cbadge ca
|
||||
ebfda cfgbea cgdbef fbadgec dgcb cedfga dg fdbeg efcgb gfd | fgdeb bfgcde ebfdg dg
|
||||
dcafg facgdb bgfa dbacf ba gdcefa ecfdb cfegdba bac acedbg | gcbdaf fbadc begdac dgcbaf
|
||||
eagf agedbcf acdegb abg gcfba fcegb befgcd fbcda ag ebcfag | dbcegfa bfecg cafdebg faeg
|
||||
fbgcd cba fgacdb gabcdef fbgdec gdabc gacf bafdec begad ac | eacbdf badge acb becfad
|
||||
eacbd dabfec dbgfeac ag eagdb fcdbag bga agec dbfge bacged | agecdb bag gebcdaf cdbea
|
||||
bfgcd bcdegfa fdabgc da efgca cfagd efbdca cda dgfecb bgda | acdebf badfcg abdg cafgd
|
||||
efcbgd cadefg cfegd dcgba cafedgb cagfd gaf acef fa bedafg | agf fcedg gefdcb cfdge
|
||||
afdceg dcaf fd dfg aefgc gdbecf cafbdeg dbage ecagfb deafg | adefgc bfdecga fdg cefag
|
||||
bfdacg dagbf abdefcg acfg fbcda beafdc egdab cfdegb gfd gf | bcafgd efgcabd cfga dcaegfb
|
||||
dbage dfagbe cadfeb gfeb bae fabgdc be bafdg cdgea bgdfaec | fedacbg eb dfcbea eab
|
||||
gebfd cfedga begfa dagbfc fgeadcb ecdgbf bced edfgc dgb db | dbec gadcfb db aefbg
|
||||
dbcg fbagc bcf bc cdaebgf aegbdf faecg fdcaeb cdafbg afbgd | adfbg fadebgc dgbafc febagd
|
96
8.jl
Normal file
96
8.jl
Normal file
@ -0,0 +1,96 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
map(non_empty_lines(filename)) do line
|
||||
notes, output = map(split, split(line, "|"))
|
||||
end
|
||||
end
|
||||
|
||||
function count_unique(strings)
|
||||
length(filter(x -> x in (2,3,4,7), length.(strings)))
|
||||
end
|
||||
|
||||
function solution8_1()
|
||||
sum(map(count_unique, getindex.(parse_input("8.data"), 2)))
|
||||
end
|
||||
|
||||
function solution8_2()
|
||||
summe = 0
|
||||
for (notes, output) in parse_input("8.data")
|
||||
recordings = [notes;output]
|
||||
# find length 2 => c,f
|
||||
cf = first(filter(x->length(x)==2, recordings))
|
||||
|
||||
# find length 3 => c,f,a => a
|
||||
cfa = first(filter(x->length(x)==3, recordings))
|
||||
a = setdiff(cfa, cf)[1]
|
||||
|
||||
# find length 4 => c,f,d,b => d,b
|
||||
cfdb = first(filter(x->length(x)==4, recordings))
|
||||
db = setdiff(cfdb, cf)
|
||||
|
||||
d = "X"
|
||||
b = "X"
|
||||
f = "X"
|
||||
c = "X"
|
||||
# find length 5 =>
|
||||
for fives in filter(x->length(x)==5, recordings)
|
||||
common = intersect(fives, db)
|
||||
if length(common) == 1
|
||||
# is there one missing d,b? => present is d missing is b
|
||||
d = common[1]
|
||||
b = setdiff(db, d)[1]
|
||||
else
|
||||
# is there one with d AND b => has one of c,f => f (and thus c)
|
||||
f = intersect(fives, cf)[1]
|
||||
c = setdiff(cf, f)[1]
|
||||
end
|
||||
end
|
||||
|
||||
abcdf = "$a$b$c$d$f"
|
||||
|
||||
g = "X"
|
||||
for sixes in filter(x->length(x)==6, recordings)
|
||||
new = setdiff(sixes, "$a$b$c$d$f")
|
||||
if length(new) == 1
|
||||
g = new[1]
|
||||
end
|
||||
end
|
||||
|
||||
abcdfg = "$a$b$c$d$f$g"
|
||||
|
||||
e = "x"
|
||||
for anything in recordings
|
||||
new = setdiff(anything, abcdfg)
|
||||
if length(new) == 1
|
||||
e = new[1]
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
digits = Dict(sort(collect("$a$b$c$e$f$g")) => 0,
|
||||
sort(collect("$c$f")) => 1,
|
||||
sort(collect("$a$c$d$e$g")) => 2,
|
||||
sort(collect("$a$c$d$f$g")) => 3,
|
||||
sort(collect("$b$c$d$f")) => 4,
|
||||
sort(collect("$a$b$d$f$g")) => 5,
|
||||
sort(collect("$a$b$d$e$f$g")) => 6,
|
||||
sort(collect("$a$c$f")) => 7,
|
||||
sort(collect("$a$b$c$d$e$f$g")) => 8,
|
||||
sort(collect("$a$b$c$d$f$g")) => 9)
|
||||
|
||||
result = 0
|
||||
power = 0
|
||||
for digit in reverse(output)
|
||||
value = get(digits, sort(collect(digit)), -1)
|
||||
result += value * 10^power
|
||||
power += 1
|
||||
end
|
||||
# println("$(join(notes, ' ')) | $(join(output, ' ')): $result")
|
||||
summe += result
|
||||
end
|
||||
|
||||
summe
|
||||
end
|
||||
|
||||
solution8_2()
|
10
8_ex.data
Normal file
10
8_ex.data
Normal file
@ -0,0 +1,10 @@
|
||||
be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe
|
||||
edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc
|
||||
fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg
|
||||
fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb
|
||||
aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea
|
||||
fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb
|
||||
dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe
|
||||
bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef
|
||||
egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb
|
||||
gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce
|
1
8_ex_mini.data
Normal file
1
8_ex_mini.data
Normal file
@ -0,0 +1 @@
|
||||
acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf
|
100
9.data
Normal file
100
9.data
Normal file
@ -0,0 +1,100 @@
|
||||
4567894301299921298789654345689439843295436789543298765432345678986789756901239998765634567895986555
|
||||
3458963212989890989678943234678998764989945678932198764321456799215678949892398999854525658934895434
|
||||
2348954329876799876567899195789469999767896989949019965432567897434569998789987898743212345695679423
|
||||
1237895498765698765479998989890359878956789999898929876545678996545698987678976987654563456789798912
|
||||
3456797987854569954398987678921298766545678998777899987766789987656987676569895498765676567899987893
|
||||
4567989896543498765987876567892987655434567897656798799897894598767899565458789329876787678999876789
|
||||
5679878789432579879876743458989876542123456996545987678998923459878998433347678910987898789998865678
|
||||
8798765678921456989865432365678987678012345989439878569899012398989987321234567899998949898987654568
|
||||
9987654688932368998765421234567898632125499878998767476789323987399876510126789998769434967896543456
|
||||
2398543567893458999876510195978976543236989656989654345895439876210965432345678989754323456987432345
|
||||
1987652356954567899985431989899987654549878949878943234976545985431986583556899679943212569898541234
|
||||
0198621237899778999996569878789698765698765436567890125987689987642398874567976567894323498789210123
|
||||
9239432348998989998987698765679549878789876323456789239898992398543498765678965456789434999654321234
|
||||
8998543459987899987898798754678932989899985434567894398789943987659569898789654329899949898765432345
|
||||
7987674569876789876789987643767891296929876765678965987656894998998979979898763210169898769896543456
|
||||
6599795678965699965679876321458942965439987878989879898545899899987898965919874323456789656987654578
|
||||
5459898789654569874589765432349899876598998989894998765434789789876567894301986545678998734598787689
|
||||
4345979896543498763459896565456789987987989998763219896545697698765456965212397696989654321239898793
|
||||
3254567965432987654567987886767891299876767899854323987676789569876345894343498989898975434345999892
|
||||
0123979879521098975678998997878910198965656789967456798789893498985256799454569978797896545656789991
|
||||
1239899998632129996789989798989992987654547899996567899893912987654345678965698765686789656767899989
|
||||
4398789876543234989899976659999989998743234598989699989932102398965457789898789654345898787878999878
|
||||
6987654997654399878999865545898678999654123987678989876545293459878968898769899983236789898989998767
|
||||
9876563498969989769899854236789567898763234976567878989676989598989879997656999874345899949899989756
|
||||
9765432349898876658789743145678978999854569865453569998789878987899989789743298765456789234789876545
|
||||
9897561298767435345697653234567899989967698774312478999898767856789997678932109876567892125678987634
|
||||
8999990129854321234589754745678999879878987685101387899997656345678954567893212987678943034599299846
|
||||
7898889298743210125678965678989998767989999543215456999898743237567893478954563499789956745989398767
|
||||
6787678987654321367889876989999887656799898654323567898765432123456789589765679599899877659878989878
|
||||
5674569898765432456789987898998786545698798765434678979878741012367998678978798989924989798767878989
|
||||
4323498789878543567897698967899654323987679878555789567997652323458998789989987678912398987856567899
|
||||
3212347678989697689976569458789765219886587989676894456989543456767899893499876567893987996543456789
|
||||
2101234567898798797895435365698954398775456898789932349879656567878954901298775456789896789612345678
|
||||
3232345678979899896789423234567965699674345679894321298968987678989543212987654345698765678923458989
|
||||
4563656789765932945678910123679899986545234569965432987857899799898954329898765257789674567934567897
|
||||
5674767899854321234789543234598798997632123678996949876546978998767899998789954348998543456895688976
|
||||
6789898998765430123897654345987687889875012399989899985434569987658998875657895767987432388996789765
|
||||
7895919987654321234998765499876576778964323989878789876323568998899987764546789879876321276989899876
|
||||
8954323498765434345699878987655485567895439876567678987212567899999876543534995989865410125678999987
|
||||
9765434679876595456789989987643213458996545985434569874323456789998765432323894399986423234789998998
|
||||
7976765789987876567994399876543201246789759886323498765434569899879894321012789459876534345689987989
|
||||
6989876894598987878973234997875212345678998765434999876545679998767987652345678967987649876798765678
|
||||
5492987923679598989862125987654345456789329876565899987786789987656399543458789978998956987899654568
|
||||
6321098912395439799654434598765456567893212987876789699898899876543297654567893989879987898998743489
|
||||
5499999101987325678969547679976787998999543498989896545999932999632198775878932398767898969997632378
|
||||
6987893245896534567898956789987898949698956569193987659899891098949019896989991987654329459876541267
|
||||
9876789356789645678987897996598989434567897692012798998789789987898923987899989998763212345998765459
|
||||
8765678969898756789256789543459876323456789789125679989678679876767994598999878989854301456789876567
|
||||
5874789998979867894345678932398765614347899899434599876534598765656789679998767678965212367899987678
|
||||
4343467897767998965456789321459654301256789998765987988323989854345678999987654589654343479999898789
|
||||
3212989926456999987567895432396543212367899899899876543219876543236799989876543458965494989698769894
|
||||
4343499212347894398878989693987665323456789789989987695499965432125678978985432367896989896569654923
|
||||
5454578901456943219989878989998786734569897679878798986989876743234599769876921456999976789696543219
|
||||
6567689212567899324599967678999897895878944598765659987976987654345678956989890967898765698987654998
|
||||
7678998343456898935679756567899998976989432129654745698965498765458789545698789899987654567898769897
|
||||
8789997654597987899798743456789879987896545098743434899876569896567890124987698768894323458999998786
|
||||
9897898765989876568987654567898765698989652196542123987987678989698921239876567656789214567899989645
|
||||
9956789879876543456798765678989854349678943987663039876498789878999632345985454347898996789979878434
|
||||
9745698998767432345679896789876543234567894598754198765339899867996543459876321238957889895659762123
|
||||
8634567899654321238789997898987654349978965679865299873210998759889654569985432349546778954349843234
|
||||
6525898998765432345893298967898795998899876789876789954321989645678965678996543489435568893234956785
|
||||
5436789129887643458932139456789989876789987895987899977439876434599876789987687678923456789125987996
|
||||
6545679012998786567891012345899876765898998934598999876567965323689987895398798789212345699934598987
|
||||
9876789199129987698972357896789995854567899325679999987679873212347898943219999892103479789895679298
|
||||
3987899988997598789765456789899984323456789212389989898989932101236789992103498943212567998789792149
|
||||
2198979876789459899896987999939876434598994323459878799999876512345699983212987654323456789678989234
|
||||
3239567965679345999989898998929987545989987654598765634789965423457999874323498767654567898567878945
|
||||
4999459854567956789878789987898797659876998765965834323679876567568998765454999878765678997434569896
|
||||
9878398765699897898765679976545698998965789899894321014567987698989549878969891989889789986545789789
|
||||
9765129876986789989874798765434569987654891998789543223478998789794323989998710195999897987696897678
|
||||
8654234989875679876743459983125689998785992989678965354567899895699456799987623234599976798789977567
|
||||
9766545698764568995432369894012378999876789878567896765678932923988998899876544395989897899898765456
|
||||
9878656799853656789321298765623567894987898765456989896789671019977789921987895989878789978987632345
|
||||
9989867987942345693210129898794678923498949987345678987896532198866678930298999876765678954596543456
|
||||
9896979876543456789521345999898789213999239876239789498986545987755567891979998765874567893987656567
|
||||
8755699987654567897432567899989892109878998765458991349997679876643456789767987654323456912998767778
|
||||
5444598798767678996543456789876989298767879986767890145989998965432387893458998765534567899889898989
|
||||
9323497679989789987894568998765678987656767897878921239876897896521298932347899876765678965678999496
|
||||
8939986545698993498989979349654349876545856998989432398965986789430989549456910997876889954567894325
|
||||
7898965434577892109879893298743212965432147899996545987654875678949878998967891298989997892349993214
|
||||
6587894323456943998765789349892109876543236789987659876543534567898767897898932999292356793498989323
|
||||
5456789434567899899854578998765412987656745893299767985452123679987656786789999899101236789987879434
|
||||
4345678946678998789943469549894329898767856794999879876321014989699542345999987678912345699996768965
|
||||
3235789987889997678912568932985498769878967989899989965432127894598431259899976567893456789865657896
|
||||
2124899998999876589893467899876987654989879876789999876543236893987640198788893478999567998754346789
|
||||
4235998989998765498794878945987896543296999765678998987664345992987651987677789567898979899893235678
|
||||
5345987878999654346689989234598987654345989654567897898785456789298769876545678978957898789762124568
|
||||
5459876567898953234579890123499998785459876543678965439976567892129898987634389899545987689654335679
|
||||
6798765456587892145656789294989899896567985432349876521989878921019987896521256789434596578965445799
|
||||
7999874343456921012345999989876789987679876545678965439997989532198756965432345694323987459878556789
|
||||
9899983212457892123456789876765695498789987658789997698976596545349867896545696789109876367989769899
|
||||
9789874343468943234567899985634789219898998969899989987897697655459878987856789895414995499999878998
|
||||
8676965656578998745678999894323478901987899878999879876789798798767989498979899954323986989899989987
|
||||
6565698767889109656789698765434567899876789989898765765678999899878995349989998765456899876789899886
|
||||
5454569878999998767895549898745679978987897696789654344567899945989965210995439876787898965678789765
|
||||
4323456989769899878934135987656789567898976545698743213456789434597894329874321987898987654565678954
|
||||
5434567893656789989321014598967993456799895434997654302345678923456789459765210298959996543534567893
|
||||
6547978932345678995432323459978942367898754329876543212456789014567896598654354349543985432123489932
|
||||
7656889321256789876543434567899431234789843212987655433469894323478987698765565458932976543234567891
|
||||
8798995432367899989656657678976532345678932101298766545678965435689998799876676567891098764546678910
|
86
9.jl
Normal file
86
9.jl
Normal file
@ -0,0 +1,86 @@
|
||||
include("utils.jl")
|
||||
|
||||
function parse_input(filename)
|
||||
map(x->parse.(Int, x), split.(non_empty_lines(filename), ""))
|
||||
end
|
||||
|
||||
function sink_locations(width, height, heights)
|
||||
sinks = []
|
||||
for x in 1:width
|
||||
for y in 1:height
|
||||
minimum = true
|
||||
if x > 1
|
||||
minimum &= heights[x - 1, y] > heights[x, y]
|
||||
end
|
||||
if x < width
|
||||
minimum &= heights[x + 1, y] > heights[x, y]
|
||||
end
|
||||
if y > 1
|
||||
minimum &= heights[x, y - 1] > heights[x, y]
|
||||
end
|
||||
if y < height
|
||||
minimum &= heights[x, y + 1] > heights[x, y]
|
||||
end
|
||||
if minimum
|
||||
push!(sinks, (x, y))
|
||||
end
|
||||
end
|
||||
end
|
||||
sinks
|
||||
end
|
||||
|
||||
function solution9_1()
|
||||
input = collect(parse_input("9_ex.data"))
|
||||
width = length(input[1])
|
||||
height = length(input)
|
||||
heights = reshape(reduce(vcat, input),(width,height))
|
||||
sinks = sink_locations(width, height, heights)
|
||||
risk = 0
|
||||
for sink in sinks
|
||||
risk += heights[sink[1], sink[2]] + 1
|
||||
end
|
||||
risk
|
||||
end
|
||||
|
||||
function basin_size(x, y, width, height, heights)
|
||||
heights = copy(heights)
|
||||
to_visit = [CartesianIndex(x, y)]
|
||||
visited = []
|
||||
while length(to_visit) > 0
|
||||
current = pop!(to_visit)
|
||||
if current in visited
|
||||
continue
|
||||
end
|
||||
push!(visited, current)
|
||||
if heights[current] == 9
|
||||
continue
|
||||
end
|
||||
if current[1] > 1
|
||||
push!(to_visit, CartesianIndex(-1, 0) + current)
|
||||
end
|
||||
if current[1] < width
|
||||
push!(to_visit, CartesianIndex(+1, 0) + current)
|
||||
end
|
||||
if current[2] > 1
|
||||
push!(to_visit, CartesianIndex(0, -1) + current)
|
||||
end
|
||||
if current[2] < height
|
||||
push!(to_visit, CartesianIndex(0, +1) + current)
|
||||
end
|
||||
heights[current] = -1
|
||||
end
|
||||
length(filter(==(-1), heights))
|
||||
end
|
||||
|
||||
function solution9_2()
|
||||
input = collect(parse_input("9.data"))
|
||||
width = length(input[1])
|
||||
height = length(input)
|
||||
heights = reshape(reduce(vcat, input),(width,height))
|
||||
sizes = map(sink_locations(width, height, heights)) do sink
|
||||
size = basin_size(sink[1], sink[2], width, height, heights)
|
||||
end
|
||||
reduce(*, Iterators.take(reverse(sort(sizes)), 3))
|
||||
end
|
||||
|
||||
solution9_2()
|
5
9_ex.data
Normal file
5
9_ex.data
Normal file
@ -0,0 +1,5 @@
|
||||
2199943210
|
||||
3987894921
|
||||
9856789892
|
||||
8767896789
|
||||
9899965678
|
Loading…
Reference in New Issue
Block a user