// ĠCopyright Ġ( c ) ĠAk op ĠKar ape ty an Ċ // Ċ // ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ // Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ // Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ // Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ // Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ // Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ // Ċ // ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ // Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ // Ċ // ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ // ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ // ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ // ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ // ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ // ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ // ĠSOFTWARE . Ċ Ċ package Ġorg . ak op . ar ar at . core Ċ Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġorg . ak op . ar ar at . util . sha 1 Ċ import Ġorg . ak op . ar ar at . util . to HexString Ċ Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashSet ĊĊ Ċ class ĠCross word Ġinternal Ġconstructor ( val Ġwidth : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsquare Count : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpid : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopyright : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate : ĠLong Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross : ĠList < Word >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down : ĠList < Word >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet : ĠSet < Char >? Ġ= Ġnull ) Ġ: ĠParcel able Ġ{ ĊĊĠĠĠ Ġval Ġwords Ac ross : ĠList < Word > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġwords Down : ĠList < Word > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġalphabet : ĠSet < Char > Ġ= ĠHashSet () ĊĊĠĠĠ Ġprivate Ġconstructor ( source : ĠParcel ): Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Count Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpid Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġsource . read Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross Ġ= Ġsource . create Typed ArrayList ( Word . CRE ATOR ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down Ġ= Ġsource . create Typed ArrayList ( Word . CRE ATOR ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet Ġ= Ġsource . create CharArray () !!. toSet ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġwords Ac ross ?. let Ġ{ Ġ( this . words Ac ross Ġas ĠMutable List ) Ġ+= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġwords Down ?. let Ġ{ Ġ( this . words Down Ġas ĠMutable List ) Ġ+= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġalphabet ?. let Ġ{ Ġ( this . alphabet Ġas ĠMutable Set ) Ġ+= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcell Map : ĠArray < Array < Cell ? >> Ġby Ġlazy Ġ{ Ġbuild Map () Ġ} ĊĠĠĠ Ġval Ġhash : ĠString Ġby Ġlazy Ġ{ Ġf emp ute Hash () Ġ} ĊĊĠĠĠ Ġclass ĠBuilder () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" width ") ĊĠĠĠĠĠĠĠ Ġvar Ġwidth : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" height ") ĊĠĠĠĠĠĠĠ Ġvar Ġheight : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" title ") ĊĠĠĠĠĠĠĠ Ġvar Ġtitle : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" description ") ĊĠĠĠĠĠĠĠ Ġvar Ġdescription : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" author ") ĊĠĠĠĠĠĠĠ Ġvar Ġauthor : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" copyright ") ĊĠĠĠĠĠĠĠ Ġvar Ġcopyright : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" comment ") ĊĠĠĠĠĠĠĠ Ġvar Ġcomment : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" date ") ĊĠĠĠĠĠĠĠ Ġvar Ġdate : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" flags ") ĊĠĠĠĠĠĠĠ Ġvar Ġflags : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" pid ") ĊĠĠĠĠĠĠĠ Ġvar Ġdf ac Pid Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġalphabet : ĠMutable Set < Char > Ġ= ĠHashSet ( ALPH AB ET _ EN GL ISH ) ĊĠĠĠĠĠĠĠ Ġval Ġwords : ĠMutable List < Word > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġconstructor ( cross word : ĠCross word ): Ġthis () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġcross word . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġcross word . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġcross word . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġcross word . description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġcross word . author ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġcross word . comment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright Ġ= Ġcross word . copyright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġcross word . date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġcross word . flags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet Ġ+= Ġcross word . alphabet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ġ+= Ġcross word . words Ac ross Ġ+ Ġcross word . words Down ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Width ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Height ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠsetTitle ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Description ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Author ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Copyright ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Comment ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Date ( value : ĠLong ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Flags ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Pid ( value : ĠInt ): ĠBuilder { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf ac Pid Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Word ( word : ĠWord ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ġ+= Ġword ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Alphabet ( alphabet : ĠSet < Char >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . alphabet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . alphabet Ġ+= Ġalphabet ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcount S quares (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdone Ġ= ĠArray ( height ) Ġ{ ĠBoolean Array ( width ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( word Ġin Ġwords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Ġ== ĠWord . DIR _ AC ROSS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! done [ word . start Row ][ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone [ word . start Row ][ it ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Ġ== ĠWord . DIR _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! done [ it ][ word . start Column ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone [ it ][ word . start Column ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠFIXME ĊĠĠĠĠĠĠĠ Ġfun Ġauto Number () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġaut on umber Ġleft - to - right , Ġtop - to - bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtuples Ġ= ĠArray ( words . size ) Ġ{ ĠInt Array ( 4 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġwords . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġwords [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtuples [ i ] Ġ= Ġint ArrayOf ( i , Ġword . start Row , Ġword . start Column , Ġword . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . sort ( tuples , ĠComparator Ġ{ Ġlhs , Ġrhs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lhs [ 1 ] Ġ!= Ġrhs [ 1 ]) Ġ{ Ġ// Ġsort Ġby Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġlhs [ 1 ] Ġ- Ġrhs [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lhs [ 2 ] Ġ!= Ġrhs [ 2 ]) Ġ{ Ġ// Ġsort Ġby Ġcolumn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġlhs [ 2 ] Ġ- Ġrhs [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lhs [ 3 ] Ġ!= Ġrhs [ 3 ]) Ġ{ Ġ// Ġsort Ġby Ġdirection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lhs [ 3 ] Ġ== ĠWord . DIR _ AC ROSS ) Ġ- 1 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġnever Ġget Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpr Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpc Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnumber Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tuple Ġin Ġtuples ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pr Ġ!= Ġtuple [ 1 ] Ġ|| Ġpc Ġ!= Ġtuple [ 2 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ tuple [ 0 ]]. number Ġ= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpr Ġ= Ġtuple [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpc Ġ= Ġtuple [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠCross word Ġ= ĠCross word ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Count Ġ= Ġcount S quares (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpid Ġ= Ġdf ac Pid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright Ġ= Ġcopyright , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġcomment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross Ġ= Ġwords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . direction Ġ== ĠWord . DIR _ AC ROSS Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . number Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down Ġ= Ġwords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . direction Ġ== ĠWord . DIR _ DOWN Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . number Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet Ġ= Ġalphabet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠnewState (): ĠCross word State Ġ= ĠCross word State ( pid , Ġwidth , Ġheight ) ĊĊĠĠĠ Ġfun Ġprevious Word ( word : ĠWord ?): ĠWord ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( word Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠindexOf ( word . direction , Ġword . number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ- 1 Ġ&& Ġword . direction Ġ== ĠWord . DIR _ AC ROSS Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ 0 Ġ-> Ġreturn Ġwords Ac ross [ index Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down . isNotEmpty () Ġ-> Ġreturn Ġwords Down . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ- 1 Ġ&& Ġword . direction Ġ== ĠWord . DIR _ DOWN Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ 0 Ġ-> Ġreturn Ġwords Down [ index Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross . isNotEmpty () Ġ-> Ġreturn Ġwords Ac ross . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down . isNotEmpty () Ġ-> Ġwords Down . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross . isNotEmpty () Ġ-> Ġwords Ac ross . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext Word ( word : ĠWord ?): ĠWord ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( word Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠindexOf ( word . direction , Ġword . number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ- 1 Ġ&& Ġword . direction Ġ== ĠWord . DIR _ AC ROSS Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ< Ġwords Ac ross . last Index Ġ-> Ġreturn Ġwords Ac ross [ index Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down . isNotEmpty () Ġ-> Ġreturn Ġwords Down . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ> Ġ- 1 Ġ&& Ġword . direction Ġ== ĠWord . DIR _ DOWN Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ< Ġwords Down . last Index Ġ-> Ġreturn Ġwords Down [ index Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross . isNotEmpty () Ġ-> Ġreturn Ġwords Ac ross . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ac ross . isNotEmpty () Ġ-> Ġwords Ac ross . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Down . isNotEmpty () Ġ-> Ġwords Down . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Word ( direction : ĠInt , Ġnumber : ĠInt ): ĠWord ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠindexOf ( direction , Ġnumber ) ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ AC ROSS Ġ-> Ġwords Ac ross [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ DOWN Ġ-> Ġwords Down [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid Ġword Ġdirection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Word ( direction : ĠInt , Ġrow : ĠInt , Ġcolumn : ĠInt ): ĠWord ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ AC ROSS Ġ-> Ġwords Ac ross . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Row Ġ== Ġrow Ġ&& Ġcolumn Ġ>= Ġit . start Column ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcolumn Ġ< Ġit . start Column Ġ+ Ġit . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ DOWN Ġ-> Ġwords Down . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Column Ġ== Ġcolumn Ġ&& Ġrow Ġ>= Ġit . start Row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġrow Ġ< Ġit . start Row Ġ+ Ġit . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid Ġword Ġdirection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠindexOf ( direction : ĠInt , Ġnumber : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ AC ROSS Ġ-> Ġwords Ac ross . indexOf First Ġ{ Ġit . number Ġ== Ġnumber Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ DOWN Ġ-> Ġwords Down . indexOf First Ġ{ Ġit . number Ġ== Ġnumber Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid Ġword Ġdirection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġf emp ute Hash (): ĠString Ġ= ĠByteArrayOutputStream (). use Ġ{ Ġs Ġ-> ĊĠĠĠĠĠĠĠ ĠCross word Writer ( s ). use Ġ{ Ġit . write For Hash ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġs . toByteArray () ĊĠĠĠ Ġ}. sha 1 (). to HexString () ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Map (): ĠArray < Array < Cell ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠArray ( height ) Ġ{ ĠarrayOf Null s < Cell >( width ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġwords Ac ross . forEach Ġ{ Ġword Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġix , Ġcol Ġ-> Ġmap [ word . start Row ][ col ] Ġ= Ġword . cells [ ix ] Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwords Down . forEach Ġ{ Ġword Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġword . direction Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġix , Ġrow Ġ-> Ġmap [ row ][ word . start Column ] Ġ= Ġword . cells [ ix ] Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFIXME : Ġthis Ġshouldn 't Ġbe Ġhere ĊĠĠĠ Ġfun Ġupdate State Statistics ( state : ĠCross word State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . width Ġ!= Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" State Ġwidth Ġdoesn 't Ġmatch Ġpuzzle Ġwidth ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( state . height Ġ!= Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" State Ġheight Ġdoesn 't Ġmatch Ġpuzzle Ġheight ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtotal Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsolved Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġche ated Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġunknown Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġwrong Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġdone Ġ= ĠArray ( height ) Ġ{ ĠBoolean Array ( width ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPos () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( word Ġin Ġwords Ac ross Ġ+ Ġwords Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. word . cells . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( word . direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ AC ROSS Ġ-> Ġp . set ( word . start Row , Ġword . start Column Ġ+ Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWord . DIR _ DOWN Ġ-> Ġp . set ( word . start Row Ġ+ Ġi , Ġword . start Column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unexpected Ġdirection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( done [ p . r ][ p . c ]) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Char Ġ= Ġstate . char Matrix [ p . r ][ p . c ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġword . cells [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell . attr Flags . toInt () Ġand ĠCell . ATTR _ NO _ SOL UTION Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġstate Char Ġ!= Ġnull Ġ-> Ġunknown Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . contains ( state Char ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġstate . is Flag Set ( Cross word State . FLAG _ CHE ATED , Ġp . r , Ġp . c ) Ġ-> Ġche ated Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . contains ( state Char ) Ġ-> Ġsolved Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Char Ġ!= Ġnull Ġ-> Ġwrong Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone [ p . r ][ p . c ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate . set Square Stats ( solved Count , Ġche ated Count , Ġwrong Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Count , Ġtotal Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġparcel Flags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( width ) ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( height ) ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( square Count ) ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( flags ) ĊĠĠĠĠĠĠĠ Ġdest . writeInt ( pid ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( title ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( description ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( author ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( copyright ) ĊĠĠĠĠĠĠĠ Ġdest . writeString ( comment ) ĊĠĠĠĠĠĠĠ Ġdest . write Long ( date ) ĊĠĠĠĠĠĠĠ Ġdest . write Typed List ( words Ac ross ) ĊĠĠĠĠĠĠĠ Ġdest . write Typed List ( words Down ) ĊĠĠĠĠĠĠĠ Ġdest . write CharArray ( alphabet . toCharArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġhash . hashCode () ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġ( other Ġas ? ĠCross word )?. hash Ġ== Ġhash ĊĊĠĠĠ Ġclass ĠCell Ġinternal Ġconstructor ( val Ġchars : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattr Flags : ĠByte Ġ= Ġ 0 ): ĠParcel able Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġchars . isEmpty () ĊĊĠĠĠĠĠĠĠ Ġval Ġis Circ led : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġattr Flags . toInt () Ġand ĠATTR _ C IRC LED Ġ== ĠATTR _ C IRC LED ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconstructor ( source : ĠParcel ): Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchars Ġ= Ġsource . readString () !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr Flags Ġ= Ġsource . read Byte ()) ĊĊĠĠĠĠĠĠĠ Ġfun Ġchars (): ĠString Ġ= Ġchars ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġcontains ( char S ought : ĠString ?): ĠBoolean Ġ= Ġchars Ġ== Ġchar S ought ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeString ( chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . write Byte ( attr Flags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġwhen Ġ( chars . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġchars [ 0 ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" [$ chars ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠATTR _ C IRC LED Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠATTR _ NO _ SOL UTION Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Cell > Ġ= Ġobject Ġ: ĠParcel able . Creator < Cell > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠCell Ġ= ĠCell ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Cell ?> Ġ= ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠWord Ġinternal Ġconstructor ( val Ġnumber : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhint : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Row : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Column : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhint Url : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc itation : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells : ĠArray < Cell > ?) Ġ: ĠParcel able Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠFIXME : ĠMutable ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġcells : ĠArray < Cell > ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cells Ġ= Ġcells ?. copyOf () Ġ?: ĠEMPTY _ CELL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ!= ĠDIR _ AC ROSS Ġ&& Ġdirection Ġ!= ĠDIR _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Direction Ġnot Ġvalid : Ġ$ direction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlength : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcells . size ĊĊĠĠĠĠĠĠĠ Ġval Ġdirection Range : ĠInt Range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIR _ AC ROSS Ġ-> Ġ( start Column .. start Column Ġ+ Ġcells . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIR _ DOWN Ġ-> Ġ( start Row .. start Row Ġ+ Ġcells . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Unexpected Ġdirection : Ġ$ direction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠBuilder Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" number ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnumber : ĠInt Ġ= ĠNUMBER _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" hint ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhint : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" start Row ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Row : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" start Column ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Column : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" direction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdirection : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" hint Url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhint Url : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ set : Jvm Name (" citation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc itation : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells Ġ= ĠArrayList < Cell >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Number ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Hint ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Start Row ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Row Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Start Column ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Column Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Direction ( value : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Hint Url ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Url Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset C itation ( text : ĠString ?): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd Cell ( ch : ĠChar , Ġattr Flags : ĠInt Ġ= Ġ 0 ) Ġ= Ġadd Cell ( ch . toString (), Ġattr Flags ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd Cell ( chars : ĠString , Ġattr Flags : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . add ( Cell ( chars , Ġattr Flags . to Byte ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠWord Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ== ĠNUMBER _ NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Missing Ġhint Ġnumber ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWord ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġnumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= Ġhint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Row Ġ= Ġstart Row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Column Ġ= Ġstart Column , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Url Ġ= Ġhint Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation Ġ= Ġc itation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells Ġ= Ġcells . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠNUMBER _ NONE Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconstructor ( source : ĠParcel ): Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Row Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Column Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġsource . readInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint Url Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc itation Ġ= Ġsource . readString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells Ġ= Ġsource . read Parcelable Array ( Cell :: class . java . class Loader ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠCell Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġget ( pos : ĠInt ): ĠCell Ġ= Ġcells [ pos ] ĊĊĠĠĠĠĠĠĠ Ġfun Ġcell At ( pos : ĠInt ): ĠCell Ġ= Ġcells [ pos ] ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( dest : ĠParcel , Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeString ( hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( start Row ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( start Column ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeInt ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeString ( hint Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . writeString ( citation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest . write Parcelable Array ( cells , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġ( other Ġas ? ĠWord )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . direction Ġ== Ġdirection Ġ&& Ġit . number Ġ== Ġnumber ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġ"$ direction -$ number ". hashCode () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( when Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIR _ AC ROSS Ġ-> Ġ" Ac ross " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIR _ DOWN Ġ-> Ġ" Down " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" ???? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (": Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( hint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( cells . join ToString ("")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDIR _ AC ROSS Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDIR _ DOWN Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY _ CELL Ġ= ĠarrayOf < Cell >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Word > Ġ= Ġobject Ġ: ĠParcel able . Creator < Word > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠWord Ġ= ĠWord ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Word ?> Ġ= ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠAL PH AB ET _ EN GL ISH : ĠSet < Char > Ġ= Ġ" ABCDEF GH IJ KL MN OP Q RST UV W XYZ ". toCharArray (). toSet () ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFLAG _ NO _ SOL UTION Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠCRE ATOR : ĠParcel able . Creator < Cross word > Ġ= Ġobject Ġ: ĠParcel able . Creator < Cross word > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( source : ĠParcel ): ĠCross word Ġ= ĠCross word ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Cross word ?> Ġ= ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġbuild Cross word ( block : ĠCross word . Builder . () Ġ-> ĠUnit ): ĠCross word Ġ= ĊĠĠĠĠĠĠĠ ĠCross word . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( this ) ĊĠĠĠĠĠĠĠ Ġ}. build () Ċ Ċ fun Ġbuild Word ( block : ĠCross word . Word . Builder . () Ġ-> ĠUnit ): ĠCross word . Word Ġ= ĊĠĠĠĠĠĠĠ ĠCross word . Word . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( this ) ĊĠĠĠĠĠĠĠ Ġ}. build () Ċ