package Ġru . tim ak den . ad vent of code . year 2 0 1 5 . day 1 5 Ċ Ċ import Ġru . tim ak den . ad vent of code . Constants Ċ import Ġru . tim ak den . ad vent of code . Constants . Part . PART _ ONE Ċ import Ġru . tim ak den . ad vent of code . Constants . Part . PART _ TWO Ċ import Ġru . tim ak den . ad vent of code . measure Ċ import Ġkotlin . time . Experimental Time Ċ Ċ @ Experimental Time Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġmeasure Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Part ĠOne : Ġ${ solve ( input , ĠPART _ ONE )} ") ĊĠĠĠĠĠĠĠ Ġprintln (" Part ĠTwo : Ġ${ solve ( input , ĠPART _ TWO )} ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsolve ( input : ĠList < String >, Ġpart : ĠConstants . Part ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġhighest Ġ= ĠInt . MIN _ VALUE ĊĊĠĠĠ Ġval Ġingredients Ġ= Ġinput . map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= Ġ"\\ w + : |- ? \\ d ". to Regex () ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġregex . findAll ( it ). map Ġ{ Ġmatch Result Ġ-> Ġmatch Result . value Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠIng redient ( split ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcapacity : ĠInt ĊĠĠĠ Ġvar Ġdur ability : ĠInt ĊĠĠĠ Ġvar Ġflavor : ĠInt ĊĠĠĠ Ġvar Ġtexture : ĠInt ĊĠĠĠ Ġvar Ġcal ories : ĠInt ĊĠĠĠ Ġvar Ġtotal : ĠInt ĊĊĠĠĠ Ġ// ĠTODO : ĠÐŁ ÐµÑĢ ÐµÐ´ ÐµÐ» Ð°ÑĤÑĮ ĊĊĠĠĠ Ġ( 1 .. 1 0 0 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 Ġ- Ġi ). forEach Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 Ġ- Ġi Ġ- Ġj ). forEach Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( l Ġin Ġ 1 .. 1 0 0 Ġ- Ġi Ġ- Ġj Ġ- Ġk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġj Ġ+ Ġk Ġ+ Ġl Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġingredients . map Ġ{ Ġit . capacity Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( listOf ( i , Ġj , Ġk , Ġl )). sum Of Ġ{ Ġit . first Ġ* Ġit . second Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdur ability Ġ= Ġingredients . map Ġ{ Ġit . dur ability Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( listOf ( i , Ġj , Ġk , Ġl )). sum Of Ġ{ Ġit . first Ġ* Ġit . second Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflavor Ġ= Ġingredients . map Ġ{ Ġit . flavor Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( listOf ( i , Ġj , Ġk , Ġl )). sum Of Ġ{ Ġit . first Ġ* Ġit . second Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġ= Ġingredients . map Ġ{ Ġit . texture Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( listOf ( i , Ġj , Ġk , Ġl )). sum Of Ġ{ Ġit . first Ġ* Ġit . second Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal ories Ġ= Ġingredients . map Ġ{ Ġit . cal ories Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( listOf ( i , Ġj , Ġk , Ġl )). sum Of Ġ{ Ġit . first Ġ* Ġit . second Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġif Ġ( listOf ( capacity , Ġdur ability , Ġflavor , Ġtexture ). all Ġ{ Ġit Ġ> Ġ 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( capacity , Ġdur ability , Ġflavor , Ġtexture ). fold ( 1 ) Ġ{ Ġacc , Ġi Ġ-> Ġacc Ġ* Ġi Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPART _ TWO Ġ-> Ġif Ġ( total Ġ> Ġhighest Ġ&& Ġcal ories Ġ== Ġ 5 0 0 ) Ġhighest Ġ= Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( total Ġ> Ġhighest ) Ġhighest Ġ= Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ+ Ġj Ġ+ Ġk Ġ+ Ġl Ġ> Ġ 1 0 0 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġhighest Ċ } ĊĊ Ċ data Ġclass ĠIng redient ( ĊĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠ Ġvar Ġcapacity : ĠInt , ĊĠĠĠ Ġvar Ġdur ability : ĠInt , ĊĠĠĠ Ġvar Ġflavor : ĠInt , ĊĠĠĠ Ġvar Ġtexture : ĠInt , ĊĠĠĠ Ġvar Ġcal ories : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( split : ĠList < String >) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġsplit [ 0 ]. remove Suffix (" :" ), ĊĠĠĠĠĠĠĠ Ġsplit [ 1 ]. toInt (), ĊĠĠĠĠĠĠĠ Ġsplit [ 2 ]. toInt (), ĊĠĠĠĠĠĠĠ Ġsplit [ 3 ]. toInt (), ĊĠĠĠĠĠĠĠ Ġsplit [ 4 ]. toInt (), ĊĠĠĠĠĠĠĠ Ġsplit [ 5 ]. toInt () ĊĠĠĠ Ġ) Ċ } Ċ