/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠJul ian ĠK och Ġand Ġcontributors Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġshared Ċ Ċ class ĠCh ip Dis pen ser Ġprivate Ġconstructor ( private Ġval Ġsorted Available Chips : ĠList < Int >) Ġ{ ĊĊĠĠĠ Ġval Ġlargest Chip Ġ= Ġsorted Available Chips . last () ĊĠĠĠ Ġval Ġsmallest Chip Ġ= Ġsorted Available Chips . first () ĊĊĠĠĠ Ġfun ĠgetNext Small er Chip ( smaller Than : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBinary Ġsearch Ġfor Ġsmaller Than ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġmodified Binary Search ( sorted Available Chips , Ġsmaller Than Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ< Ġ 0 ) Ġerror (" No Ġchip Ġsmaller Ġthan Ġ$ smaller Than ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsorted Available Chips [ idx ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT Ġ= ĠCh ip Dis pen ser ( listOf ( 1 , Ġ 5 , Ġ 2 0 , Ġ 5 0 , Ġ 2 5 0 , Ġ 1 0 0 0 , Ġ 5 0 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmodified Binary Search ( a : ĠList < Int >, Ġx : ĠInt , Ġl : ĠInt Ġ= Ġ 0 , Ġh : ĠInt Ġ= Ġa . size ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInvalid Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ġ> Ġh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEmpty Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ġ== Ġh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( l Ġ> Ġ 0 ) Ġl Ġ- Ġ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġmiddle Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġl Ġ+ Ġ( h Ġ- Ġ 1 Ġ- Ġl ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ> Ġa [ m ] Ġ-> Ġmodified Binary Search ( a , Ġx , Ġm Ġ+ Ġ 1 , Ġh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ< Ġa [ m ] Ġ-> Ġmodified Binary Search ( a , Ġx , Ġl , Ġm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ