package Ġday 2 4 Ċ Ċ import Ġjava . io . File Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġ( a , Ġb , Ġc ) Ġ= Ġparse (" src / main / kotlin / day 2 4 / Day 2 4 . txt ") ĊĊĠĠĠ Ġval Ġanswer 1 Ġ= Ġpart 1 ( a , Ġb , Ġc ) ĊĠĠĠ Ġval Ġanswer 2 Ġ= Ġpart 2 ( a , Ġb , Ġc ) ĊĊĠĠĠ Ġprintln (" ðŁ İ Ħ ĠDay Ġ 2 4 ĠðŁİ Ħ ") ĊĊĠĠĠ Ġprintln () ĊĊĠĠĠ Ġprintln ("[ Part Ġ 1 ]") ĊĠĠĠ Ġprintln (" Answer : Ġ$ answer 1 ") ĊĊĠĠĠ Ġprintln () ĊĊĠĠĠ Ġprintln ("[ Part Ġ 2 ]") ĊĠĠĠ Ġprintln (" Answer : Ġ$ answer 2 ") Ċ } Ċ Ċ /* Ċ Ġ* ĠThe Ġtrick iest Ġpart Ġof Ġthis Ġproblem Ġis Ġthat Ġthe ĠAL U Ġis Ġjust Ġa Ġr use . ĠThe Ġkey Ċ Ġ* Ġto Ġefficiently Ġsolving Ġthis Ġchallenge Ġis Ġin Ġanaly zing Ġthe Ġprogram Ġitself , Ċ Ġ* Ġnot Ġin Ġimplementing Ġthe Ġvirtual Ġmachine . ĠThis Ġis Ġthe Ġlogic Ġbehind Ġhow Ġthis Ċ Ġ* Ġsolution Ġworks : Ċ Ġ* Ċ Ġ* Ġ 1 ) ĠThe ĠMON AD Ġprogram Ġdoes Ġsome Ġwork Ġfor Ġevery Ġone Ġof Ġthe Ġ 1 4 - digits Ġwe Ġsupply Ċ Ġ* Ġto Ġit . ĠIf Ġwe Ġlook Ġinto Ġthe Ġprogram 's Ġcode Ġand Ġlook Ġat Ġeach Ġblock Ġstarting Ċ Ġ* Ġwith Ġinstruction Ġ" inp Ġw ", Ġwe Ġcan Ġobserve Ġthat Ġthe Ġblocks Ġare Ġsimilar , Ġthe Ċ Ġ* Ġonly Ġdifference Ġbetween Ġthem Ġbeing Ġ 3 Ġconstants Ġper Ġblock . Ċ Ġ* Ċ Ġ* Ġ 2 ) ĠTo Ġbetter Ġunderstand Ġwhat ĠMON AD Ġdoes , Ġwe Ġcan Ġde compile Ġthe Ġprogram Ġto Ġa Ċ Ġ* Ġhigher - level Ġlanguage , Ġor Ġeven Ġpseudo - code . ĠFor Ġexample , ĠI Ġconverted Ġevery Ċ Ġ* Ġinstruction Ġinto Ġa Ġformat Ġlike Ġthis : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġadd Ġx Ġ 2 5 Ġ-> Ġx Ġ:= Ġx Ġ+ Ġ 2 5 Ċ Ġ* ĠĠĠĠ Ġmul Ġy Ġz Ġ Ġ-> Ġy Ġ:= Ġy Ġ* Ġz Ċ Ġ* ĠĠĠĠ Ġeql Ġx Ġw Ġ Ġ-> Ġx Ġ:= Ġ 1 Ġif Ġx Ġ== Ġw Ġelse Ġ 0 Ċ Ġ* Ċ Ġ* ĠAt Ġthis Ġpoint Ġit 's Ġeasy Ġto Ġmerge Ġsome Ġoperations Ġtogether Ġand Ġsee Ġwhat Ċ Ġ* Ġeach Ġblock Ġis Ġreally Ġtrying Ġto Ġachieve . ĠU lt imately , Ġthis Ġis Ġwhat Ġthe Ġlogic Ċ Ġ* Ġfor Ġeach Ġdigit Ġlooks Ġlike , Ġin Ġpseudo - code : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġw Ġ:= Ġread () Ċ Ġ* ĠĠĠĠ Ġif Ġ( z Ġ% Ġ 2 6 Ġ+ Ġb ) Ġ== Ġw : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġz Ġ/ Ġa Ċ Ġ* ĠĠĠĠ Ġelse : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġz Ġ/ Ġa Ġ* Ġ 2 6 Ġ+ Ġw Ġ+ Ġc Ċ Ġ* Ċ Ġ* Ġwhere Ġa , Ġb , Ġand Ġc Ġare Ġsome Ġconstants . Ċ Ġ* Ċ Ġ* Ġ 3 ) ĠNow Ġwe Ġcan Ġanalyze Ġthe Ġconstants Ġto Ġgain Ġsome Ġadditional Ġinsight . ĠIt Ċ Ġ* Ġturns Ġout Ġthat Ġ' a ' Ġcan Ġever Ġonly Ġbe Ġ 1 Ġor Ġ 2 6 , Ġabs ( b ) Ġis Ġalways Ġbelow Ġ 2 6 , Ġand Ċ Ġ* Ġ' c ' Ġis Ġalways Ġbelow Ġ 2 6 . ĠThe Ġnumber Ġ 2 6 Ġseems Ġto Ġplay Ġthe Ġrole Ġof Ġa Ġbase ; Ċ Ġ* Ġregister Ġz Ġmay Ġbe Ġseen Ġas Ġa Ġbase - 2 6 Ġnumber Ġwith Ġthose Ġoperations : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġz Ġ:= Ġz Ġ* Ġ 2 6 Ġ+ Ġ( w Ġ+ Ġc ) ĠĠĠ Ġ; Ġappend Ġa Ġbase - 2 6 Ġdigit Ġto Ġthe Ġend Ċ Ġ* ĠĠĠĠ Ġz Ġ:= Ġz Ġ/ Ġ 2 6 ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ; Ġremove Ġthe Ġlast Ġbase - 2 6 Ġdigit Ċ Ġ* Ċ Ġ* ĠT aking Ġthe Ġabove Ġinto Ġaccount , Ġwe Ġcan Ġmodel Ġregister Ġz Ġas Ġa Ġstack , Ġwhere Ċ Ġ* Ġeach Ġcell Ġcontains Ġsome Ġbase - 2 6 Ġdigit , Ġand Ġwe Ġend Ġup Ġwith Ġthe Ġfollowing Ġtwo Ċ Ġ* Ġcases : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ[ a Ġ= Ġ 1 ] Ċ Ġ* ĠĠĠĠ Ġw Ġ:= Ġread () Ċ Ġ* ĠĠĠĠ Ġif Ġ( z Ġ% Ġ 2 6 Ġ+ Ġb ) Ġ== Ġw : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġz ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ; Ġno - op Ċ Ġ* ĠĠĠĠ Ġelse : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġz Ġ* Ġ 2 6 Ġ+ Ġw Ġ+ Ġc ĠĠĠĠĠĠĠĠĠ Ġ; Ġpush Ġdigit Ġ( w Ġ+ Ġc ) Ġonto Ġz Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ[ a Ġ= Ġ 2 6 ] Ċ Ġ* ĠĠĠĠ Ġw Ġ:= Ġread () Ċ Ġ* ĠĠĠĠ Ġif Ġ( z Ġ% Ġ 2 6 Ġ+ Ġb ) Ġ== Ġw : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġz Ġ/ Ġ 2 6 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ; Ġpop Ġdigit Ġfrom Ġz Ċ Ġ* ĠĠĠĠ Ġelse : Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġz Ġ:= Ġ( z Ġ/ Ġ 2 6 ) Ġ* Ġ 2 6 Ġ+ Ġw Ġ+ Ġc ĠĠ Ġ; Ġreplace Ġlast Ġdigit Ġof Ġz Ġwith Ġ( w Ġ+ Ġc ) Ċ Ġ* Ċ Ġ* Ġ 4 ) ĠThe Ġkey Ġinsight Ġhere Ġis Ġthat Ġwe Ġcan Ġpush Ġto Ġz Ġwhen Ġ' a ' Ġis Ġ 1 Ġand Ġpop Ġfrom Ċ Ġ* Ġz Ġwhen Ġ' a ' Ġis Ġ 2 6 . ĠIt Ġturns Ġout Ġthat Ġeach Ġof Ġthose Ġvalues Ġappear Ġexactly Ġ 7 Ċ Ġ* Ġtimes , Ġmeaning Ġthere Ġare Ġas Ġmany Ġp ushes Ġas Ġthere Ġare Ġp ops . ĠNow Ġthe Ġproblem Ċ Ġ* Ġreally Ġreduces Ġto Ġensuring Ġthat Ġthe Ġp ushes Ġand Ġp ops Ġare Ġbal anced , Ġsuch Ġthat Ċ Ġ* Ġwe Ġstart Ġand Ġend Ġwith Ġan Ġempty Ġstack Ġ( i . e . Ġ' z ' Ġequ all ing Ġ 0 ). Ċ Ġ* Ċ Ġ* Ġ 5 ) ĠWh enever Ġ' a ' Ġis Ġ 1 , Ġwe Ġwant Ġto Ġexecute Ġthe Ġsecond Ġcondition , Ġand Ġwhenever Ċ Ġ* Ġ' a ' Ġis Ġ 2 6 , Ġwe Ġwant Ġto Ġexecute Ġthe Ġfirst Ġcondition . ĠWe Ġalso Ġneed Ġto Ġensure Ċ Ġ* Ġthat Ġthe Ġdigit Ġwe 're Ġadding Ġand Ġremoving Ġis Ġthe Ġsame . ĠTherefore : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġw 1 Ġ+ Ġc 1 Ġ= Ġw 2 Ġ- Ġb 2 Ċ Ġ* Ċ Ġ* Ġwhere Ġsub script Ġ 1 Ġrefers Ġto Ġthe Ġconstants Ġat Ġpushing Ġand Ġ 2 Ġrefers Ġto Ġthe Ċ Ġ* Ġconstants Ġat Ġpop ping . Ċ Ġ* Ċ Ġ* ĠSo , Ġif Ġwe Ġcan Ġdetermine Ġthe Ġvalues Ġof Ġw 1 Ġand Ġw 2 , Ġthen Ġwe Ġknow Ġwhat Ġdigits Ċ Ġ* Ġmust Ġbe Ġplaced Ġat Ġthese Ġtwo Ġpositions Ġof Ġthe Ġmodel Ġnumber . ĠNote Ġthat , Ġwhen Ċ Ġ* Ġ' a ' Ġis Ġ 1 , Ġ' b ' Ġis Ġalways Ġgreater Ġthan Ġ 1 0 , Ġwhich Ġmeans Ġthat Ġthe Ġsecond Ċ Ġ* Ġcondition Ġis Ġalways Ġexecuted . Ċ Ġ* Ċ Ġ* ĠTo Ġsolve Ġfor Ġthose Ġtwo Ġvariables , Ġon Ġeach Ġpop Ġwe Ġcan Ġsimply Ġtry Ġevery Ċ Ġ* Ġcombination Ġof Ġdigits Ġfrom Ġ 9 - 1 Ġor Ġ 1 - 9 Ġ( depend ing Ġon Ġwhether Ġwe Ġneed Ġthe Ċ Ġ* Ġlargest Ġor Ġthe Ġsmallest Ġmodel Ġnumber ) Ġuntil Ġthe Ġcondition Ġabove Ġholds . Ċ Ġ*/ Ċ Ċ private Ġfun Ġparse ( path : ĠString ): ĠTrip le < List < Long >, ĠList < Long >, ĠList < Long >> Ġ{ ĊĠĠĠ Ġval Ġprogram Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠ Ġ. lines () ĊĊĠĠĠ Ġval Ġa Ġ= Ġmutable ListOf < Long >() ĊĠĠĠ Ġval Ġb Ġ= Ġmutable ListOf < Long >() ĊĠĠĠ Ġval Ġc Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠ Ġrepeat ( 1 4 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġa . add ( program [ offset Ġ+ Ġ 4 ]. split (" Ġ"). last (). to Long ()) ĊĠĠĠĠĠĠĠ Ġb . add ( program [ offset Ġ+ Ġ 5 ]. split (" Ġ"). last (). to Long ()) ĊĠĠĠĠĠĠĠ Ġc . add ( program [ offset Ġ+ Ġ 1 5 ]. split (" Ġ"). last (). to Long ()) ĊĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġ 1 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠTrip le ( a , Ġb , Ġc ) Ċ } Ċ Ċ private Ġfun Ġpart 1 ( a : ĠList < Long >, Ġb : ĠList < Long >, Ġc : ĠList < Long >): ĠString Ġ{ ĊĠĠĠ Ġval Ġdigits Ġ= ĠArray ( 1 4 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠ Ġval Ġstack Ġ= ĠArray Deque < Int >() ĊĊĠĠĠ Ġouter @ ĊĠĠĠ Ġfor Ġ( i 1 Ġin Ġ 0 .. 1 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( a [ i 1 ] Ġ== Ġ 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add Last ( i 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( w 1 Ġin Ġ 9 Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( w 2 Ġin Ġ 9 Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w 1 Ġ+ Ġc [ i 0 ] Ġ== Ġw 2 Ġ- Ġb [ i 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits [ i 0 ] Ġ= Ġw 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits [ i 1 ] Ġ= Ġw 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ outer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdigits . join ToString ( separator Ġ= Ġ"") Ċ } Ċ Ċ private Ġfun Ġpart 2 ( a : ĠList < Long >, Ġb : ĠList < Long >, Ġc : ĠList < Long >): ĠString Ġ{ ĊĠĠĠ Ġval Ġdigits Ġ= ĠArray ( 1 4 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠ Ġval Ġstack Ġ= ĠArray Deque < Int >() ĊĊĠĠĠ Ġouter @ ĊĠĠĠ Ġfor Ġ( i 1 Ġin Ġ 0 .. 1 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( a [ i 1 ] Ġ== Ġ 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add Last ( i 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġstack . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( w 1 Ġin Ġ 1 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( w 2 Ġin Ġ 1 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w 1 Ġ+ Ġc [ i 0 ] Ġ== Ġw 2 Ġ- Ġb [ i 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits [ i 0 ] Ġ= Ġw 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits [ i 1 ] Ġ= Ġw 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ outer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdigits . join ToString ( separator Ġ= Ġ"") Ċ } Ċ