@ file : Suppress (" ASS IGNED _ B UT _ NE VER _ ACC ES SED _ VARIABLE ", Ġ" UNUSED _ PARAMETER ", Ġ" UNUSED _ VARIABLE ", Ġ" UN RE ACH ABLE _ CODE ") Ċ Ċ package Ġorg . jetbrains . research . k ex . test Ċ Ċ import Ġorg . jetbrains . research . k ex . Intr insics . k ex Assert Ċ import Ġorg . jetbrains . research . k ex . Intr insics . k ex Un reachable Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Standard Copy Option Ċ Ċ class ĠI cf pc 2 0 1 8 Test Ġ{ ĊĠĠĠ Ġclass ĠZip Writer Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Zip ( name : ĠString ): ĠUnit Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠResults ( val Ġelements : ĠMutable Map < String , ĠResult >) Ġ: ĠMutable Map < String , ĠResult > Ġby Ġelements Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġread From Directory ( dir : ĠString ): ĠResults Ġ= ĠResults ( mutable Map Of ( dir Ġto ĠResult ( mutable Map Of ()))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmerge ( other : ĠResults ): ĠResults Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġthis . elements . toMap (). to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . put All ( other . elements ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResults ( elements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠResult ( val Ġsolutions : ĠMutable Map < String , ĠSolution >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Sorted Solutions (): ĠList < Pair < String , ĠSolution >> Ġ= Ġsolutions . toList (). sorted By Ġ{ Ġit . first Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSolution ( val Ġenergy : ĠLong , Ġval Ġtrace : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsolve () Ġ{} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġenum Ġclass ĠRun Mode Ġ{ ĊĠĠĠĠĠĠĠ ĠAS SE MB LE , ĠDIS AS SE MB LE , ĠRE AS SE MB LE , ĠSUB MIT , ĠALL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCommand Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġread ( str : ĠInputStream ): ĠCommand Ġ= ĠCommand () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠModel ( val Ġsize : ĠInt , Ġval Ġnum G rounded : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġread MDL ( inp : ĠInputStream ): ĠModel Ġ= ĠModel ( 1 0 , Ġ 1 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠModel ( 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSystem ( var Ġcurrent State : ĠState , Ġval Ġscore : ĠInt Ġ= Ġ 0 ) ĊĊĠĠĠ Ġclass ĠTrace ( val Ġtrace : ĠList < Command >, Ġval Ġsystem : ĠSystem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsolve () Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mode By ModelName ( name : ĠString ): ĠRun Mode Ġ= ĠRun Mode . values ()[ name . length Ġ% Ġ 5 ] ĊĠĠĠ Ġprivate Ġfun Ġget Solution ByName ( name : ĠString , Ġtarget : ĠModel , Ġsystem : ĠSystem ): ĠSolution Ġ= ĠSolution ( 1 0 0 , Ġname ) ĊĊĠĠĠ Ġ// Ġtodo : Ġcheck Ġsome Ġreach ability Ġconditions ĊĠĠĠ Ġfun Ġsubmit Checked ( result Dirs : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġresult Dirs . map Ġ{ ĠResults . read From Directory ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmerged Ġ= Ġresults . reduce Ġ{ Ġacc , Ġres Ġ-> Ġacc . merge ( res ) Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ(( task , Ġresult ) Ġin Ġmerged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġget Mode By ModelName ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠRun Mode . RE AS SE MB LE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Solution Ġ= Ġresult . get Sorted Solutions (). first (). second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . copy ( File ( best Solution . trace ). to Path (), ĠFile (" submit /$ task . nbt "). to Path (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStandard Copy Option . REPLACE _ EXIST ING , ĠStandard Copy Option . COPY _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Model Ġ= Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRun Mode . AS SE MB LE Ġ-> ĠModel . read MDL ( ByteArray InputStream (" models /${ task }_ tgt . mdl ". toByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠModel . read MDL ( ByteArray InputStream (" models /${ task }_ src . mdl ". toByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhave Solution Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( solution Name , Ġsolution ) Ġin Ġresult . get Sorted Solutions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrace File Ġ= ĠFile ( solution . trace ). inputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands : ĠMutable List < Command > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( trace File . available () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands Ġ+= ĠCommand . read ( trace File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrace ( commands , Ġsystem ). solve () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( system . currentState . matrix Ġ!= Ġtarget Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . copy ( File ( solution . trace ). to Path (), ĠFile (" submit /$ task . nbt "). to Path (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStandard Copy Option . REPLACE _ EXIST ING , ĠStandard Copy Option . COPY _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhave Solution Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Un reachable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! have Solution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ex Assert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġk ex Assert () ĊĠĠĠĠĠĠĠ ĠZip Writer (). create Zip (" submit /") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġportfolio Solve () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġ" task name " ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠModel . read MDL ( ByteArray InputStream (" models /${ task }_ tgt . mdl ". toByteArray ())) ĊĠĠĠĠĠĠĠ Ġval ĠinitialState Ġ= ĠState () ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem ( initialState ) ĊĠĠĠĠĠĠĠ Ġval Ġsolution Names Ġ= ĠlistOf (" gro unded _ slices ", Ġ" gro unded _ bounded _ slices ", Ġ" regions ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġinitialized Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġbest Solution Name Ġ= Ġ" none " ĊĠĠĠĠĠĠĠ Ġfor Ġ( solution Name Ġin Ġsolution Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsolution System Ġ= ĠSystem ( initialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġget Solution ByName ( solution Name , Ġtarget , Ġsolution System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolution . solve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( solution Name Ġ== Ġ" regions ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolution System Ġ= ĠSystem ( initialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Solution Ġ= Ġget Solution ByName (" regions _ dead locks ", Ġtarget , Ġsolution System ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Solution . solve () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( solution System . currentState . matrix Ġ== Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! initialized Ġ|| Ġsystem . score Ġ> Ġsolution System . score ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . currentState Ġ= Ġsolution System . currentState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }