package Ġpuzzle 7 Ċ Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġwh ale B uster Ġ= ĠWh ale B uster () ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Minimal Ġfuel Ġconsumption Ġis : Ġ${ wh ale B uster . find Cr ab Alignment () }") ĊĠĠĠĠĠĠĠ Ġprintln (" Total Ġfuel Ġconsumption Ġwith Ġcost Ġincreased Ġby Ġdistance Ġis : Ġ${ wh ale B uster . find Cr ab Alignment With Cost Problems () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" Time : Ġ${ time } ms ") Ċ } Ċ Ċ class ĠWh ale B uster Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinput Ġ= ĠWh ale B uster :: class . java . getResource ("/ input / pu zzle 7 . txt ") ĊĠĠĠĠĠĠĠ Ġ? . read Text () ĊĠĠĠĠĠĠĠ Ġ? . split (",") ĊĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġ?: ĠlistOf () ĊĊĠĠĠ Ġfun Ġfind Cr ab Alignment (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdistance Values Ġ= Ġ( 0 .. input . max Of Ġ{ Ġit Ġ}). associate With Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . sum Of Ġ{ Ġcr ab Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( cr ab Position Ġ- Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( distance Values ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Number Ġ= Ġinput . size ĊĠĠĠĠĠĠĠ Ġval Ġsorted Input Ġ= Ġinput . sorted () ĊĊĠĠĠĠĠĠĠ Ġval Ġmedian Ġ= Ġif Ġ( input Number Ġ% Ġ 2 Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Input [ floor ( input Number Ġ/ Ġ 2 . 0 ). toInt ()] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( sorted Input [ input Number Ġ/ Ġ 2 ] Ġ+ Ġsorted Input [ input Number Ġ/ Ġ 2 ]) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" median Ġis : Ġ$ median ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsorted Input . sum Of Ġ{ Ġabs ( it Ġ- Ġmedian ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Cr ab Alignment With Cost Problems (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdistance Values Ġ= Ġ( 0 .. input . max Of Ġ{ Ġit Ġ}). associate With Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . sum Of Ġ{ Ġcr ab Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġabs ( cr ab Position Ġ- Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( distance Ġ* Ġ( distance Ġ+ Ġ 1 ) Ġ/ Ġ 2 . 0 ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoptimal Position Ġ= Ġdistance Values . min By OrNull Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Opt imal ĠPosition Ġis : Ġ$ optimal Position ") ĊĠĠĠĠĠĠĠ Ġreturn Ġoptimal Position ?. value Ġ?: Ġ 0 ĊĠĠĠ Ġ} Ċ }