package Ġutil Ċ Ċ // Ġmod ifiable Ġpairs Ġand Ġtuples Ċ class ĠTuple 2 < A , ĠB >( var Ġfirst : ĠA , Ġvar Ġsecond : ĠB ) Ġ{ Ċ ĉ operator Ġfun Ġcomponent 1 (): ĠA Ġ= Ġfirst Ċ ĉ operator Ġfun Ġcomponent 2 (): ĠB Ġ= Ġsecond ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġ" ($ first , Ġ$ second )" ĊĊ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċĉ ĉ if Ġ( other Ġ! is ĠTuple 2 < *, Ġ* >) Ġreturn Ġfalse ĊĊĉ ĉ if Ġ( first Ġ!= Ġother . first ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( second Ġ!= Ġother . second ) Ġreturn Ġfalse ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun ĠhashCode (): ĠInt Ġ{ Ċĉ ĉ var Ġresult Ġ= Ġfirst ?. hashCode () Ġ?: Ġ 0 Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( second ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ return Ġresult Ċ ĉ } Ċ } Ċ Ċ class ĠTuple 3 < A , ĠB , ĠC >( var Ġfirst : ĠA , Ġvar Ġsecond : ĠB , Ġvar Ġthird : ĠC ) Ġ{ Ċ ĉ operator Ġfun Ġcomponent 1 (): ĠA Ġ= Ġfirst Ċ ĉ operator Ġfun Ġcomponent 2 (): ĠB Ġ= Ġsecond Ċ ĉ operator Ġfun Ġcomponent 3 (): ĠC Ġ= Ġthird ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġ" ($ first , Ġ$ second , Ġ$ third )" ĊĊ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċĉ ĉ if Ġ( other Ġ! is ĠTuple 3 < *, Ġ*, Ġ* >) Ġreturn Ġfalse ĊĊĉ ĉ if Ġ( first Ġ!= Ġother . first ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( second Ġ!= Ġother . second ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( third Ġ!= Ġother . third ) Ġreturn Ġfalse ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun ĠhashCode (): ĠInt Ġ{ Ċĉ ĉ var Ġresult Ġ= Ġfirst ?. hashCode () Ġ?: Ġ 0 Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( second ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( third ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ return Ġresult Ċ ĉ } Ċ } Ċ Ċ class ĠTuple 4 < A , ĠB , ĠC , ĠD >( var Ġfirst : ĠA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsecond : ĠB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthird : ĠC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfourth : ĠD ) Ġ{ Ċ ĉ operator Ġfun Ġcomponent 1 (): ĠA Ġ= Ġfirst Ċ ĉ operator Ġfun Ġcomponent 2 (): ĠB Ġ= Ġsecond Ċ ĉ operator Ġfun Ġcomponent 3 (): ĠC Ġ= Ġthird Ċ ĉ operator Ġfun Ġcomponent 4 (): ĠD Ġ= Ġfourth ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġ" ($ first , Ġ$ second , Ġ$ third , Ġ$ four th )" ĊĊ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċĉ ĉ if Ġ( other Ġ! is ĠTuple 4 < *, Ġ*, Ġ*, Ġ* >) Ġreturn Ġfalse ĊĊĉ ĉ if Ġ( first Ġ!= Ġother . first ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( second Ġ!= Ġother . second ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( third Ġ!= Ġother . third ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( four th Ġ!= Ġother . four th ) Ġreturn Ġfalse ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun ĠhashCode (): ĠInt Ġ{ Ċĉ ĉ var Ġresult Ġ= Ġfirst ?. hashCode () Ġ?: Ġ 0 Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( second ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( third ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( four th ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ return Ġresult Ċ ĉ } Ċ } Ċ Ċ class ĠTuple 5 < A , ĠB , ĠC , ĠD , ĠE >( var Ġfirst : ĠA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsecond : ĠB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthird : ĠC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfourth : ĠD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf ifth : ĠE ) Ġ{ Ċ ĉ operator Ġfun Ġcomponent 1 (): ĠA Ġ= Ġfirst Ċ ĉ operator Ġfun Ġcomponent 2 (): ĠB Ġ= Ġsecond Ċ ĉ operator Ġfun Ġcomponent 3 (): ĠC Ġ= Ġthird Ċ ĉ operator Ġfun Ġcomponent 4 (): ĠD Ġ= Ġfourth Ċ ĉ operator Ġfun Ġcomponent 5 (): ĠE Ġ= Ġf ifth ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġ" ($ first , Ġ$ second , Ġ$ third , Ġ$ four th , Ġ$ f ifth )" ĊĊ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċĉ ĉ if Ġ( other Ġ! is ĠTuple 5 < *, Ġ*, Ġ*, Ġ*, Ġ* >) Ġreturn Ġfalse ĊĊĉ ĉ if Ġ( first Ġ!= Ġother . first ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( second Ġ!= Ġother . second ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( third Ġ!= Ġother . third ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( four th Ġ!= Ġother . four th ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( f ifth Ġ!= Ġother . f ifth ) Ġreturn Ġfalse ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun ĠhashCode (): ĠInt Ġ{ Ċĉ ĉ var Ġresult Ġ= Ġfirst ?. hashCode () Ġ?: Ġ 0 Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( second ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( third ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( four th ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( f ifth ?. hashCode () Ġ?: Ġ 0 ) Ċĉ ĉ return Ġresult Ċ ĉ } Ċ } Ċ Ċ // Ġ` tu ` Ġis Ġa Ġcustom Ġname Ġfor Ġ` to `, Ġso Ġthat Ġwe Ġcan Ġdistinguish Ġbetween ĠTuple Ġand ĠPair Ċ // Ġ` tu ` Ġsounds Ġsimilar Ġto Ġ` to ` Ġbut Ġactually Ġrepresents ĠT Up le Ċ infix Ġfun Ġ< A , ĠB > ĠA . tu ( second : ĠB ) Ġ= ĠTuple 2 ( this , Ġsecond ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC > ĠTuple 2 < A , ĠB >. tu ( third : ĠC ) Ġ= ĠTuple 3 ( first , Ġsecond , Ġthird ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC > ĠA . tu ( second And Third : ĠTuple 2 < B , ĠC >) Ġ= ĠTuple 3 ( this , Ċĉ ĉ second And Third . first , Ċĉ ĉ second And Third . second ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD > ĠTuple 3 < A , ĠB , ĠC >. tu ( four th : ĠD ) Ġ= ĠTuple 4 ( first , Ċĉ ĉ second , Ċĉ ĉ third , Ċĉ ĉ four th ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD > ĠTuple 2 < A , ĠB >. tu ( third And Four th : ĠTuple 2 < C , ĠD >) Ġ= ĠTuple 4 ( first , Ċĉ ĉ second , Ċĉ ĉ third And Four th . first , Ċĉ ĉ third And Four th . second ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD > ĠA . tu ( second And Third And Four th : ĠTuple 3 < B , ĠC , ĠD >) Ġ= ĠTuple 4 ( this , Ċĉ ĉ second And Third And Four th . first , Ċĉ ĉ second And Third And Four th . second , Ċĉ ĉ second And Third And Four th . third ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD , ĠE > ĠTuple 4 < A , ĠB , ĠC , ĠD >. tu ( f ifth : ĠE ) Ġ= ĠTuple 5 ( first , Ġsecond , Ġthird , Ġfourth , Ġf ifth ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD , ĠE > ĠTuple 3 < A , ĠB , ĠC >. tu ( four th And F ifth : ĠTuple 2 < D , ĠE >) Ġ= ĠTuple 5 ( first , Ċĉ ĉ second , Ċĉ ĉ third , Ċĉ ĉ four th And F ifth . first , Ċĉ ĉ four th And F ifth . second ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD , ĠE > ĠTuple 2 < A , ĠB >. tu ( third And Four th And F ifth : ĠTuple 3 < C , ĠD , ĠE >) Ġ= ĠTuple 5 ( first , Ċĉ ĉ second , Ċĉ ĉ third And Four th And F ifth . first , Ċĉ ĉ third And Four th And F ifth . second , Ċĉ ĉ third And Four th And F ifth . third ) Ċ Ċ infix Ġfun Ġ< A , ĠB , ĠC , ĠD , ĠE > ĠA . tu ( second And Third And Four th And F ifth : ĠTuple 4 < B , ĠC , ĠD , ĠE >) Ġ= ĠTuple 5 ( this , Ċĉ ĉ second And Third And Four th And F ifth . first , Ċĉ ĉ second And Third And Four th And F ifth . second , Ċĉ ĉ second And Third And Four th And F ifth . third , Ċĉ ĉ second And Third And Four th And F ifth . four th ) Ċ