package Ġcom . github . dav io . a oc . y 2 0 2 1 Ċ Ċ import Ġcom . github . dav io . a oc . general . call Ċ import Ġcom . github . dav io . a oc . general . getInput As Sequence Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠDay 1 0 . getResult Part 1 () ĊĠĠĠ Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ ĠDay 1 0 . getResult Part 2 () ĊĠĠĠ Ġ}. call Ġ{ Ġprintln (" T ook Ġ$ it Ġms ") Ġ} Ċ } Ċ Ċ object ĠDay 1 0 Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ--- ĠDay Ġ 1 0 : ĠSyntax ĠS cor ing Ġ--- Ċ Ċ You Ġask Ġthe Ġsub mar ine Ġ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 . ĠAd jacent Ġ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 Ġcheck ers Ġactually Ġhave Ġcont ests Ġ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 . ĊĠĠĠ Ġ] : Ġ 5 7 Ġpoints . ĊĠĠĠ Ġ}: Ġ 1 1 9 7 Ġpoints . ĊĠĠĠ Ġ> : Ġ 2 5 1 3 7 Ġpoints . Ċ Ċ In Ġthe Ġabove Ġexample , Ġan Ġillegal Ġ) Ġwas Ġfound Ġtwice Ġ( 2 * 3 Ġ= Ġ 6 Ġpoints ), Ġan Ġillegal Ġ] Ġwas Ġfound Ġonce Ġ( 5 7 Ġpoints ), Ġan Ġillegal Ġ} Ġwas Ġfound Ġonce Ġ( 1 1 9 7 Ġpoints ), Ġand Ġan Ġillegal Ġ> Ġwas Ġfound Ġonce Ġ( 2 5 1 3 7 Ġpoints ). ĠSo , Ġthe Ġtotal Ġsyntax Ġerror Ġscore Ġfor Ġthis Ġfile Ġis Ġ 6 + 5 7 + 1 1 9 7 + 2 5 1 3 7 Ġ= Ġ 2 6 3 9 7 Ġpoints ! Ċ Ċ Find Ġthe Ġfirst Ġillegal Ġcharacter Ġin Ġeach Ġcorrupted Ġline Ġof Ġthe Ġnavigation Ġsubsystem . ĠWhat Ġis Ġthe Ġtotal Ġsyntax Ġerror Ġscore Ġfor Ġthose Ġerrors ? ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġval Ġopening Chars Ġ= ĠlistOf (' (', Ġ'[ ', Ġ'{ ', Ġ'< ') ĊĠĠĠ Ġprivate Ġval Ġclosing Chars Ġ= ĠlistOf (' )', Ġ' ]', Ġ' }', Ġ' >') ĊĠĠĠ Ġprivate Ġval Ġillegal Char Points Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ')' Ġto Ġ 3 , ĊĠĠĠĠĠĠĠ Ġ' ]' Ġto Ġ 5 7 , ĊĠĠĠĠĠĠĠ Ġ' }' Ġto Ġ 1 1 9 7 , ĊĠĠĠĠĠĠĠ Ġ' >' Ġto Ġ 2 5 1 3 7 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Result Part 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Input As Sequence (). map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠArray Deque < Char >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . first OrNull Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( opening Chars . contains ( c )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add Last ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Opening Char Ġ= Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Closing Char Ġ= Ġclosing Chars [ opening Chars . indexOf ( previous Opening Char )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Closing Char Ġ!= Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ line Ġ- ĠExpected Ġ$ expected Closing Char , Ġbut Ġfound Ġ$ c Ġinstead .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġillegal Char Points [ it ] Ġ} Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġ}. sum (). call Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ--- Ġ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 Ġcont ests ? Ġ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 Ġs cored Ġ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 Ġ 1 0 , Ġthen Ġadd Ġthe Ġvalue Ġof Ġ) Ġ( 1 ) Ġto Ġget Ġa Ġnew Ġtotal Ġscore Ġof Ġ 1 1 . ĊĠĠĠ ĠMultiply Ġthe Ġtotal Ġscore Ġby Ġ 5 Ġto Ġget Ġ 5 5 , Ġthen Ġadd Ġthe Ġvalue Ġof Ġ} Ġ( 3 ) Ġto Ġget Ġa Ġnew Ġtotal Ġscore Ġof Ġ 5 8 . ĊĠĠĠ ĠMultiply Ġthe Ġtotal Ġscore Ġby Ġ 5 Ġto Ġget Ġ 2 9 0 , Ġthen Ġadd Ġthe Ġvalue Ġof Ġ> Ġ( 4 ) Ġto Ġget Ġa Ġnew Ġtotal Ġscore Ġof Ġ 2 9 4 . Ċ Ċ The Ġfive Ġlines ' Ġcompletion Ġstrings Ġhave Ġtotal Ġscores Ġas Ġfollows : ĊĊĠĠĠ Ġ}} ]]) }) ] Ġ- Ġ 2 8 8 9 5 7 Ġtotal Ġpoints . ĊĠĠĠ Ġ) }> ]}) Ġ- Ġ 5 5 6 6 Ġtotal Ġpoints . ĊĠĠĠ Ġ}}> }> )))) Ġ- Ġ 1 4 8 0 7 8 1 Ġtotal Ġpoints . ĊĠĠĠ Ġ]] }} ]} ] }> Ġ- Ġ 9 9 5 4 4 4 Ġtotal Ġpoints . ĊĠĠĠ Ġ]) }> Ġ- Ġ 2 9 4 Ġ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 Ġ 2 8 8 9 5 7 Ġ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 ? ĊĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġval Ġsyntax Completion Char Points Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ')' Ġto Ġ 1 L , ĊĠĠĠĠĠĠĠ Ġ' ]' Ġto Ġ 2 L , ĊĠĠĠĠĠĠĠ Ġ' }' Ġto Ġ 3 L , ĊĠĠĠĠĠĠĠ Ġ' >' Ġto Ġ 4 L ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Result Part 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscores Ġ= Ġget Input As Sequence (). map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠArray Deque < Char >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Illegal Char Ġ= Ġline . any Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( opening Chars . contains ( c )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add Last ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Opening Char Ġ= Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Closing Char Ġ= Ġclosing Chars [ opening Chars . indexOf ( previous Opening Char )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Closing Char Ġ!= Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSyntax ( line , Ġhas Illegal Char , Ġif Ġ( has Illegal Char ) ĠArray Deque () Ġelse Ġstack ) ĊĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġsyntax Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! syntax . has Illegal Char Ġ&& Ġsyntax . stack . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġsyntax Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġsyntax . stack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġstack . reversed (). fold ( 0 L ) Ġ{ Ġacc , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclosing Char Ġ= Ġclosing Chars [ opening Chars . indexOf ( c )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( closing Char ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompletion Char Points Ġ= Ġsyntax Completion Char Points [ closing Char ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ* Ġ 5 L Ġ+ Ġcompletion Char Points ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ- Ġ$ points Ġtotal Ġpoints .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoints ĊĠĠĠĠĠĠĠ Ġ}. sorted (). toList () ĊĊĠĠĠĠĠĠĠ Ġprintln ( scores [ scores . size Ġ/ Ġ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠSyntax ( val Ġline : ĠString , Ġval Ġhas Illegal Char : ĠBoolean , Ġval Ġstack : ĠArray Deque < Char >) Ċ }