import Ġjava . lang . RuntimeException Ċ Ċ fun Ġ< T > ĠList < T >. to Bul leted List (): ĠString Ġ{ ĊĠĠĠ Ġval Ġseparator Ġ= Ġ"\ n Ġ- Ġ" ĊĠĠĠ Ġreturn Ġthis . map Ġ{ Ġ"$ it " Ġ}. join ToString ( separator , Ġprefix Ġ= Ġseparator , Ġpostfix Ġ= Ġ"\ n ") Ċ } Ċ Ċ interface ĠCheck able Ġ{ ĊĠĠĠ Ġfun Ġcheck Is OK (): ĠBoolean Ċ } Ċ Ċ // Ġ 1 Ċ class ĠM over < T Ġ: ĠCheck able >( Ċ // Ġ 2 ĊĠĠĠ Ġthings To Move : ĠList < T >, Ġval Ġtr uck Height In In ches : ĠInt Ġ= Ġ( 1 2 Ġ* Ġ 1 2 ) Ċ ) Ġ{ ĊĠĠĠ Ġ// Ġ 3 ĊĠĠĠ Ġprivate Ġvar Ġthings Left In Old Place Ġ= Ġmutable ListOf < T >() ĊĠĠĠ Ġprivate Ġvar Ġthings In Tr uck Ġ= Ġmutable ListOf < Any >() ĊĠĠĠ Ġprivate Ġvar Ġthings In New Place Ġ= Ġmutable ListOf < T >() ĊĠĠĠ Ġprivate Ġvar Ġthings Which Failed Check Ġ= Ġmutable ListOf < T >() ĊĊĠĠĠ Ġ// Ġ 4 ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthings Left In Old Place . addAll ( thing sTo Move ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 5 ĊĠĠĠ Ġfun Ġmove Everything To Tr uck ( starting Container : ĠContainer < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Container Ġ= Ġstarting Container ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( things Left In Old Place . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġthings Left In Old Place . remove At ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . check Is OK ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Container Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! current Container . can Add Another Item ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Container To Tr uck ( current Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Container Ġ= Ġcurrent Container . get Another () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Container . addItem ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Packed Ġyour Ġ$ item !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthings In Tr uck . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Moved Ġyour Ġ$ item Ġto Ġthe Ġtr uck !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthings Which Failed Check . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġmove Ġyour Ġ$ item Ġto Ġthe Ġtr uck Ġ: [ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Container ?. let Ġ{ Ġmove Container To Tr uck ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove Container To Tr uck ( container : ĠContainer < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthings In Tr uck . add ( container ) ĊĠĠĠĠĠĠĠ Ġprintln (" Moved Ġa Ġcontainer Ġwith Ġyour Ġ${ container . contents (). to Bul leted List ()} Ġto Ġthe Ġtr uck Ġ! ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry To Move Item Into New Place ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . check Is OK ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthings In New Place . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Moved Ġyour Ġ$ item Ġinto Ġyour Ġnew Ġplace !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthings Which Failed Check . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġmove Ġyour Ġ$ item Ġinto Ġyour Ġnew Ġplace Ġ: [ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 6 ĊĠĠĠ Ġfun Ġmove Everything Into New Place () Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġbreak able Things Ġ= Ġthings In Tr uck . filter Is Instance < Break able Thing >() Ċ // ĠĠĠĠĠĠĠ Ġval Ġbreak able Things Ġ= Ġthings In Tr uck . filter Is Instance < T >() Ċ // ĠĠĠĠĠĠĠ Ġval Ġcontainers Ġ= Ġthings In Tr uck . filter Is Instance < Container <* >>() ĊĠĠĠĠĠĠĠ Ġval Ġcontainers Ġ= Ġthings In Tr uck . filter Is Instance < Container < T >>() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( container Ġin Ġcontainers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthings In Tr uck . remove ( container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( container . can Remove Another Item ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem In Container Ġ= Ġcontainer . removeItem () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Un packed Ġyour Ġ$ item In Container !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry To Move Item Into New Place ( item In Container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( things In Tr uck . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġthings In Tr uck . remove At ( 0 ) Ġas ? ĠT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry To Move Item Into New Place ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Something Ġin Ġthe Ġtr uck Ġwas Ġnot Ġof Ġthe Ġexpected Ġgeneric Ġtype : Ġ$ item ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if Ġ( item Ġis ĠContainer <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem In Container Ġ= Ġitem . removeItem () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . check Is OK ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthings In New Place . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Moved Ġyour Ġ$ item Ġinto Ġyour Ġnew Ġplace !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthings Which Failed Check . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġmove Ġyour Ġ$ item Ġinto Ġyour Ġnew Ġplace Ġ: [ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 7 ĊĠĠĠ Ġfun Ġfinish Move () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" OK , Ġwe Ġfinished ! ĠWe Ġwere Ġable Ġto Ġmove Ġyour :${ things In New Place . to Bul leted List () }") ĊĠĠĠĠĠĠĠ Ġif Ġ( things Which Failed Check . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" But Ġwe Ġneed Ġto Ġtalk Ġabout Ġyour :${ things Which Failed Check . to Bul leted List () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfits In Tr uck ( item Height : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtr uck Height In In ches Ġ> Ġitem Height ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠChe ap Thing ( val Ġname : ĠString ) Ġ: ĠCheck able Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Is OK (): ĠBoolean Ġ= Ġtrue Ċ } Ċ Ċ class ĠBreak able Thing ( val Ġname : ĠString , Ġvar Ġis Broken : ĠBoolean Ġ= Ġfalse ) Ġ: ĠCheck able Ġ{ ĊĠĠĠ Ġfun Ġsm ash () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Broken Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Is OK (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! is Broken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ 1 Ċ interface ĠContainer < T > Ġ{ ĊĠĠĠ Ġ// Ġ 2 ĊĠĠĠ Ġfun Ġcan Add Another Item (): ĠBoolean ĊĠĠĠ Ġfun Ġadd Item ( item : ĠT ) ĊĊĠĠĠ Ġ// Ġ 3 ĊĠĠĠ Ġfun Ġcan Remove Another Item (): ĠBoolean ĊĠĠĠ Ġfun Ġremove Item (): ĠT ĊĊĠĠĠ Ġ// Ġ 4 ĊĠĠĠ Ġfun Ġget Another (): ĠContainer < T > ĊĊĠĠĠ Ġ// Ġ 5 ĊĠĠĠ Ġfun Ġcontents (): ĠList < T > Ċ } Ċ Ċ class ĠCard board Box Ġ: ĠContainer < Break able Thing > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġitems Ġ= Ġmutable ListOf < Break able Thing >() ĊĊĠĠĠ Ġoverride Ġfun Ġcan Add Another Item (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . count () Ġ< Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Item ( item : ĠBreak able Thing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Remove Another Item (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Item (): ĠBreak able Thing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Item Ġ= Ġitems . last () ĊĠĠĠĠĠĠĠ Ġitems . remove ( last Item ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Another (): ĠContainer < Break able Thing > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCard board Box () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontents (): ĠList < Break able Thing > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . toList () ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ // ĠĠĠ Ġprintln (" Hello ĠWorld !") Ċ // Ċ // ĠĠĠ Ġ// ĠTry Ġadding Ġprogram Ġarguments Ġat ĠRun / Debug Ġconfiguration Ċ // ĠĠĠ Ġprintln (" Program Ġarguments : Ġ${ args . join ToString () }") ĊĠĠĠ Ġval Ġnames Ġ= ĠlistOf (" Bob ", Ġ" Car ol ", Ġ" T ed ", Ġ" Alice ") ĊĠĠĠ Ġprintln (" Names : Ġ${ names . to Bul leted List () }") ĊĠĠĠ Ġval ĠfirstName Ġ= Ġnames . first () ĊĠĠĠ Ġprintln ( firstName ) Ċ Ċ // ĠĠĠ Ġval Ġfirst Int : ĠInt Ġ= Ġnames . first () ĊĊĠĠĠ Ġval Ġthings Ġ= Ġmutable ListOf < Any >( 1 , Ġ 2 ) ĊĠĠĠ Ġthings . add (" Ste ve ") ĊĠĠĠ Ġprintln (" Things : Ġ${ things . to Bul leted List () }") ĊĊĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( Pair (" one ", Ġ 1 ), ĠPair (" two ", Ġ" II "), ĠPair (" three ", Ġ 3 . 0 f )) Ċ Ċ // ĠĠĠ Ġval Ġone Ġ= Ġmap . get ( 1 ) ĊĊĠĠĠ Ġval Ġvalues For Keys With E Ġ= Ġmap . keys . filter Ġ{ Ġit . contains (" e ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" Value Ġfor Ġ$ it : Ġ${ map [ it ]}" Ġ} ĊĠĠĠ Ġprintln (" Values Ġfor Ġkeys Ġwith ĠE : Ġ${ values For Keys With E . to Bul leted List () }") ĊĊĊĠĠĠ Ġval Ġche ap Things Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( Che ap Thing (" C inder ĠBlock Ġtable "), ĠChe ap Thing (" Box Ġof Ġold Ġbooks "), ĠChe ap Thing (" U gly Ġold Ġc ouch ")) ĊĠĠĠ Ġval Ġche ap M over Ġ= ĠM over ( che ap Things ) ĊĊĠĠĠ Ġche ap M over . move Everything To Tr uck ( null ) ĊĠĠĠ Ġche ap M over . move Everything Into New Place () ĊĠĠĠ Ġche ap M over . finish Move () ĊĊĊĠĠĠ Ġval Ġtele vision Ġ= ĠBreak able Thing (" Flat - Screen ĠTele vision ") ĊĠĠĠ Ġval Ġbreak able Things Ġ= ĠlistOf ( tele vision , ĠBreak able Thing (" Mirror "), ĠBreak able Thing (" G uit ar ")) ĊĠĠĠ Ġval Ġexpensive M over Ġ= ĠM over ( break able Things ) ĊĊĠĠĠ Ġexpensive M over . move Everything To Tr uck ( Card board Box ()) ĊĠĠĠ Ġtele vision . sm ash () ĊĠĠĠ Ġexpensive M over . move Everything Into New Place () ĊĠĠĠ Ġexpensive M over . finish Move () ĊĊĠĠĠ Ġ// ĠChallenge Ġ 1 ĊĠĠĠ Ġval Ġclass m ates Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠClass mate (" R alph ", Ġ" W ig g um "), ĊĠĠĠĠĠĠĠ ĠClass mate (" Jan ey ", Ġ" Pow ell "), ĊĠĠĠĠĠĠĠ ĠClass mate (" Sh er ri ", Ġ" M ack le berry "), ĊĠĠĠĠĠĠĠ ĠClass mate (" Ter ri ", Ġ" M ack le berry ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprintln (" Class m ates :") ĊĠĠĠ Ġclass m ates . print Names () ĊĊĠĠĠ Ġval Ġfamily Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠRelative (" Hom er ", Ġ" Simp son ", Ġ" F ather "), ĊĠĠĠĠĠĠĠ ĠRelative (" Mar ge ", Ġ" Simp son ", Ġ" M other "), ĊĠĠĠĠĠĠĠ ĠRelative (" B art ", Ġ" Simp son ", Ġ" Bro ther "), ĊĠĠĠĠĠĠĠ ĠRelative (" M agg ie ", Ġ" Simp son ", Ġ" S ister ") ĊĠĠĠ Ġ) ĊĠĠĠ Ġprintln (" Family :") ĊĠĠĠ Ġfamily . print Names () ĊĊĠĠĠ Ġ// ĠChallenge Ġ 2 ĊĠĠĠ Ġval Ġvehicles Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠVehicle (" Y am aha ", Ġ" V ino ", Ġ 4 0 ), ĊĠĠĠĠĠĠĠ ĠVehicle (" To y ota ", Ġ" Cor ol la ", Ġ 5 8 ), ĊĠĠĠĠĠĠĠ ĠVehicle (" Fre ight liner ", Ġ" C asc ad ia ", Ġ 1 5 0 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġvehicle M over Ġ= ĠM over ( vehicles ) ĊĊĠĠĠ Ġvehicles . forEach Ġ{ Ġit . height Check Function Ġ= Ġvehicle M over :: fits In Tr uck Ġ} ĊĊĠĠĠ Ġvehicle M over . move Everything To Tr uck ( Shipping Container ()) ĊĊĠĠĠ Ġvehicle M over . move Everything Into New Place () ĊĠĠĠ Ġvehicle M over . finish Move () ĊĊĠĠĠ Ġ// ĠChallenge Ġ 3 ĊĠĠĠ Ġvar Ġitems Ġ= Ġmutable ListOf < Check able >() ĊĠĠĠ Ġitems . addAll ( che ap Things ) ĊĠĠĠ Ġitems . addAll ( break able Things ) ĊĠĠĠ Ġitems . addAll ( vehicles ) ĊĠĠĠ Ġval Ġeverything M over Ġ= ĠM over ( items , Ġ 2 0 0 ) ĊĠĠĠ Ġvehicles . forEach Ġ{ Ġit . height Check Function Ġ= Ġeverything M over :: fits In Tr uck Ġ} ĊĊĠĠĠ Ġeverything M over . move Everything To Tr uck ( null ) ĊĠĠĠ Ġeverything M over . move Everything Into New Place () ĊĠĠĠ Ġeverything M over . finish Move () Ċ } Ċ Ċ // ĠChallenge Ġ 2 Ċ class ĠVehicle ( ĊĠĠĠ Ġval Ġbrand Name : ĠString , ĊĠĠĠ Ġval Ġmodel Name : ĠString , ĊĠĠĠ Ġval Ġheight In In ches : ĠInt Ċ ) Ġ: ĠCheck able Ġ{ ĊĊĠĠĠ Ġvar Ġheight Check Function : Ġ(( Int ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ brand Name Ġ$ model Name " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Is OK (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġheight Check Function ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . invoke ( height In In ches ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" You Ġmust Ġprovide Ġa Ġheight Ġcheck Ġfunction !") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSh ipping Container Ġ: ĠContainer < Vehicle > Ġ{ ĊĠĠĠ Ġvar Ġvehicle : ĠVehicle ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġcan Add Another Item (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvehicle Ġ== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Item ( item : ĠVehicle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vehicle Ġ= Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Remove Another Item (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvehicle Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Item (): ĠVehicle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem To Return Ġ= Ġvehicle !! ĊĠĠĠĠĠĠĠ Ġvehicle Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġitem To Return ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Another (): ĠContainer < Vehicle > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSh ipping Container () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontents (): ĠList < Vehicle > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= Ġmutable ListOf < Vehicle >() ĊĠĠĠĠĠĠĠ Ġvehicle ?. let Ġ{ Ġlist . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ // ĠChallenge Ġ 1 Ċ interface ĠPerson WithName Ġ{ ĊĠĠĠ Ġval ĠfirstName : ĠString ĊĠĠĠ Ġval ĠlastName : ĠString Ċ } Ċ Ċ class ĠClass mate ( ĊĠĠĠ Ġoverride Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġoverride Ġval ĠlastName : ĠString Ċ ) Ġ: ĠPerson WithName Ċ Ċ class ĠRelative ( ĊĠĠĠ Ġoverride Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġoverride Ġval ĠlastName : ĠString , ĊĠĠĠ Ġval Ġrelationship : ĠString Ċ ) Ġ: ĠPerson WithName Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ relationship : Ġ$ firstName Ġ$ lastName " ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠPerson WithName > ĠList < T >. print Names () Ġ{ ĊĠĠĠ ĠforEach Ġ{ Ġprintln ("${ it . firstName } Ġ${ it . lastName }") Ġ} Ċ }