package Ġad vent of code . y 2 0 2 0 Ċ Ċ import Ġad vent of code . Ad vent Solution Ċ import Ġad vent of code . solve Ċ import Ġad vent of code . util . Simple Parser Ċ Ċ fun Ġmain () Ġ= ĠDay 1 4 . solve () Ċ Ċ object ĠDay 1 4 Ġ: ĠAd vent Solution ( 2 0 2 0 , Ġ 1 4 , Ġ" Dock ing ĠData ") Ċ { ĊĊĠĠĠ Ġoverride Ġfun Ġsolve Part One ( input : ĠString ): ĠLong ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmem Ġ= Ġmutable Map Of < Long , ĠLong >() ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġmask : ĠString ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply Mask ( i : ĠLong ): ĠLong ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġi . toString ( 2 ). pad Start ( 3 6 , Ġ' 0 ') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmask . zip ( str ) Ġ{ Ġm , Ġch Ġ-> Ġif Ġ( m Ġ== Ġ' X ') Ġch Ġelse Ġm Ġ}. toCharArray (). let (:: String ). to Long ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠSimple Parser < () Ġ-> ĠUnit >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (""" mem \[ (\ d +)\ ] Ġ= Ġ(\ d +) """) Ġ{ Ġ( adr , Ġv ) Ġ-> Ġ{ Ġmem [ adr . to Long ()] Ġ= Ġapply Mask ( v . to Long ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (""" mask Ġ= Ġ(. +) """) Ġ{ Ġ( s ) Ġ-> Ġ{ Ġmask Ġ= Ġs Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput . line Sequence (). map NotNull Ġ{ Ġparser . parse ( it ) Ġ}. forEach Ġ{ Ġit () Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmem . values . sum () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsolve Part Two ( input : ĠString ): ĠAny ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmem Ġ= Ġmutable Map Of < Long , ĠLong >() ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġmask : ĠString ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply Mask ( adr : ĠLong ): ĠLong Array ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġad r . toString ( 2 ). pad Start ( 3 6 , Ġ' 0 ') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmasked Ġ= ĠLong Array ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask . zip ( str ) Ġ{ Ġm , Ġch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmasked . indices ) Ġmasked [ i ] Ġ*= Ġ 2 L ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ== Ġ' X ' ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġmasked Ġ+= Ġmasked . map Ġ{ Ġit Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ== Ġ' 1 ' Ġ|| Ġch Ġ== Ġ' 1 ' Ġ-> Ġfor Ġ( i Ġin Ġmasked . indices ) Ġmasked [ i ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmasked ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠSimple Parser < () Ġ-> ĠUnit >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (""" mem \[ (\ d +)\ ] Ġ= Ġ(\ d +) """) Ġ{ Ġ( adr , Ġv ) Ġ-> Ġ{ Ġapply Mask ( adr . to Long ()). forEach Ġ{ Ġa Ġ-> Ġmem [ a ] Ġ= Ġv . to Long () Ġ} Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (""" mask Ġ= Ġ(. +) """) Ġ{ Ġ( s ) Ġ-> Ġ{ Ġmask Ġ= Ġs Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput . line Sequence (). map NotNull ( parser :: parse ). forEach Ġ{ Ġit () Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmem . values . sum () ĊĠĠĠ Ġ} Ċ } Ċ