package Ġorg . and status . person sm er ger Ċ Ċ data Ġclass ĠModel Result ( val Ġmodel : ĠId Model , Ġval Ġperson Pairs : ĠList < Pers ons Pair >) Ġ{ ĊĠĠĠ Ġval Ġfitness : ĠLong Ġ= Ġperson Pairs . sum Of Ġ{ Ġit . fitness Ġ} ĊĠĠĠ Ġval Ġfailure Count : ĠInt Ġget () Ġ= Ġperson Pairs . count Ġ{ Ġit . failure Ġ} ĊĠĠĠ Ġval Ġis Success : ĠBoolean Ġget () Ġ= Ġfailure Count Ġ== Ġ 0 ĊĊĠĠĠ Ġfun Ġprint All () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Model And Failures () ĊĠĠĠĠĠĠĠ Ġprintln (" ---- Ġall Ġ------------- ") ĊĠĠĠĠĠĠĠ Ġperson Pairs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ it . case Id }. Ġ${ it . actual Sum } Ġ${ Ġif Ġ( it . success ) Ġ" success " Ġelse Ġ" failure "}," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġexpected Ġ${ it . expected }, Ġwas Ġ${ it . actual } Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint Model And Failures () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Summary () ĊĠĠĠĠĠĠĠ Ġprintln ( model ) ĊĠĠĠĠĠĠĠ Ġif Ġ( failure Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ---- Ġfailures Ġ-------- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Pairs . filter Ġ{ Ġit . failure Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ it . case Id }. Ġ${ it . actual Sum } Ġfailure , Ġexpected Ġ${ it . expected }, Ġwas Ġ${ it . actual } Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint Summary () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsums Text Ġ= Ġ" fitness : Ġ$ fitness , Ġsums : Ġ${ person Pairs . min Of Ġ{ Ġit . actual Sum Ġ}} Ġto Ġ${ person Pairs . max Of Ġ{ Ġit . actual Sum Ġ}}" ĊĠĠĠĠĠĠĠ Ġif Ġ( failure Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Success , Ġ$ sums Text ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Failed Ġ Ġ$ failure Count Ġof Ġ${ person Pairs . size } Ġcases , Ġ$ sums Text ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġevaluate ( model : ĠId Model ): ĠModel Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModel Result ( model , ĠPers ons Data . data . fold ( emptyList ()) Ġ{ Ġacc , Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Result Ġ= Ġmodel . identify ( pair . first , Ġpair . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġpair . copy ( actual Ġ= Ġid Result . result , Ġactual Sum Ġ= Ġid Result . sum , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġmodel . success ( pair . expected , Ġid Result ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfitness Ġ= Ġmodel . fitness ( pair . expected , Ġid Result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ } Ċ