package Ġbiz . ko z io lek . ad vent of code . year 2 0 2 1 . day 0 7 Ċ Ċ import Ġbiz . ko z io lek . ad vent of code . find Input Ċ import Ġkotlin . math . abs Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġinput File Ġ= Ġfind Input ( object Ġ{}) ĊĠĠĠ Ġval Ġline Ġ= Ġinput File . buffered Reader (). read Lines (). first () ĊĊĠĠĠ Ġval Ġ( position , Ġcost ) Ġ= Ġfind Che ape st Position ( line , Ġ:: calculate Linear Cost ) ĊĠĠĠ Ġprintln (" Che ape st Ġposition Ġis Ġ$ position Ġwith Ġlinear Ġcost : Ġ$ cost ") ĊĊĠĠĠ Ġval Ġ( position 2 , Ġcost 2 ) Ġ= Ġfind Che ape st Position ( line , Ġ:: calculate Non Linear Cost ) ĊĠĠĠ Ġprintln (" Che ape st Ġposition Ġis Ġ$ position 2 Ġwith Ġnon - linear Ġcost : Ġ$ cost 2 ") Ċ } Ċ Ċ fun Ġfind Che ape st Position ( line : ĠString , Ġcost Function : Ġ( Int , ĠInt ) Ġ-> ĠInt ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠ Ġval Ġinitial Positions Ġ= Ġline . split (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toInt () Ġ} ĊĊĠĠĠ Ġreturn Ġ( 0 .. initial Positions . max Of Ġ{ Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdst Ġ-> ĠPair ( dst , Ġinitial Positions . sum Of Ġ{ Ġsrc Ġ-> Ġcost Function ( src , Ġdst ) Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. min By OrNull Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġfind Ġche ape st Ġposition ") Ċ } Ċ Ċ fun Ġcalculate Linear Cost ( source : ĠInt , Ġdestination : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġabs ( source Ġ- Ġdestination ) Ċ Ċ fun Ġcalculate Non Linear Cost ( source : ĠInt , Ġdestination : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġn Ġ= Ġabs ( source Ġ- Ġdestination ) ĊĠĠĠ Ġreturn Ġ(( 1 Ġ+ Ġn ) Ġ/ Ġ 2 . 0 Ġ* Ġn ). toInt () Ċ } Ċ