import ĠDay 1 0 . Type . CLOSE Ċ import ĠDay 1 0 . Type . OPEN Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset . default Charset Ċ import Ġjava . util . Stack Ċ Ċ object ĠDay 1 0 Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBr acket ( val Ġbracket Type : ĠBr acket Type , Ġval Ġtype : ĠType ) ĊĊĠĠĠ Ġenum Ġclass ĠType Ġ{ ĠOPEN , ĠCLOSE Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠBr acket Type ( val Ġopen : ĠChar , Ġval Ġclose : ĠChar , Ġval Ġpoints : ĠInt , Ġval Ġauto Complete Score : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠS QUARE ('[ ', Ġ' ]', Ġ 5 7 , Ġ 2 ), ĊĠĠĠĠĠĠĠ ĠRO UND (' (', Ġ' )', Ġ 3 , Ġ 1 ), ĊĠĠĠĠĠĠĠ ĠBR ACE ('{ ', Ġ' }', Ġ 1 1 9 7 , Ġ 3 ), ĊĠĠĠĠĠĠĠ ĠAN GLE ('< ', Ġ'>', Ġ 2 5 1 3 7 , Ġ 4 ); ĊĊĠĠĠĠĠĠĠ Ġfun Ġmatch ( c : ĠChar ): ĠType ? Ġ= Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ-> ĠOPEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ-> ĠCLOSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . to Br ackets () Ġ= Ġthis . map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠ ĠBr acket Type . values (). first NotNull Of Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . match ( c )?. let Ġ{ ĠBr acket ( b , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPart 1 Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfind Invalid ( br ackets : ĠList < Bracket >): ĠBr acket Type ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠStack < Bracket >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrackets . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type Ġ== ĠCLOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopening Ġ= Ġstack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . bracket Type Ġ!= Ġopening . bracket Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . bracket Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" day 1 0 / input - real . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Lines ( default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġfind Invalid ( it . to Br ackets ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . points Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce ( Int :: plus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPart 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcomplete ( br ackets : ĠList < Bracket >): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠStack < Bracket >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrackets . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type Ġ== ĠCLOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopening Ġ= Ġstack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . bracket Type Ġ!= Ġopening . bracket Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stack . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstack . reversed (). fold ( 0 L ) Ġ{ Ġacc , Ġb Ġ-> Ġ( acc Ġ* Ġ 5 ) Ġ+ Ġb . bracket Type . auto Complete Score Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" day 1 0 / input - real . txt "). read Lines ( default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġcomplete ( it . to Br ackets ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it [ it . size / 2 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠDay 1 0 . Part 1 . run () ĊĠĠĠ ĠDay 1 0 . Part 2 . run () Ċ }