import Ġjava . io . File Ċ Ċ fun Ġread Input () Ġ: ĠList < String > Ġ{ ĊĠĠĠ Ġreturn ĠFile (" input . txt ") ĊĠĠĠĠĠĠĠ Ġ. read Lines () Ċ } Ċ Ċ class ĠSyntax Checker Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠOPEN _ CHARS Ġ= ĠlistOf (' (', Ġ'[ ', Ġ'{ ', Ġ'< ') ĊĠĠĠĠĠĠĠ Ġval ĠMATCH Ġ= Ġmap Of (' (' Ġto Ġ' )', ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'[' Ġto Ġ' ]', ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'{ ' Ġto Ġ' }', ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'< ' Ġto Ġ' >') ĊĠĠĠĠĠĠĠ Ġval ĠS CORE _ TABLE Ġ= Ġmap Of (' )' Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' ]' Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' }' Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' >' Ġto Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalc Score ( line Ġ: ĠString ) Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġmutable ListOf < Char >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isIn complete ( line , Ġstack )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompletion Score ( stack . toList ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Incomplete ( line Ġ: ĠString , Ġstack Ġ: ĠMutable List < Char >) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġin ĠOPEN _ CHARS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack . isNotEmpty () Ġ&& ĠMATCH [ stack . last ()] Ġ== Ġch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompletion Score ( un matched Ġ: ĠList < Char >) Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġun matched . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ*= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= ĠS CORE _ TABLE [ MATCH [ ch ] !! ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsolve ( lines Ġ: ĠList < String >) Ġ: ĠLong Ġ{ ĊĠĠĠ Ġval Ġcompletion Scores Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠ Ġval Ġsyntax Checker Ġ= ĠSyntax Checker () ĊĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion Scores . add ( syntax Checker . calc Score ( line )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsorted Scores Ġ= Ġcompletion Scores . filter Ġ{ Ġit Ġ> Ġ 0 Ġ}. sorted By Ġ{ Ġit Ġ} ĊĠĠĠ Ġreturn Ġsorted Scores [ sorted Scores . size Ġ/ Ġ 2 ] Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= Ġread Input () ĊĠĠĠ Ġval Ġans Ġ= Ġsolve ( lines ) ĊĊĠĠĠ Ġprintln ( ans ) Ċ } Ċ