From e45541cef70bebaae94b552c13433cfd7671a3bf Mon Sep 17 00:00:00 2001 From: Brian Buller Date: Fri, 10 Dec 2021 07:33:36 -0600 Subject: [PATCH] 2021 Day 10 Complete --- 2021/day10/input | 98 +++++++++++++++++++++++++++++ 2021/day10/main.go | 94 ++++++++++++++++++++++++++++ 2021/day10/problem | 143 +++++++++++++++++++++++++++++++++++++++++++ 2021/day10/testinput | 10 +++ 4 files changed, 345 insertions(+) create mode 100644 2021/day10/input create mode 100644 2021/day10/main.go create mode 100644 2021/day10/problem create mode 100644 2021/day10/testinput diff --git a/2021/day10/input b/2021/day10/input new file mode 100644 index 0000000..128fd7c --- /dev/null +++ b/2021/day10/input @@ -0,0 +1,98 @@ +([(<<<{({([{{{{}[]}<[]<>>}<{()()}{{}()}>}{((()()))([[]<>]<{}()>)}]({((<>{})[<>()])<{()<>}<<>( +{<{{<[[[(<<<([{}{}](()()))(([][])<()<>>)>>({([[]]<{}<>>)[{[]{}}{[]()}]}[(([]{})){([]<>)}])>((({{<>[]} +[[{<<[{{<[(<[<()<>}[{}[]]]((()()))>{[([]<>)([]())]<([])[{}[]]>})<<<[{}[]]((){})>(<<>[]>[[]<>])> +({[{[<([{((((<{}()><<>()>))[<{[]<>}<{}()>>({<>[]}(<><>>)])([[<()<>>({}<>)]({[]()}[[]{}])]))} +(<<({{{{({[[(<{}{}>{{}<>}){<<>>}]<(<{}()>{(){}}){[{}()]([]<>}}>][([((){})<[]<>>]<<<>{}>{[]}>)( +{(((([{([<[[<[(){}]<()()>>{[[]{}]{{}[]}}]([<<><>>{[]{}}]<{[]()}[()()]>)]((({[]}[<><>]))<<[{}[]][<>()]>([{}[] +([({[[<{[{{[{<{}{}>[<>[]]}(([]()){<><>})]{<<<>()>(()())>{{<>[]}[<>{}]}}}(([(<><>){[][]}][{[]}[[][]]])<([{ +<[<{[(([<[([<<()()>{{}{}}>[[<>][{}()]]]({(<>{})}<(<>{}){<><>}>))(<{[{}<>][()()]}<([]())<<>[]>>>)]>< +<[([<<{{[(((<[(){}}{(){}}>{[()[]]<[]{}>}))){[[[[<>()](<>())]]]}]{<{(<<{}[]>[<>]><[[]()]<{}[]>>)({[()<>] +(({[<([<<([{{{()[]}{[]{}}}{{<>[]}{()[]}}}<<(()){<>[]}>[(<><>]{(){}}]>]([[({}{})((){})][[<><>]((){})]][{( +{{((<<<{[({[{{()<>}{[][]}}](<([][])[{}{}]>[{(){}}<[]{}>])}<[{{{}{}}(()<>)}[(()<>)[<><>]]]>)(<<[[[][]][{}<> +[({[[{[{[{<((([])){<{}()>{[]{}}})>{<[{()<>>({})][{(){}}<()[]>]>{[{<>{}}(<>{})][<()[]><<>()>]}} +<<{[(<<{{{(<{{[]()}<<>[]>}>{<<{}{}>{[]{}}><[{}{}]{{}[]}>})}{<{[<{}{}>({}())]}{[([]())[[]<>]]<{<><>} +((<[[[([{(({({()()}[{}()])(<{}()>[[][]])}((<[]{}>(<>()))([<><>][<>{}]]))<{([[]{}][[][]])}> +<[<<<<{(((<{[{(){}}{<>()}]}{{{{}()}}<<<>()>>}>{({{<>()}}{<[]<>>[()()]}]}){<(<({}<>){[]<>}>({{}()}(<>())))> +(([[[{{{{<<{<[[]()]{()[]}><[<>[]]({}<>)>}<<{[]{}}<<>>><[{}[]](<><>)>>>[({<{}[]>[(){}]}[{(){} +{[{[({{({<<([({}[])][{()<>}{<>()}])<{<[]()>{()<>}}>>[(<<[]{}>{()()}>)]>})<{[{({<<>[]>{{}()} +<([{[[<[([<(<<<>()><[][]>>)[[[<>()]<<>{}>]]>{<(<{}<>><[]()>)<(<>)[[][]]>>}])]{[[((<({}())[[]{}]><<{} +[([[([{[<({(<({}{})[<><>]>){{({}{})(()())}[([]<>)<[][]>]}}}[[([[[][]]]<({}{})(<>[])>)(([[]()]{<><>})[[[]() +{[[<[<(({<[{<[()[]>{<><>}>([[]<>]{[][]})}([{<><>}<<>{}>][{(){}}[{}<>]])][<(<()<>>(<>()))[{()<>} +(<<<<({[{<[[({()<>}(()()))][({()}[<><>])]]<<[(<>[]){{}()}][([]{})({}{})]>{<[[]<>]<<>()>><[{}()][<> +[({<<{{(<{<<{<()()>(()<>)}<{<><>}>>(([()<>][()<>])[(()<>)(()<>)])>[<(<()<>>{{}()}){[[]{}]{<>{}}}>]}[(<[({}( +({([([[{{[{{{<<><>>{()()}}[[<>[]][()()]]}({{<><>}{<>()}}<({}())>)}<[{[{}()](<>[])}(<(){}>)] +(<{[[[{((<([[<[]{}>([]<>)]{{()()}}]({[{}[]](()<>)}{{{}}[<>()]}))>))}([{(([(<{}[]>[<>()])]({< +([{{<([<{{<[{(()]([][])}][{([])<{}{}>}<([]<>)<{}[]>>]>{<[[[]{}]<{}[]>]<{()}({}<>)>>}}}{<{<<[(){}](()()) +{{<<<[{<([<<([{}[]])([()()][()<>>)><({[]()}[()<>])>>]<{[([{}{}]({}[]))]{(({}{}))(<<>()>({}[]))}}{{[[{}{}]<[]< +{[([({[[<{{[{[[][]][<>()]}<<[]()>>]{<{[][]}(<>{})>}}{<[[<><>](<>())](<(){}>({}<>))>[<<[]{}><[]()>>[{[]{} +[{{{([{([[[<{{{}()}{<>[]}}[{<>{}}[[]<>]]>]<([{{}{}]<[]()>]){{{{}()}[<>[]]}(<{}[]>{[]<>})}>][{{[<<>{}><()[]>] +[<[(<(<([(({({{}<>})[{{}<>}{{}[]}]}{[<[]<>><{}[]>][[{}<>)<()<>>]}){{<<(){}>[{}()]><<()>([]<>)>}}) +<(([<(([([{([({})][<{}[]><[]()>]){{{[]{}}[[]<>]}<(<>())[{}()]>}}])](<[({(({})(<>()))}{{<[]>}{<<>{}>[()()] +[<{[[{([<{[<(({}{})(<>()))><{{{}<>}<()()>}(<<>()>(<><>))>][[[[()<>]<[]{}>]]{({{}[]}<()<>>)}]}([<<[()()] +([<{{(<(([<{<(<>{})<<>[]>><{{}[]}<[]{}}>}{(((){}){<>()})[<(){}>{<><>}]}>{<([[]()](()<>)){<()>[<>< +<(<([({<(([[[[<><>]([]{})]({[]()})](({[]}({}[]))[({}<>)(()())])]<{({[]{}}([]())){<()<>>({}<>)}} +[<(<{(<<<([{<[()<>][<>{}]>{[<>{}][()<>]}}{{<<>{}>[<>{}]}[{(){}}[[][]]]}][{[<[]()>(<>())][<<>[] +[<[[([[[([([[[<><>]({}())][[<>()]]](([[]]({}))[{()[]}({}<>)]))(([{()[]}{{}}][{()[]}[<>[]]])({{<>{}}{ +[<[([<<{{{[[[({}{})<()[]>]]]<(({(){}}{(){}})<[{}[]][[][]]>)>}({{([[]{}][[][]])<[<>[]][(){}]>}<[ +<[<[({{<(<<[{{<>[]}}[(()())<[]<>>]][{{{}<>}<<>[]]}]>>)<{<(((<>[]))[([])]){(<[]()>({}()))[{{}< +({([<<<<[<{(((<>[])<()()>))<<[<>[]][<>[]]][{[][]}]>}((([[][]])({{}[]}[<><>]))({[[]<>](<>[]) +{(<{((({[{({<<()[]>(<>())>{<{}{}><<><>>}}(([[]<>][()[]]){[{}()]}))[<<<<>()}[{}[]]>(<{}{}>{<>[] +(<<[{[([<[<[{(<>{})[{}[]]}([<>[]]<{}[]>)]>](({<{(){}}{{}{}}>}<<{[][]}<{}()>>[{[]{}}{[][]}]>}[{<([]()){<> +{[{{<[[([<{[{([][]){<><>}}[[{}}<<>()>]](<[<><>]({}<>)>[<{}<>><{}{}>])}[<<{()[]}><{{}<>}<<><>>>>([[[]{}]<()<>> +{[<{{([[[[{({{()<>}(<>[])})}(((<{}[]>))<[(()[])[{}{}]><<{}()><(){}>>>)][<(<(()[])((){})><[{}()]<[]<>>> +{<{[[{<[(({[{<()()><{}<>>}{[[]{}]([]<>)}]([({}[])<[][]>]<[[]{}][()()]>)})<(((<<>{}>[<>()])( +[[<{{{(<[{{[[({}<>)<()<>>]]>}{(<[{<>()}]<{{}()}<<>[]>>>{{(<><>){()<>}}[{(){}}<<>{}>]})[{<<()<>> +{[{(<({[[{[{{<[]{}>{[]()}}([[][]][{}{}])}[<{<>{}}<[]<>>>({()()}{[]()})]]<(<{()()}([][])>[{<> +[[{[[<{{({(<{([]()){()<>}}([()()]{<>})>[[{<>{}}({}<>)][{{}{}}<()[]>]])<<[<[]{}>[{}[]]]{[{}[ +({({<<{<([[<({[]()}[<>{}]){[{}()][{}<>]}>][<<<{}[]>[{}<>]><<<>>[()()]>><([[]{}]<<>()>>({[]<>}<{}[]>)>]]) +{<[{[[{<<([({{<>{}}[{}{}]}(({}{})(<>())))<[([]{}){{}()}]>]([[<[][]>]{<{}[]>{{}()}}]{{[()[] +{[([[[({([<<(<<><>>[[][]])>([<{}[]>])>({{{<>{}}{{}{}}}{<<>{}>({})}}{[{()<>}]})])>([<[{{([]{}){()()}}[{{ +<{<(<<{[<([(<<[][]><<>[]>>(<[]{}>(<>[])))])[({(((){}){[]{}})({()()}<{}>)}<<([]())<()<>>>[{<>< +<[([{{<<[{([[{<>[]}([][])]]([(<><>){{}}]<<<>[]>[{}[]]>))([[[<>{}]{[]()}][({}())>][[[<><>]]{({}())[<>{}]}] +{<[[[<[[{[[{((<>{})[()()])[<<>>{()<>}]}]]{{{<(<>{})<[][]>>[{<>{}}{{}[]}]}({{[]<>}(<>())}<<[]{}>>) +{<{<<({<<(([([(){}][()<>])[{[][]}(()[])]]{((()())[[]<>])})][[[[<[]{}>[<><>]][[()()][<>]]]({[{}{}]([]() +{[<([(({<<[<{<()><[]{}>}><((()[]))<[()][{}{}]>>](([[()[]][<><>]][({}[])[()[]]])<<{{}{}}<[]<>>>{[( +{[([{<{[<<[({{[]{}}<<><>>}{{()<>}<[]{}>}){{{[]<>]<{}[]>}[(()[])]}][(<[{}]>{([]<>)[[]{}]}){{[[]<>]}<{() +<({{{({[(<<<{<()[]>({}[])}{[()()]{[]<>}}>(<[[]()][<><>]>{([])<<>()>})>({{<{}()>(())}(({}){()<>})}[<<{}{}>{() +<({[({[(<[(<[(()())][([])[{}]]>{{{<><>}(<>{})}(([]{})<()()>)})]>[(([{((){})(<>()}}[([][]){[]}]](([{}[]]< +[<({([{{(<<<<({}())>>{{<<><>><<><>>}[({}<>){<><>}]}>[<{<[]{}>{[]()}}<[[]][[]()]>><[{{}<>}<() +{<<<([<<[[{([<()[]>{[]()}](<<>{}>([]<>))){<<{}{}><{}{}>><<[][]>({}{})>}}{<[<[][]>[<>()]]{[()[]]{[][]}}><<{<>} +<({[[<[{<(({{(()<>){{}<>}}[<()<>>({}[])]}<(<<>[]>{()()})[<[]{}>(()<>)]>)[<<{[]<>}(()<>)>[{(){}}<{}()>]>{({ +(<([{{{<{({[<{()[]}{{}()}>]})}](<{(<<<[]{}>({}{})>[(()<>){[]{}}]>{({{}()}{{}<>})(<()()>[<>{}])})[([[{}< +((<(<<[((<{{[<<><>>{()<>}]([<>[]]<()<>>)}}><[(<{[]{}}{<><>}>{<{}{}>(()())})][[{[{}()][<>()]}((<><>)[<>[ +([[[([<<{((<<({}[])(<>{})><({}())[<>[]]>>){((<[][]>([]<>)){{(){}]<<>[]>}){[{<><>}[{}{}]]}}){{{[{<>()}({}[])]< +<{{[{[<<[<{<<(()())(<>())>((<>[]))>[{[()()](<>()}}{({}<>)(<>{})}]}>]>{[<[{[{<>{}}{{}[]}]}{[<<><>>({}())]((( +{<{[(<[(({<<{[{}[]](<><>)}<<()[]><{}<>>>><(((){})[{}])<[<>()]<()<>>>>>[{<[{}<>]<<>[]>>(<[]()>(< +[<<[[{[({(<((({}{})(<>())))[{{[]<>}<(){}>}]>([({{}<>}[[]{}])]((({}())(<>[]))([[]<>](()[])))))}[<(((({}()){<>[ +{<((((({((<[{[[][]](<><>)}{{{}{}}(()())}]{((<><>)<[]()>)<<()<>>(()<>)>}>[{([{}()]<[]<>>){<[]<>><(){} +([{[<[<((<[<<{{}()}<<>{}>>([<><>]([]{}))>}(<{([]()){<>()}}[<[]<>>(<><>)]><(<()[]><()<>>)<[{}[]] +<<{[[<{{[({[{{{}{}}(()[])}]})]}([{[{([()]({}{}))[([][])<()[]>]}({{[][]}{[][]>}([()()]))][<( +<<{{[[<([{{({[()())(<><>)})}}{(<([<>()][[]<>])[{()[]}{{}{}}]>({{<>()}{{}<>}}))[({<[]><<>>}((<>() +{<<<({[<<[{((<{}[]>([][])))[([{}{}]<{}{}>){[()()](()<>)}]}{<{(<>())<{}<>>}([[]()]({}))>{[(<>[] +(<<[{[({{{<{[<[][]><[]()>][{()[]}[<>[]]]}><<[(<><>)<[][]>]<<<>{}><[]<>>>>({<{}()>([]<>)}({()[]} +[<<[<[[(<{[{[[{}[]]{()<>}]<[{}{}][{}()]>}{(<{}<>>{()[]})<{()[]}[[]()]>}]}{{<((<>{})[{}()])[{<><>}<[][]>]>[<{ +{<<{([({<(<{(<[]<>>)}[<{[][]}>((<><>)((){}))]>)[(<{([]())[{}()]}<({})>>(<[()<>][[][]]>{([][])<()[]>})){[{< +{<(([{<<[[[({{[]{}}({}<>)}[(<>{})[<>[]]])({[()[]]{[]}]<[<><>]<[]{}>>)][(<[[]()]([]<>)>(([]())({} +(<[{([<([(<{{{<><>}<<>[]>}{[<><>][()<>]}}[(<[][]><()<>>)]>[{((()<>)<[]()))[(<><>)<()[]>]}])]<([<<{<>() +<[(<({{({[<{({<><>}[[][]]){((){})<()[]>}}{[{[]{}}{(){}}][{{}()}{()<>}]}><{[<{}[]>((){})]({<> +({<({(([{<{{<[<><>]{[][]}>[{()()}(()[])}}{<<<>{}>[{}{}]><{[]<>}[[][]]>}}[[{{<>{}}}<{<>[]}{(){}}>][{[( +<{[<[([<({[[{<<>{}>{<><>}}((()<>)<()()>)]<{[[]()]({}[])}<(<>())<()[]>>>>{{{{[]{}}[{}[]]}}([ +<[(([{[[({{{{(()())<()()>}(<<>{}>{[]{}})}<{[<><>][<>()]}<{{}{}}>>}{[(<<>{}>((){}))[<[]()>{ +{<<(<(({[<[{[((){})([][])]}{<(<>{}}(<>{})>[([]<>)([][])]}]{[<((){})<()<>>><<[]<>><{}()>>]({(()<>)}{<{}< +[[[(([([[[[[{[[]]}{({})(<>{})}){({{}}[{}[]]){<(){}><[]<>>}}]]]]){(([{(<<{}[]>(<><>)>)<<{{}[]}[<>< +([(<(((({{[<({[]<>})(([])[{}[]])>[[<<>()>[<>()]][[[][]][[][]]]]]{<<([][]){()[])>(<{}{}>[[] +([(([(<<([[{{<{}<>>(<>[])}[[[]<>]<()()>]}[(({}<>){<>{}})[<[][]>[[][]]]]]{[{({}[])}<(<><>)[()<>] +{(<<(<[({(<[{[(){}]<<>()>}[[{}<>]{[]{}}]]><<[(()<>){[]{}}]{{[]}{<>}}>[[(<><>)]<(<>{}){{}{}}]]>)}([<{({( +[{<<<[{(<{(<<<(){}>[<>[]]>[{[][]}<<>{}>]>)<<[{(){}}{()<>}]<<()[]>]>([[[]()]<{}[]>](<<>()><<><>>))>}>)({[<<[ +{<[([[([({([[(<>{})][([]()){[][]}]]{(<<><>>[()<>])<<{}<>>[()]>})})]{<[<((({}<>){{}{}}){<[]()>[< +<[<<([(((<<<([{}{}][<>()])>>{[[<()()>([]<>)]({<>{}}<{}{}>)]([(<><>)([]<>}]{{()<>}{{}[]}})}>{[[{{[]<>}< +<[{{{[<([[{[{[()[]]}(({}()){[]()})](({()}{{}()}){([]())<[]<>>}}}<{<([]())[()<>]>([[]()][{}{}] +<(<<<<{[{(({[{{}<>}[(){}]}}([(<>())]{[[]](<>{})}))(<[{{}<>}{<>()}][[[]{}]({}[])]>[(([]())<[]()>)[[()]{[ +[<{[<<{[{{{[<{()[]}([]<>)>((<>{}))][[((){})[<>{}]]<(<>{})>]}}<({<{{}}[{}()])<(()<>)<{}{}>>}<< +<({<{{<{<[[(((()<>)[()()])[{[][]}<<>{}>])(<({}<>)(()<>)>[<<>{}>([]<>)])][{{[{}[]]((){})}([[][ +<<<{{<<<<({(<{{}<>}<[]>>{<<><>>{[]{}}})<(<{}>({}<>)){{<>()}[()[]]}>]<{[<()<>>([]{})]{[(){} +(({<({[[{[{{{{{}{}}{<>{}}}[<<>{}><{}()>)}}]}(([{(<()()><{}()>)[{<>()}(<>())]}][[<{{}{}}({})>[<[]<>> +<{<<{[{[{(<([{<>[]}<()[]>]{{[]()}<{}[]>})<[[<>()]{()[]}](([][])[{}{}])>>)<({<({}[])[{}[]]>({[]{}} +(<([{{{(({({<{<><>}[{}<>]>})<{[(<>())[<>[]]]}{<(<>{}){{}()}>}>})(([((<[]()><[]()>))(<<()[]>{<>{} +<[[[{{[{<<[(({{}<>}<(){}>)[<{}{}>({}())])]<{<{{}[]}>}{([()]{<>{}})}>>>(<([(((){})[(){}])])(((<(){ +[[[{{[{[([(<[{()<>}((){})]{[{}()][<><>]}>)([{<(){}>}({<>}[<>[]])]<{{{}()}(<>[])}<(()())([] diff --git a/2021/day10/main.go b/2021/day10/main.go new file mode 100644 index 0000000..8bbbb3f --- /dev/null +++ b/2021/day10/main.go @@ -0,0 +1,94 @@ +package main + +import ( + "fmt" + "sort" + + h "git.bullercodeworks.com/brian/adventofcode/helpers" +) + +func main() { + fix(h.StdinToStringSlice()) +} + +func fix(inp []string) { + var clean []string + var fixScores []int + var score int + for i := range inp { + var opens []byte + valid := true + for _, b := range inp[i] { + switch b { + case '(': + opens = append(opens, byte(b)) + case '[': + opens = append(opens, byte(b)) + case '{': + opens = append(opens, byte(b)) + case '<': + opens = append(opens, byte(b)) + case ')': + if opens[len(opens)-1] != '(' { + valid = false + score += 3 + } else { + opens = opens[:len(opens)-1] + } + case ']': + if opens[len(opens)-1] != '[' { + valid = false + score += 57 + } else { + opens = opens[:len(opens)-1] + } + case '}': + if opens[len(opens)-1] != '{' { + valid = false + score += 1197 + } else { + opens = opens[:len(opens)-1] + } + case '>': + if opens[len(opens)-1] != '<' { + valid = false + score += 25137 + } else { + opens = opens[:len(opens)-1] + } + } + if !valid { + break + } + } + if valid { + var fixLineScore int + for bi := len(opens) - 1; bi >= 0; bi-- { + switch opens[bi] { + case '(': + inp[i] = inp[i] + string(')') + fixLineScore = (fixLineScore * 5) + 1 + case '[': + inp[i] = inp[i] + string(']') + fixLineScore = (fixLineScore * 5) + 2 + case '{': + inp[i] = inp[i] + string('}') + fixLineScore = (fixLineScore * 5) + 3 + case '<': + inp[i] = inp[i] + string('>') + fixLineScore = (fixLineScore * 5) + 4 + } + } + clean = append(clean, inp[i]) + fixScores = append(fixScores, fixLineScore) + } + } + sort.Ints(fixScores) + acScore := fixScores[len(fixScores)/2] + + fmt.Println("# Part 1") + fmt.Println("Syntax Checker Score:", score) + fmt.Println() + fmt.Println("# Part 2") + fmt.Println("Autocomplete Score:", acScore) +} diff --git a/2021/day10/problem b/2021/day10/problem new file mode 100644 index 0000000..0d1ffb8 --- /dev/null +++ b/2021/day10/problem @@ -0,0 +1,143 @@ +# Advent of Code + +--- Day 10: Syntax Scoring --- + + You ask the submarine to determine the best route out of the deep-sea cave, but it only replies: + + Syntax error in navigation subsystem on line: all of them + + All of them?! The damage is worse than you thought. You bring up a copy of the navigation subsystem (your puzzle input). + + The navigation subsystem syntax is made of several lines containing chunks. There are one or more chunks on each line, and chunks contain zero or more other + chunks. Adjacent chunks are not separated by any delimiter; if one chunk stops, the next chunk (if any) can immediately start. Every chunk must open and close + with one of four legal pairs of matching characters: + + • If a chunk opens with (, it must close with ). + • If a chunk opens with [, it must close with ]. + • If a chunk opens with {, it must close with }. + • If a chunk opens with <, it must close with >. + + So, () is a legal chunk that contains no other chunks, as is []. More complex but valid chunks include ([]), {()()()}, <([{}])>, [<>({}){}[([])<>]], and even + (((((((((()))))))))). + + Some lines are incomplete, but others are corrupted. Find and discard the corrupted lines first. + + A corrupted line is one where a chunk closes with the wrong character - that is, where the characters it opens and closes with do not form one of the four + legal pairs listed above. + + Examples of corrupted chunks include (], {()()()>, (((()))}, and <([]){()}[{}]). Such a chunk can appear anywhere within a line, and its presence causes the + whole line to be considered corrupted. + + For example, consider the following navigation subsystem: + + [({(<(())[]>[[{[]{<()<>> + [(()[<>])]({[<{<<[]>>( + {([(<{}[<>[]}>{[]{[(<()> + (((({<>}<{<{<>}{[]{[]{} + [[<[([]))<([[{}[[()]]] + [{[{({}]{}}([{[{{{}}([] + {<[[]]>}<{[{[{[]{()[[[] + [<(<(<(<{}))><([]([]() + <{([([[(<>()){}]>(<<{{ + <{([{{}}[<[[[<>{}]]]>[]] + + Some of the lines aren't corrupted, just incomplete; you can ignore these lines for now. The remaining five lines are corrupted: + + • {([(<{}[<>[]}>{[]{[(<()> - Expected ], but found } instead. + • [[<[([]))<([[{}[[()]]] - Expected ], but found ) instead. + • [{[{({}]{}}([{[{{{}}([] - Expected ), but found ] instead. + • [<(<(<(<{}))><([]([]() - Expected >, but found ) instead. + • <{([([[(<>()){}]>(<<{{ - Expected ], but found > instead. + + Stop at the first incorrect closing character on each corrupted line. + + Did you know that syntax checkers actually have contests to see who can get the high score for syntax errors in a file? It's true! To calculate the syntax + error score for a line, take the first illegal character on the line and look it up in the following table: + + • ): 3 points. + • ]: 57 points. + • }: 1197 points. + • >: 25137 points. + + In the above example, an illegal ) was found twice (2*3 = 6 points), an illegal ] was found once (57 points), an illegal } was found once (1197 points), and an + illegal > was found once (25137 points). So, the total syntax error score for this file is 6+57+1197+25137 = 26397 points! + + Find the first illegal character in each corrupted line of the navigation subsystem. What is the total syntax error score for those errors? + + Your puzzle answer was 296535. + +--- Part Two --- + + Now, discard the corrupted lines. The remaining lines are incomplete. + + Incomplete lines don't have any incorrect characters - instead, they're missing some closing characters at the end of the line. To repair the navigation + subsystem, you just need to figure out the sequence of closing characters that complete all open chunks in the line. + + You can only use closing characters (), ], }, or >), and you must add them in the correct order so that only legal pairs are formed and all chunks end up + closed. + + In the example above, there are five incomplete lines: + + • [({(<(())[]>[[{[]{<()<>> - Complete by adding }}]])})]. + • [(()[<>])]({[<{<<[]>>( - Complete by adding )}>]}). + • (((({<>}<{<{<>}{[]{[]{} - Complete by adding }}>}>)))). + • {<[[]]>}<{[{[{[]{()[[[] - Complete by adding ]]}}]}]}>. + • <{([{{}}[<[[[<>{}]]]>[]] - Complete by adding ])}>. + + Did you know that autocomplete tools also have contests? It's true! The score is determined by considering the completion string character-by-character. Start + with a total score of 0. Then, for each character, multiply the total score by 5 and then increase the total score by the point value given for the character + in the following table: + + • ): 1 point. + • ]: 2 points. + • }: 3 points. + • >: 4 points. + + So, the last completion string above - ])}> - would be scored as follows: + + • Start with a total score of 0. + • Multiply the total score by 5 to get 0, then add the value of ] (2) to get a new total score of 2. + • Multiply the total score by 5 to get 10, then add the value of ) (1) to get a new total score of 11. + • Multiply the total score by 5 to get 55, then add the value of } (3) to get a new total score of 58. + • Multiply the total score by 5 to get 290, then add the value of > (4) to get a new total score of 294. + + The five lines' completion strings have total scores as follows: + + • }}]])})] - 288957 total points. + • )}>]}) - 5566 total points. + • }}>}>)))) - 1480781 total points. + • ]]}}]}]}> - 995444 total points. + • ])}> - 294 total points. + + Autocomplete tools are an odd bunch: the winner is found by sorting all of the scores and then taking the middle score. (There will always be an odd number of + scores to consider.) In this example, the middle score is 288957 because there are the same number of scores smaller and larger than it. + + Find the completion string for each incomplete line, score the completion strings, and sort the scores. What is the middle score? + + Your puzzle answer was 4245130838. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should return to your Advent calendar and try another puzzle. + + If you still want to see it, you can get your puzzle input. + +References + + Visible links + . https://adventofcode.com/ + . https://adventofcode.com/2021/about + . https://adventofcode.com/2021/events + . https://adventofcode.com/2021/settings + . https://adventofcode.com/2021/auth/logout + . Advent of Code Supporter + https://adventofcode.com/2021/support + . https://adventofcode.com/2021 + . https://adventofcode.com/2021 + . https://adventofcode.com/2021/support + . https://adventofcode.com/2021/sponsors + . https://adventofcode.com/2021/leaderboard + . https://adventofcode.com/2021/stats + . https://adventofcode.com/2021/sponsors + . https://adventofcode.com/2021 + . https://adventofcode.com/2021/day/10/input diff --git a/2021/day10/testinput b/2021/day10/testinput new file mode 100644 index 0000000..b1518d9 --- /dev/null +++ b/2021/day10/testinput @@ -0,0 +1,10 @@ +[({(<(())[]>[[{[]{<()<>> +[(()[<>])]({[<{<<[]>>( +{([(<{}[<>[]}>{[]{[(<()> +(((({<>}<{<{<>}{[]{[]{} +[[<[([]))<([[{}[[()]]] +[{[{({}]{}}([{[{{{}}([] +{<[[]]>}<{[{[{[]{()[[[] +[<(<(<(<{}))><([]([]() +<{([([[(<>()){}]>(<<{{ +<{([{{}}[<[[[<>{}]]]>[]]