package Ġk py . utils Ċ Ċ import Ġjava . util .* Ċ import Ġkotlin . Comparator Ċ import Ġkotlin . collections . Array Deque Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashSet Ċ import Ġkotlin . collections . Linked HashSet Ċ Ċ /* Ċ * ĠCollection Ġbuild ers Ġ& Ġextension Ġmethods Ċ * Ċ * Ġ@ author Ġjak ode Ċ * Ġ@ since Ġv 3 . 2 . 0 Ġ 0 8 / 2 3 / 2 0 2 1 Ċ */ Ċ Ċ inline Ġval Ġ< T > ĠCollection < T >. last Index : ĠInt Ġget () Ġ= Ġsize Ġ- Ġ 1 Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠArray Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArray Ċ Ġ*/ Ċ fun ĠarrayOf ( range : ĠInt Range ): ĠArray < Int > Ġ= Ġrange . toList (). to Typed Array () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠArray Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArray Ċ Ġ*/ Ċ fun ĠarrayOf ( range : ĠLong Range ): ĠArray < Long > Ġ= Ġrange . toList (). to Typed Array () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠList Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠList Ċ Ġ*/ Ċ fun ĠlistOf ( range : ĠInt Range ): ĠList < Int > Ġ= Ġrange . toList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠList Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠList Ċ Ġ*/ Ċ fun ĠlistOf ( range : ĠLong Range ): ĠList < Long > Ġ= Ġrange . toList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠMutable List Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠMutable List Ċ Ġ*/ Ċ fun Ġmutable ListOf ( range : ĠInt Range ): ĠMutable List < Int > Ġ= Ġrange . to Mutable List () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠMutable List Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠMutable List Ċ Ġ*/ Ċ fun Ġmutable ListOf ( range : ĠLong Range ): ĠMutable List < Long > Ġ= Ġrange . to Mutable List () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠSet Ċ Ġ*/ Ċ fun Ġset Of ( range : ĠInt Range ): ĠSet < Int > Ġ= Ġrange . toSet () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠSet Ċ Ġ*/ Ċ fun Ġset Of ( range : ĠLong Range ): ĠSet < Long > Ġ= Ġrange . toSet () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠMutable Set Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠMutable Set Ċ Ġ*/ Ċ fun Ġmutable Set Of ( range : ĠInt Range ): ĠMutable Set < Int > Ġ= Ġrange . to Mutable Set () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠMutable Set Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠMutable Set Ċ Ġ*/ Ċ fun Ġmutable Set Of ( range : ĠLong Range ): ĠMutable Set < Long > Ġ= Ġrange . to Mutable Set () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠHashSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠHashSet Ċ Ġ*/ Ċ fun Ġhash Set Of ( range : ĠInt Range ): ĠHashSet < Int > Ġ= Ġrange . to HashSet () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠHashSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠHashSet Ċ Ġ*/ Ċ fun Ġhash Set Of ( range : ĠLong Range ): ĠHashSet < Long > Ġ= Ġrange . to HashSet () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠLinked HashSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠLinked HashSet Ċ Ġ*/ Ċ fun Ġlinked Set Of ( range : ĠInt Range ): ĠLinked HashSet < Int > Ġ= ĠLinked HashSet ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠLinked HashSet Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠLinked HashSet Ċ Ġ*/ Ċ fun Ġlinked Set Of ( range : ĠLong Range ): ĠLinked HashSet < Long > Ġ= ĠLinked HashSet ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠSorted Set Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠSorted Set Ċ Ġ*/ Ċ fun Ġsorted Set Of ( range : ĠInt Range ): ĠSorted Set < Int > Ġ= Ġrange . to Sorted Set () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠSorted Set Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠSorted Set Ċ Ġ*/ Ċ fun Ġsorted Set Of ( range : ĠLong Range ): ĠSorted Set < Long > Ġ= Ġrange . to Sorted Set () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger ĠArrayList Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArrayList Ċ Ġ*/ Ċ fun Ġarray ListOf ( range : ĠInt Range ): ĠArrayList < Int > Ġ= ĠArrayList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong ĠArrayList Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArrayList Ċ Ġ*/ Ċ fun Ġarray ListOf ( range : ĠLong Range ): ĠArrayList < Long > Ġ= ĠArrayList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlinked Ġlist Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠLinkedList Ċ Ġ*/ Ċ fun Ġ< T > Ġlink edList Of ( var arg Ġelements : ĠT ): ĠLinkedList < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠLinkedList ( elements . toList ()) Ġelse ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġlinked Ġlist Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠLinkedList Ċ Ġ*/ Ċ fun Ġlink edList Of ( range : ĠInt Range ): ĠLinkedList < Int > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġlinked Ġlist Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠLinkedList Ċ Ġ*/ Ċ fun Ġlink edList Of ( range : ĠLong Range ): ĠLinkedList < Long > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġlinked Ġlist Ċ Ġ* Ġ@ see ĠLinkedList Ċ Ġ*/ Ċ fun Ġ< T > Ġlink edList Of (): ĠLinkedList < T > Ġ= ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġvector Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠVector Ċ Ġ*/ Ċ fun Ġ< T > Ġvector Of ( var arg Ġelements : ĠT ): ĠVector < T > Ġ= Ġif Ġ( elements . isNotEmpty ()) ĠVector ( elements . toList ()) Ġelse ĠVector () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġvector Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠVector Ċ Ġ*/ Ċ fun Ġvector Of ( range : ĠInt Range ): ĠVector < Int > Ġ= ĠVector ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġvector Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠVector Ċ Ġ*/ Ċ fun Ġvector Of ( range : ĠLong Range ): ĠVector < Long > Ġ= ĠVector ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġvector Ċ Ġ* Ġ@ see ĠVector Ċ Ġ* Ġ@ param Ġsize Ġdefault Ġsize Ġis Ġ 1 0 Ċ Ġ* Ġ@ param Ġincrement Step Ġdefault Ġstep Ġto Ġincrement Ġsize Ġis Ġzero Ċ Ġ*/ Ċ fun Ġ< T > Ġvector Of ( size : ĠInt Ġ= Ġ 1 0 , Ġincrement Step : ĠInt Ġ= Ġ 0 ): ĠVector < T > Ġ= ĠVector ( size , Ġincrement Step ) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġstack Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠStack Ċ Ġ*/ Ċ fun Ġ< T > Ġstack Of ( var arg Ġelements : ĠT ): ĠStack < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠStack < T >(). also Ġ{ Ġit . addAll ( elements . toList ()) Ġ} Ġelse ĠStack () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġstack Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠStack Ċ Ġ*/ Ċ fun Ġstack Of ( range : ĠInt Range ): ĠStack < Int > Ġ= ĠStack < Int >(). also Ġ{ Ġit . addAll ( range . toList ()) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġstack Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠStack Ċ Ġ*/ Ċ fun Ġstack Of ( range : ĠLong Range ): ĠStack < Long > Ġ= ĠStack < Long >(). also Ġ{ Ġit . addAll ( range . toList ()) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġstack Ċ Ġ* Ġ@ see ĠStack Ċ Ġ*/ Ċ fun Ġ< T > Ġstack Of (): ĠStack < T > Ġ= ĠStack () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġqueue Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠQueue Ċ Ġ*/ Ċ fun Ġ< T > Ġqueue Of ( var arg Ġelements : ĠT ): ĠQueue < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠLinkedList ( elements . toList ()) Ġelse ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠQueue Ċ Ġ*/ Ċ fun Ġqueue Of ( range : ĠInt Range ): ĠQueue < Int > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠQueue Ċ Ġ*/ Ċ fun Ġqueue Of ( range : ĠLong Range ): ĠQueue < Long > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġqueue Ċ Ġ* Ġ@ see ĠQueue Ċ Ġ*/ Ċ fun Ġ< T > Ġqueue Of (): ĠQueue < T > Ġ= ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġpriority Ġqueue Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠPriority Queue Ċ Ġ*/ Ċ fun Ġ< T > Ġpriority Queue Of ( var arg Ġelements : ĠT ): ĠPriority Queue < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠPriority Queue ( elements . toList ()) Ġelse ĠPriority Queue () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġpriority Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠPriority Queue Ċ Ġ*/ Ċ fun Ġpriority Queue Of ( range : ĠInt Range ): ĠPriority Queue < Int > Ġ= ĠPriority Queue ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġpriority Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠPriority Queue Ċ Ġ*/ Ċ fun Ġpriority Queue Of ( range : ĠLong Range ): ĠPriority Queue < Long > Ġ= ĠPriority Queue ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġpriority Ġqueue Ċ Ġ* Ġ@ see ĠPriority Queue Ċ Ġ* Ġ@ param Ġcomparator Ġinitiate Ġqueue Ġorder Ċ Ġ*/ Ċ fun Ġ< T > Ġpriority Queue Of ( comparator : ĠComparator < T >? Ġ= Ġnull ): ĠPriority Queue < T > Ġ= ĊĠĠĠ Ġcomparator . if NotNull Ġ{ ĠPriority Queue ( comparator ) Ġ}. or Default ( Priority Queue ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġdoub ly Ġqueue Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠDe que Ċ Ġ*/ Ċ fun Ġ< T > Ġdeque Of ( var arg Ġelements : ĠT ): ĠDe que < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠLinkedList ( elements . toList ()) Ġelse ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġdoub ly Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠDe que Ċ Ġ*/ Ċ fun Ġdeque Of ( range : ĠInt Range ): ĠDe que < Int > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġdoub ly Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠDe que Ċ Ġ*/ Ċ fun Ġdeque Of ( range : ĠLong Range ): ĠDe que < Long > Ġ= ĠLinkedList ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġdoub ly Ġqueue Ċ Ġ* Ġ@ see ĠDe que Ċ Ġ*/ Ċ fun Ġ< T > Ġdeque Of (): ĠDe que < T > Ġ= ĠLinkedList () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġarray Ġqueue Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠArray Deque Ċ Ġ*/ Ċ fun Ġ< T > Ġarray Deque Of ( var arg Ġelements : ĠT ): ĠArray Deque < T > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠArray Deque ( elements . toList ()) Ġelse ĠArray Deque () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġinteger Ġarray Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArray Deque Ċ Ġ*/ Ċ fun Ġarray Deque Of ( range : ĠInt Range ): ĠArray Deque < Int > Ġ= ĠArray Deque ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġlong Ġarray Ġqueue Ġfrom Ġrange Ċ Ġ* Ġ@ see ĠArray Deque Ċ Ġ*/ Ċ fun Ġarray Deque Of ( range : ĠLong Range ): ĠArray Deque < Long > Ġ= ĠArray Deque ( range . toList ()) Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġarray Ġqueue Ċ Ġ* Ġ@ see ĠArray Deque Ċ Ġ*/ Ċ fun Ġ< T > Ġarray Deque Of (): ĠArray Deque < T > Ġ= ĠArray Deque () Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġhash Ġtable Ġfrom Ġelements Ċ Ġ* Ġ@ see ĠHashtable Ċ Ġ*/ Ċ fun Ġ< T , ĠK > Ġhash Table Of ( var arg Ġelements : ĠPair < T , ĠK >): ĠHashtable < T , ĠK > Ġ= ĊĠĠĠ Ġif Ġ( elements . isNotEmpty ()) ĠHashtable ( elements . toMap ()) Ġelse ĠHashtable () Ċ Ċ /** Ċ Ġ* ĠReturn Ġan Ġempty Ġhash Ġtable Ċ Ġ* Ġ@ see ĠHashtable Ċ Ġ*/ Ċ fun Ġ< T , ĠK > Ġhash Table Of (): ĠHashtable < T , ĠK > Ġ= ĠHashtable () Ċ Ċ /** Ċ Ġ* ĠReturn Ġhead Ġof Ġthe Ġiterable Ċ Ġ* Ġ@ param Ġn Ġnumber Ġof Ġelements Ġreturn Ċ Ġ* Ġ@ return Ġsub list Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. head ( n : ĠInt Ġ= Ġ 1 0 ): ĠList < T > Ġ= Ġtake ( n ) Ċ Ċ /** Ċ Ġ* ĠReturn Ġhead Ġof Ġthe Ġarray Ċ Ġ* Ġ@ param Ġn Ġnumber Ġof Ġelements Ġreturn Ċ Ġ* Ġ@ return Ġsub list Ċ Ġ*/ Ċ fun Ġ< T > ĠArray < out ĠT >. head ( n : ĠInt Ġ= Ġ 1 0 ): ĠList < T > Ġ= Ġtake ( n ) Ċ Ċ /** Ċ Ġ* ĠReturn Ġtail Ġof Ġthe Ġiterable Ċ Ġ* Ġ@ param Ġn Ġnumber Ġof Ġelements Ġreturn Ċ Ġ* Ġ@ return Ġsub list Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. tail ( n : ĠInt Ġ= Ġ 1 0 ): ĠList < T > Ġ{ ĊĠĠĠ Ġval Ġlength Ġ= Ġcount () Ġ- Ġn ĊĠĠĠ Ġreturn Ġdrop ( if Ġ( length Ġ< Ġ 0 ) Ġ 0 Ġelse Ġlength ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturn Ġtail Ġof Ġthe Ġarray Ċ Ġ* Ġ@ param Ġn Ġnumber Ġof Ġelements Ġreturn Ċ Ġ* Ġ@ return Ġsub list Ċ Ġ*/ Ċ fun Ġ< T > ĠArray < out ĠT >. tail ( n : ĠInt Ġ= Ġ 1 0 ): ĠList < T > Ġ{ ĊĠĠĠ Ġval Ġlength Ġ= Ġsize Ġ- Ġn ĊĠĠĠ Ġreturn Ġdrop ( if Ġ( length Ġ< Ġ 0 ) Ġ 0 Ġelse Ġlength ) Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Int >. find Pair Of Sum ( sum : ĠInt ): ĠPair < Int , ĠInt >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Long >. find Pair Of Sum ( sum : ĠLong ): ĠPair < Long , ĠLong >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Float >. find Pair Of Sum ( sum : ĠFloat ): ĠPair < Float , ĠFloat >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Double >. find Pair Of Sum ( sum : ĠDouble ): ĠPair < Double , ĠDouble >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Int >. find Pair Of Sum ( sum : ĠInt ): ĠPair < Int , ĠInt >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Long >. find Pair Of Sum ( sum : ĠLong ): ĠPair < Long , ĠLong >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Float >. find Pair Of Sum ( sum : ĠFloat ): ĠPair < Float , ĠFloat >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtwo Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ...) Ċ Ġ* Ġx Ġ+ Ġy Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Double >. find Pair Of Sum ( sum : ĠDouble ): ĠPair < Double , ĠDouble >? Ġ{ ĊĠĠĠ Ġval Ġcomplement s Ġ= Ġassociate By Ġ{ Ġsum Ġ- Ġit Ġ} ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġnumber Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcomplement Ġ= Ġcomplement s [ number ] ĊĠĠĠĠĠĠĠ Ġcomplement ?. let Ġ{ ĠPair ( number , Ġcomplement ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Int >. find Triple Of Sum ( sum : ĠInt ): ĠTrip le < Int , ĠInt , ĠInt >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Long >. find Triple Of Sum ( sum : ĠLong ): ĠTrip le < Long , ĠLong , ĠLong >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Float >. find Triple Of Sum ( sum : ĠFloat ): ĠTrip le < Float , ĠFloat , ĠFloat >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Iterable ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠIterable < Double >. find Triple Of Sum ( sum : ĠDouble ): ĠTrip le < Double , ĠDouble , ĠDouble >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Int >. find Triple Of Sum ( sum : ĠInt ): ĠTrip le < Int , ĠInt , ĠInt >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Long >. find Triple Of Sum ( sum : ĠLong ): ĠTrip le < Long , ĠLong , ĠLong >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Float >. find Triple Of Sum ( sum : ĠFloat ): ĠTrip le < Float , ĠFloat , ĠFloat >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġtree Ġnumbers Ġinside Ġthe Ġ[ Array ] Ġwhose Ġsum Ġis Ġequal Ġto Ġthe Ġ[ sum ] Ġvariable Ċ Ġ* Ġ``` Ċ Ġ* Ġlist (... , Ġx , Ġ..., Ġy , Ġ..., Ġz ) Ċ Ġ* Ġx Ġ+ Ġy Ġ+ Ġz Ġ= Ġsum Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠArray < Double >. find Triple Of Sum ( sum : ĠDouble ): ĠTrip le < Double , ĠDouble , ĠDouble >? Ġ{ ĊĠĠĠ Ġreturn Ġfirst NotNull Of OrNull Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġx Ġ-> Ġ( y , Ġz ) Ġwhere Ġy Ġ+ Ġz Ġ= Ġsum Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġfind Pair Of Sum ( sum Ġ- Ġx ) ĊĠĠĠĠĠĠĠ Ġpair ?. let Ġ{ ĠTrip le ( x , Ġpair . first , Ġpair . second ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRefresh Ġa Ġlist Ġwith Ġclearing Ġand Ġadd Ġitems Ċ Ġ* Ġ@ param Ġitems Ċ Ġ* Ġ@ return Ġarray Ġlist Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable List < T >. refresh List ( items : ĠList < T >): ĠMutable List < T > Ġ{ ĊĠĠĠ Ġclear () ĊĠĠĠ Ġadd All ( items ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠRefresh Ġa Ġlist Ġwith Ġclearing Ġand Ġadd Ġitems Ċ Ġ* Ġ@ param Ġitems Ċ Ġ* Ġ@ return Ġarray Ġlist Ċ Ġ*/ Ċ fun Ġ< T > ĠArrayList < T >. refresh List ( items : ĠList < T >): ĠArrayList < T > Ġ{ ĊĠĠĠ Ġclear () ĊĠĠĠ Ġadd All ( items ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġnew Ġitems Ġto Ġlist Ċ Ġ* Ġ@ param Ġitems Ċ Ġ* Ġ@ return Ġarray Ġlist Ċ Ġ*/ Ċ fun Ġ< T > ĠMutable List < T >. add New Items ( items : ĠList < T >): ĠMutable List < T > Ġ{ ĊĠĠĠ Ġitems . forEach Ġ{ Ġif Ġ(! contains ( it )) Ġadd ( it ) Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġnew Ġitems Ġto Ġlist Ċ Ġ* Ġ@ param Ġitems Ċ Ġ* Ġ@ return Ġarray Ġlist Ċ Ġ*/ Ċ fun Ġ< T > ĠArrayList < T >. add New Items ( items : ĠList < T >): ĠArrayList < T > Ġ{ ĊĠĠĠ Ġitems . forEach Ġ{ Ġif Ġ(! contains ( it )) Ġadd ( it ) Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ }