import Ġcom . ale xb . constraints . Problem Ċ import Ġcom . ale xb . constraints . core . constraints . Exact Sum Constraint Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ /* Ċ 1 0 0 Ġcoins Ġmust Ġsum Ġto Ġ$ 5 . 0 0 Ċ Ċ That 's Ġkind Ġof Ġa Ġcountry - specific Ġproblem , Ġsince Ġdepending Ġon Ġthe Ċ country Ġthere Ġare Ġdifferent Ġvalues Ġfor Ġcoins . ĠHere Ġis Ġpresented Ċ the Ġsolution Ġfor Ġa Ġgiven Ġset . Ċ */ Ċ Ċ fun Ġcoins (): ĠPair < List < Map < String , ĠInt >>, ĠList < String >> Ġ{ ĊĊĠĠĠ Ġfun ĠDouble . round ( n : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( n ) Ġ{ Ġm Ġ*= Ġ 1 0 Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . math . round ( this Ġ* Ġm ) Ġ/ Ġm ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtotal Ġ= Ġ 5 . 0 ĊĠĠĠ Ġval Ġvariables Ġ= ĠlistOf (" 0 . 0 1 ", Ġ" 0 . 0 5 ", Ġ" 0 . 1 0 ", Ġ" 0 . 5 0 ", Ġ" 1 . 0 0 ") ĊĠĠĠ Ġval Ġvalues Ġ= Ġvariables . map Ġ{ Ġit . toDouble () Ġ} ĊĠĠĠ Ġval Ġproblem Ġ= ĠProblem < String , ĠInt >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( variable , Ġvalue ) Ġin Ġvariables . zip ( values )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Variable ( variable , Ġ( 0 .. ( total Ġ/ Ġvalue ). toInt ()). toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Constraint ( Exact Sum Constraint ( 1 0 0 )) ĊĠĠĠĠĠĠĠ Ġadd Constraint ({ Ġamounts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( value , Ġamount ) Ġin Ġvalues . zip ( amount s )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġvalue Ġ* Ġamount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ= Ġsum . round ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ== Ġ 5 . 0 ĊĠĠĠĠĠĠĠ Ġ}, Ġvariables ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsolutions Ġ= Ġproblem . get Solutions () ĊĠĠĠ Ġreturn ĠPair ( solutions , Ġvariables ) Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġresult : ĠPair < List < Map < String , ĠInt >>, ĠList < String >> ĊĠĠĠ Ġval Ġt Ġ= Ġmeasure Time Millis Ġ{ Ġresult Ġ= Ġcoins () Ġ} ĊĠĠĠ Ġprintln (" Found Ġ${ result . first . size } Ġsolution ( s ) Ġin Ġ$ t Ġms \ n ") ĊĠĠĠ Ġval Ġ( solutions , Ġvariables ) Ġ= Ġresult ĊĠĠĠ Ġfor Ġ(( i , Ġsolution ) Ġin Ġsolutions . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( String . format (" Solution Ġ% 0 3 d : Ġ", Ġi Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġvariables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("${ v } x ${ solution [ v ]}, Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠ Ġ} Ċ } Ċ