import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset Ċ Ċ fun Ġmain () Ġ{ ĊĊĊĊĠĠĠ Ġfun Ġget Acc ( input Docs : ĠList < String >): ĠPair < Int , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsteps Ġ= Ġinput Docs . map Indexed Ġ{ Ġindex , Ġs Ġ-> ĠTrip le ( index , Ġs . split (" Ġ" )[ 0 ], Ġs . split (" Ġ" )[ 1 ]. toInt ()) Ġ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġseen Ġ= Ġmutable ListOf < Triple < Int , ĠString , Int >>() ĊĠĠĠĠĠĠĠ Ġvar Ġstep Ġ= Ġsteps [ 0 ] ĊĠĠĠĠĠĠĠ Ġvar Ġacc Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! seen . contains ( step )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseen . add ( step ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step . second Ġ== Ġ" jmp ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Step Ġ= Ġstep . first Ġ+ Ġstep . third ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Step Ġ< Ġsteps . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Ġ= Ġsteps [ next Step ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( acc , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step . second Ġ== Ġ" acc ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+= Ġ Ġstep . third ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Step Ġ= Ġstep . first Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Step Ġ< Ġsteps . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Ġ= Ġsteps [ next Step ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( acc , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( acc , Ġtrue ) ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtest Docs Ġ= ĠFile (" test / day 8 "). read Lines ( Charset . default Charset ()) ĊĠĠĠ Ġval Ġp uzz les Ġ= ĠFile (" pu zz les / day 8 "). read Lines ( Charset . default Charset ()) ĊĠĠĠ Ġprintln ( get Acc ( test Docs )) ĊĠĠĠ Ġprintln ( get Acc ( pu zz les )) ĊĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. test Docs . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsp are Docs Ġ= Ġtest Docs . map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġvar Ġreturn S Ġ= Ġs Ġ; Ġif Ġ( index Ġ== Ġi ) Ġ{ if Ġ( s . startsWith (" jmp ")) Ġ{ return S Ġ= Ġs . replace (" jmp ", Ġ" nop ")} Ġelse Ġ{ Ġreturn S Ġ= Ġs . replace (" nop ", Ġ" jmp ") Ġ} Ġ Ġ} Ġelse Ġ{} Ġ; Ġreturn S Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġans Ġ= Ġget Acc ( sp are Docs ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ans . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Changing Ġ$ i Ġ: Ġ${ ans . first }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. pu zz les . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsp are Docs Ġ= Ġp uzz les . map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġvar Ġreturn S Ġ= Ġs Ġ; Ġif Ġ( index Ġ== Ġi ) Ġ{ if Ġ( s . startsWith (" jmp ")) Ġ{ return S Ġ= Ġs . replace (" jmp ", Ġ" nop ")} Ġelse Ġ{ Ġreturn S Ġ= Ġs . replace (" nop ", Ġ" jmp ") Ġ} Ġ Ġ} Ġelse Ġ{} Ġ; Ġreturn S Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġans Ġ= Ġget Acc ( sp are Docs ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ans . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Changing Ġ$ i Ġ: Ġ${ ans . first }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊ Ċ } ĊĊĊĊ