package Ġday 2 5 Ċ Ċ import Ġjava . io . File Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġdata Ġ= Ġparse (" src / main / kotlin / day 2 5 / Day 2 5 . txt ") ĊĊĠĠĠ Ġval Ġanswer Ġ= Ġsolve ( data ) ĊĊĠĠĠ Ġprintln (" ðŁ İ Ħ ĠDay Ġ 2 5 ĠðŁİ Ħ ") ĊĠĠĠ Ġprintln (" Answer : Ġ$ answer ") Ċ } Ċ Ċ private Ġdata Ġclass ĠArea ( ĊĠĠĠ Ġval Ġwidth : ĠInt , ĊĠĠĠ Ġval Ġheight : ĠInt , ĊĠĠĠ Ġval Ġcells : ĠList < Char >, Ċ ) Ċ Ċ private Ġfun ĠArea . getIndex ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġxi Ġ= Ġif Ġ( x Ġ>= Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠ Ġx Ġ- Ġwidth ĊĠĠĠ Ġ} Ġelse Ġif Ġ( x Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġx Ġ+ Ġwidth ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġy i Ġ= Ġif Ġ( y Ġ>= Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġy Ġ- Ġheight ĊĠĠĠ Ġ} Ġelse Ġif Ġ( y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġy Ġ+ Ġheight ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġy i Ġ* Ġwidth Ġ+ Ġxi Ċ } Ċ Ċ private Ġfun Ġparse ( path : ĠString ): ĠArea Ġ= ĊĠĠĠ ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġ. read Lines () ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġlines Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġlines . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġlines [ 0 ]. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells Ġ= Ġlines . flatMap ( String :: toList ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠArea ( width , Ġheight , Ġcells ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġmove ( area : ĠArea , Ġher d : ĠChar ): ĠArea Ġ{ ĊĠĠĠ Ġval Ġdx Ġ= Ġif Ġ( her d Ġ== Ġ' >') Ġ 1 Ġelse Ġ 0 ĊĠĠĠ Ġval Ġdy Ġ= Ġif Ġ( her d Ġ== Ġ' >') Ġ 0 Ġelse Ġ 1 ĊĊĠĠĠ Ġval Ġprev Ġ= Ġarea . cells ĊĠĠĠ Ġval Ġnext Ġ= Ġprev . to Mutable List () ĊĊĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġarea . height ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġarea . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġarea . getIndex ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev [ index ] Ġ== Ġher d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Index Ġ= Ġarea . getIndex ( x Ġ+ Ġdx , Ġy Ġ+ Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev [ next Index ] Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ next Index ] Ġ= Ġher d ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext [ index ] Ġ= Ġ'.' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġarea . copy ( cells Ġ= Ġnext ) Ċ } Ċ Ċ private Ġfun Ġstep ( previous : ĠArea ): ĠArea Ġ{ ĊĠĠĠ Ġreturn Ġmove ( move ( previous , Ġ'> '), Ġ' v ') Ċ } Ċ Ċ private Ġfun Ġsolve ( area : ĠArea ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġ 1 Ġ+ Ġgenerate Sequence ( area ) Ġ{ Ġstep ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. zip With Next () ĊĠĠĠĠĠĠĠ Ġ. indexOf First Ġ{ Ġ( a 1 , Ġa 2 ) Ġ-> Ġa 1 Ġ== Ġa 2 Ġ} Ċ } Ċ