package Ġday 0 7 Ċ Ċ import Ġread Input Ċ import Ġkotlin . math . max Ċ import Ġkotlin . collections . sum Of Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . min Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġread Input (" day 0 7 ") ĊĠĠĠ Ġprintln ( solve Part One ( input )) ĊĠĠĠ Ġprintln ( solve Part Two ( input )) Ċ } Ċ Ċ fun Ġsolve Part One ( input : ĠList < String >): ĠInt Ġ= Ġinput . to Input () ĊĠĠĠ Ġ. min Value Ġ{ Ġposition Ġ-> Ġlinear Consumption ( position ) Ġ} Ċ Ċ fun Ġsolve Part Two ( input : ĠList < String >): ĠInt Ġ= Ġinput . to Input () ĊĠĠĠ Ġ. min Value Ġ{ Ġposition Ġ-> Ġprogress ive Consumption ( position ) Ġ} ĊĊ Ċ private Ġfun ĠList < String >. to Input () Ġ= Ġfirst (). split (',' ). map Ġ{ Ġvalue Ġ-> Ġvalue . toInt () Ġ} Ċ Ċ private Ġfun ĠList < Int >. linear Consumption ( position : ĠInt ) Ġ= Ġsum Of Ġ{ Ġvalue Ġ-> Ġabs ( position Ġ- Ġvalue ) Ġ} Ċ Ċ private Ġfun ĠList < Int >. progress ive Consumption ( position : ĠInt ) Ġ= Ġsum Of Ġ{ Ġvalue Ġ-> ĊĠĠĠ Ġval Ġsteps Count Ġ= Ġabs ( position Ġ- Ġvalue ) ĊĠĠĠ Ġ( steps Count Ġ+ Ġ 1 ) Ġ* Ġsteps Count Ġ/ Ġ 2 Ċ } Ċ Ċ private Ġfun ĠList < Int >. min Value ( ĊĠĠĠ Ġblock : ĠList < Int >. ( position : ĠInt ) Ġ-> ĠInt , Ċ ): ĠInt Ġ{ ĊĠĠĠ Ġvar ĠmaxValue Ġ= ĠInt . MIN _ VALUE ĊĠĠĠ Ġvar Ġmin Value Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġon Each Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġmax ( max Value , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġmin ( min Value , Ġvalue ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrecursive Binary Search ( ĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġmin Value , ĊĠĠĠĠĠĠĠ Ġend Ġ= ĠmaxValue , ĊĠĠĠ Ġ) Ġ{ Ġindex Ġ-> Ġblock ( index ) Ġ} Ċ } Ċ Ċ private Ġfun Ġrecursive Binary Search ( ĊĠĠĠ Ġstart : ĠInt , ĊĠĠĠ Ġend : ĠInt , ĊĠĠĠ Ġselector : Ġ( position : ĠInt ) Ġ-> ĠInt Ċ ): ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( start Ġ== Ġend ) Ġreturn Ġselector ( start ) ĊĠĠĠ Ġval Ġstart Selector Ġ= Ġselector ( start ) ĊĠĠĠ Ġval Ġend Selector Ġ= Ġselector ( end ) ĊĠĠĠ Ġval Ġmiddle Ġ= Ġ( start Ġ+ Ġend ) Ġ/ Ġ 2 ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Selector Ġ< Ġend Selector Ġ-> Ġrecursive Binary Search ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġstart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġmiddle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Ġ= Ġselector ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrecursive Binary Search ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġif Ġ( start Ġ== Ġmiddle ) Ġmiddle Ġ+ Ġ 1 Ġelse Ġmiddle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġend , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Ġ= Ġselector ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ