import Ġjava . io . File Ċ import Ġkotlin . collections . ArrayList Ċ Ċ data Ġclass ĠInstruction ( var Ġname : ĠString , Ġval Ġarg : ĠInt , Ġvar Ġcalled : ĠBoolean Ġ= Ġfalse ) Ċ val Ġinstructions Ġ= ĠArrayList < Instruction >() Ċ File (" input / 2 0 2 0 / day 8 "). forEach Line Ġ{ ĊĠĠĠ Ġval Ġ( i , a ) Ġ= Ġit . split (" Ġ") ĊĠĠĠ Ġinstructions . add ( Instruction ( i , a . toInt ())) Ċ } Ċ Ċ fun Ġrun (): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġaccumulator Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( index Ġ< Ġinstructions . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġinstructions [ index ] ĊĠĠĠĠĠĠĠ Ġif Ġ( i . called ) Ġreturn Ġfalse Ġelse Ġi . called Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġif Ġ( i . name Ġ== Ġ" jmp ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ+ Ġi . arg ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i . name Ġ== Ġ" acc ") Ġaccumulator Ġ+= Ġi . arg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ( accumulator ) ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ instructions . filter Ġ{ Ġit . name Ġ!= Ġ" acc " Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ= Ġif Ġ( it . name Ġ== Ġ" nop ") Ġ" jmp " Ġelse Ġ" nop " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġrun () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) ĠSystem . exit ( 0 ) Ġelse Ġinstructions . forEach Ġ{ Ġit . called Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ= Ġif Ġ( it . name Ġ== Ġ" nop ") Ġ" jmp " Ġelse Ġ" nop " ĊĠĠĠĠĠĠĠ Ġ}