import Ġjava . io . File ; Ċ import Ġjava . util . Stack ; Ċ Ċ val Ġmatches Ġ= Ġmap Of < Char , ĠChar >( ĊĠĠĠ Ġ')' Ġto Ġ' (', ĊĠĠĠ Ġ' ]' Ġto Ġ'[ ', ĊĠĠĠ Ġ' }' Ġto Ġ'{ ', ĠĊĠĠĠ Ġ' >' Ġto Ġ'< ' Ċ ) Ċ val Ġleft Chars Ġ= Ġmatches . values . toSet () Ċ val Ġcorrupted Values Ġ= Ġmap Of < Char , ĠInt >( ĊĠĠĠ Ġ')' Ġto Ġ 3 , ĠĊĠĠĠ Ġ' ]' Ġto Ġ 5 7 , ĊĠĠĠ Ġ' }' Ġto Ġ 1 1 9 7 , ĠĊĠĠĠ Ġ' >' Ġto Ġ 2 5 1 3 7 Ċ ) Ċ val Ġscore Values Ġ= Ġmap Of < Char , ĠInt >( ĊĠĠĠ Ġ')' Ġto Ġ 1 , ĠĊĠĠĠ Ġ' ]' Ġto Ġ 2 , ĊĠĠĠ Ġ' }' Ġto Ġ 3 , ĠĊĠĠĠ Ġ' >' Ġto Ġ 4 Ċ ) Ċ Ċ fun Ġmain ( args Ġ: ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= ĠFile ( args . first ()). read Lines () ĊĠĠĠ Ġprintln (" Solution Ġ 1 : Ġ" Ġ+ Ġsolution 1 ( input )) ĊĠĠĠ Ġprintln (" Solution Ġ 2 : Ġ" Ġ+ Ġsolution 2 ( input )) ĊĠĠĠĠĊĠĠĠ Ġ// ĠCAN NOT ĠUSE ĠSTRING ĠINTER PL ATION ĠBE CA USE ĠOF ĠSPECIAL ĠCHAR ACT ERS ĠIN ĠTHE ĠINPUT ĊĠĠĠ Ġ// Ġprintln (" Solution Ġ 1 : Ġ${ solution 1 ( input )} ") ĊĠĠĠ Ġ// Ġprintln (" Solution Ġ 2 : Ġ${ solution 2 ( input )} ") Ċ } Ċ Ċ private Ġfun Ġsolution 1 ( input : ĠList < String >) Ġ: Int Ġ{ ĊĠĠĠ Ġvar Ġcorrupted Ġ= Ġmutable ListOf < Char >() ĊĠĠĠ Ġfor Ġ( line Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsyntax Ġ= ĠStack < Char >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġin Ġleft Chars ) Ġ{ ĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyntax . push ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Match Ġ= Ġsyntax . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! should Match . equals ( matches . get ( c ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrupted . add ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġcorrupted Count Ġ= Ġcorrupted . grouping By Ġ{ Ġit Ġ}. each Count () ĊĠĠĠ Ġvar Ġsum Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ(( k , Ġv ) Ġ Ġin Ġcorrupted Values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsum Ġ+= Ġcorrupted Count . get ( k ) !! Ġ* Ġv ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsum Ċ } Ċ Ċ private Ġfun Ġsolution 2 ( input : ĠList < String >) Ġ: Long Ġ{ ĊĠĠĠ Ġval Ġreversed Matches Ġ= Ġmatches . entries . associate Ġ{ Ġ( key , Ġvalue ) Ġ-> Ġvalue Ġto Ġkey Ġ} ĊĠĠĠ Ġval Ġscores Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠ Ġfor Ġ( line Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsyntax Ġ= ĠStack < Char >() ĊĠĠĠĠĠĠĠ Ġvar Ġbroke Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġin Ġleft Chars ) Ġ{ ĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyntax . push ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Match Ġ= Ġsyntax . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! should Match . equals ( matches . get ( c ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroke Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! b roke ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcompletion Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! syntax . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġsyntax . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Ġ+= Ġreversed Matches . get ( match ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcompletion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= Ġ( score Ġ* Ġ 5 ) Ġ+ Ġscore Values . get ( c ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscores . add ( score ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġscores . sort () ĊĠĠĠ Ġreturn Ġscores . get ( scores . size / 2 ) Ġ Ġ// Ġsince Ġthe Ġlist Ġis Ġ 0 Ġbased , Ġdiv iding Ġthe Ġsize Ġby Ġ 2 Ġand Ġignoring Ġthe Ġremainder Ġgives Ġthe Ġmiddle Ġindex . Ċ }