import Ġshared . get Lines Ċ Ċ private Ġval Ġinvalid Right Par ant heses Ġ= ĠRegex (""" [\ [< { ]\ ) """) Ċ private Ġval Ġinvalid Right Square Bracket Ġ= ĠRegex (""" [( <{ ]] """) Ċ private Ġval Ġinvalid Right S quir ly Bracket Ġ= ĠRegex (""" [\ [< ( ]} """) Ċ private Ġval Ġinvalid Right C ro cod ile Ġ= ĠRegex (""" [\ [ ({ ]> """) Ċ Ċ fun Ġtotal Syntax Score ( lines : ĠList < String >): ĠInt { ĊĠĠĠ Ġvar Ġright Par ant heses Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġright Square Bracket Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġright S quir ly Bracket Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġright C ro cod ile Ġ= Ġ 0 ĊĠĠĠ Ġfor ( line Ġin Ġlines ){ ĊĠĠĠĠĠĠĠ Ġval Ġcode Left Ġ= Ġremove Matches ( line ) ĊĠĠĠĠĠĠĠ Ġright Par ant heses Ġ+= Ġinvalid Right Par ant heses . findAll ( code Left ). count () ĊĠĠĠĠĠĠĠ Ġright Square Bracket Ġ+= Ġinvalid Right Square Bracket . findAll ( code Left ). count () ĊĠĠĠĠĠĠĠ Ġright S quir ly Bracket Ġ+= Ġinvalid Right S quir ly Bracket . findAll ( code Left ). count () ĊĠĠĠĠĠĠĠ Ġright C ro cod ile Ġ+= Ġinvalid Right C ro cod ile . findAll ( code Left ). count () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġright Par ant heses Ġ* Ġ 3 Ġ+ Ġright Square Bracket Ġ* Ġ 5 7 Ġ+ Ġright S quir ly Bracket Ġ* Ġ 1 1 9 7 Ġ+ Ġright C ro cod ile Ġ* Ġ 2 5 1 3 7 Ċ } Ċ Ċ private Ġfun Ġinvalid ( code : ĠString ): ĠBoolean { ĊĠĠĠ Ġval Ġcode Left Ġ= Ġremove Matches ( code ) ĊĠĠĠ Ġreturn Ġinvalid Right Par ant heses . contains Match In ( code Left ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Right Square Bracket . contains Match In ( code Left ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Right S quir ly Bracket . contains Match In ( code Left ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Right C ro cod ile . contains Match In ( code Left ) Ċ } Ċ Ċ fun Ġautocomplete Score ( lines : ĠList < String >): ĠLong { ĊĠĠĠ Ġval Ġscores Ġ= Ġlines . filter Ġ{ Ġ! invalid ( it ) Ġ}. map Ġ{ Ġcomplete Score ( it ) Ġ}. sorted () ĊĠĠĠ Ġreturn Ġscores [ scores . size / 2 ] Ċ } Ċ Ċ private Ġfun Ġcomplete Score ( code : ĠString ): ĠLong { ĊĠĠĠ Ġval Ġscore Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠPair (' )', Ġ 1 ), ĊĠĠĠĠĠĠĠ ĠPair (' ]', Ġ 2 ), ĊĠĠĠĠĠĠĠ ĠPair (' }', Ġ 3 ), ĊĠĠĠĠĠĠĠ ĠPair (' >', Ġ 4 ), ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġcomplete Ġ= Ġcomplete ( code ) ĊĠĠĠ Ġval Ġadded Ġ= Ġcomplete . replace ( code , Ġ"") ĊĠĠĠ Ġreturn Ġadded . fold ( 0 ){ Ġsum , Ġc Ġ-> Ġsum Ġ* Ġ 5 Ġ+ Ġscore [ c ] !! Ġ} Ċ } Ċ Ċ private Ġfun Ġcomplete ( code : ĠString ): ĠString { ĊĠĠĠ Ġif ( remove Matches ( code ). isEmpty ()) Ġreturn Ġcode ĊĠĠĠ Ġif (! invalid ("$ code ) ")) Ġreturn Ġcomplete ("$ code )") ĊĠĠĠ Ġif (! invalid ("$ code ] ")) Ġreturn Ġcomplete ("$ code ]") ĊĠĠĠ Ġif (! invalid ("$ code } ")) Ġreturn Ġcomplete ("$ code }") ĊĠĠĠ Ġif (! invalid ("$ code > ")) Ġreturn Ġcomplete ("$ code >") ĊĠĠĠ Ġthrow ĠException (" Should Ġbe Ġvalid Ġsymbol Ġinserted Ġbefore Ġthis ") Ċ } Ċ Ċ private Ġfun Ġremove Matches ( code : ĠString ): ĠString { ĊĠĠĠ Ġval Ġchanged Ġ= Ġpop Match ( code ) ĊĠĠĠ Ġreturn Ġif ( changed Ġ== Ġcode ) Ġcode Ġelse Ġremove Matches ( changed ) Ċ } Ċ Ċ private Ġfun Ġpop Match ( code : ĠString ) Ġ= Ġcode . replace ( Regex (""" \ (\ )| \ [] | <> |\ {} "" "), Ġ"") Ċ Ċ fun Ġmain (){ ĊĠĠĠ Ġval Ġlines Ġ= Ġget Lines (" day 1 0 . txt ") ĊĠĠĠ Ġval Ġtask 1 Ġ= Ġtotal Syntax Score ( lines ) ĊĠĠĠ Ġprintln ( task 1 ) ĊĠĠĠ Ġval Ġtask 2 Ġ= Ġautocomplete Score ( lines ) ĊĠĠĠ Ġprintln ( task 2 ) Ċ } Ċ