package Ġme . gr ison . a oc . y 2 0 2 0 Ċ Ċ import Ġme . gr ison . a oc .* Ċ Ċ class ĠDay 1 4 Ġ: ĠDay ( 1 4 , Ġ 2 0 2 0 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtitle () Ġ= Ġ" Dock ing ĠData " ĊĊĠĠĠ Ġoverride Ġfun Ġpart One () Ġ= Ġrun Em ulator Ġ{ Ġmemory , Ġmask , Ġaddr , Ġvalue Ġ-> ĊĠĠĠĠĠĠĠ Ġmemory [ addr ] Ġ= Ġ( value Ġor Ġmask . replace (" X ", Ġ" 0 "). binary Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( mask . replace (" X ", Ġ" 1 "). binary Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two () Ġ= Ġrun Em ulator Ġ{ Ġmemory , Ġmask , Ġaddr , Ġvalue Ġ-> ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate Addresses ( addr : ĠLong , Ġmask : ĠString ): ĠSequence < Long > Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Addresses ( addr Ġ/ Ġ 2 , Ġmask . but Last ()). forEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mask . last ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' X ' Ġ-> Ġyield All ( 2 Ġ* Ġa Ġ.. Ġ 2 Ġ* Ġa Ġ+ Ġ 1 ) Ġ// Ġfloating , Ġmay Ġbe Ġ 0 Ġor Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 1 ' Ġ-> Ġyield ( 2 Ġ* Ġa Ġ+ Ġ 1 ) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoverwrite Ġwith Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 0 ' Ġ-> Ġyield ( 2 Ġ* Ġa Ġ+ Ġaddr Ġ% Ġ 2 ) ĠĠĠĠĠ Ġ// Ġkeep Ġcurrent Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġyield ( 0 L ) Ġ// Ġstop ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgenerate Addresses ( addr , Ġmask ). forEach Ġ{ Ġmemory [ it ] Ġ= Ġvalue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Em ulator ( version : Ġ( mem : ĠMutable Map < Long , ĠLong >, Ġm : ĠString , Ġa : ĠLong , Ġv : ĠLong ) Ġ-> ĠUnit ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Map Of < Long , ĠLong >(). let Ġ{ Ġmemory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmask Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput List . forEach Ġ{ Ġl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġl . after Last (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( l . substring ( 0 , Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mas " Ġ-> Ġmask Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mem " Ġ-> Ġversion ( memory , Ġmask , Ġl . between ("[ ", Ġ"] "). to Long (), Ġvalue . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemory . values . sum () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }