package Ġcom . je ff pd avid son . kot words . model Ċ Ċ import Ġcom . je ff pd avid son . kot words . formats . FONT _ FAMILY _ TIMES _ ROM AN Ċ import Ġcom . je ff pd avid son . kot words . formats . Pdf . as Pdf Ċ import Ġcom . je ff pd avid son . kot words . formats . Pdf Font Family Ċ import Ġcom . je ff pd avid son . kot words . formats . P uzzle able Ċ Ċ /** Ċ Ġ* ĠA Ġrepresentation Ġof Ġa Ġcross word Ġpuzzle Ġwith Ġstandard Ġnumber ing . Ċ Ġ* Ċ Ġ* ĠFor Ġnon - standard Ġwords / number ing , Ġuse Ġ[ P uzzle ] Ġdirectly . Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠConstruct Ġa Ġnew Ġpuzzle . Ċ Ġ* Ġ@ param Ġtitle ĠThe Ġtitle Ġof Ġthe Ġpuzzle . Ċ Ġ* Ġ@ param Ġcreator ĠThe Ġauthor Ġof Ġthe Ġpuzzle . Ċ Ġ* Ġ@ param Ġcopyright ĠThe Ġcopyright Ġof Ġthe Ġpuzzle . Ċ Ġ* Ġ@ param Ġdescription ĠOptional Ġnotes Ġabout Ġthe Ġpuzzle . Ċ Ġ* Ġ@ param Ġgrid ĠThe Ġgrid Ġof Ġ[ P uzzle . Cell ] s Ġin Ġthe Ġform Ġof Ġa Ġlist Ġof Ġrows Ġgoing Ġfrom Ġtop Ġto Ġbottom , Ġwith Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġeach Ġrow Ġgoing Ġfrom Ġleft Ġto Ġright . Ċ Ġ* Ġ@ param Ġacross Cl ues ĠMapping Ġfrom Ġacross Ġcl ue Ġnumber Ġto Ġthe Ġcl ue Ġfor Ġthat Ġnumber . Ċ Ġ* Ġ@ param Ġdown Cl ues ĠMapping Ġfrom Ġdown Ġcl ue Ġnumber Ġto Ġthe Ġcl ue Ġfor Ġthat Ġnumber . Ċ Ġ* Ġ@ param Ġhas Html Cl ues ĠWhether Ġcl ue Ġcontents Ġare Ġin ĠHTML . Ċ Ġ*/ Ċ data Ġclass ĠCross word ( ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġcreator : ĠString , ĊĠĠĠ Ġval Ġcopyright : ĠString , ĊĠĠĠ Ġval Ġdescription : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġgrid : ĠList < List < P uzzle . Cell >>, ĊĠĠĠ Ġval Ġacross Cl ues : ĠMap < Int , ĠString >, ĊĠĠĠ Ġval Ġdown Cl ues : ĠMap < Int , ĠString >, ĊĠĠĠ Ġval Ġhas Html Cl ues : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ: ĠP uzzle able Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠValidate Ġthat Ġgrid Ġis Ġa Ġrectangle . ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġgrid [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġgrid . forEach Indexed Ġ{ Ġindex , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( row . size Ġ== Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid Ġgrid Ġ- Ġrow Ġ$ index Ġhas Ġwidth Ġ${ row . size } Ġbut Ġshould Ġbe Ġ$ width " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠValidate Ġstandard Ġgrid Ġnumber ing Ġ/ Ġcl ues . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas P uzzle (): ĠP uzzle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġacross P uzzle Cl ues Ġ= Ġmutable ListOf < P uzzle . Cl ue >() ĊĠĠĠĠĠĠĠ Ġval Ġdown P uzzle Cl ues Ġ= Ġmutable ListOf < P uzzle . Cl ue >() ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġmutable ListOf < P uzzle . Word >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġnumbers Ġand Ġwords Ġbased Ġon Ġstandard Ġcross word Ġnumber ing . ĊĠĠĠĠĠĠĠ Ġval Ġgrid Numbers Ġ= Ġmutable Map Of < Pair < Int , ĠInt >, ĠInt >() ĊĠĠĠĠĠĠĠ ĠforEach Cell ( grid ) Ġ{ Ġx , Ġy , Ġcl ue Number , Ġis Ac ross , Ġis Down , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl ue Number Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Numbers [ x Ġto Ġy ] Ġ= Ġcl ue Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ac ross ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġmutable ListOf < P uzzle . Coordinate >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġgrid [ y ]. size Ġ&& Ġ! grid [ y ][ i ]. cell Type . is Black ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . add ( P uzzle . Coordinate ( x Ġ= Ġi , Ġy Ġ= Ġy )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl ue Number Ġ!= Ġnull Ġ&& Ġacross Cl ues . containsKey ( cl ue Number )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacross P uzzle Cl ues . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP uzzle . Cl ue ( cl ue Number , Ġ"$ cl ue Number ", Ġacross Cl ues [ cl ue Number ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( P uzzle . Word ( cl ue Number , Ġword )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġmutable ListOf < P uzzle . Coordinate >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġgrid . size Ġ&& Ġ! grid [ j ][ x ]. cell Type . is Black ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword . add ( P uzzle . Coordinate ( x Ġ= Ġx , Ġy Ġ= Ġj )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl ue Number Ġ!= Ġnull Ġ&& Ġdown Cl ues . containsKey ( cl ue Number )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown P uzzle Cl ues . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP uzzle . Cl ue ( 1 0 0 0 Ġ+ Ġcl ue Number , Ġ"$ cl ue Number ", Ġdown Cl ues [ cl ue Number ] !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( P uzzle . Word ( 1 0 0 0 Ġ+ Ġcl ue Number , Ġword )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġacross Title Ġ= Ġif Ġ( has Html Cl ues ) Ġ"< b > Ac ross </ b >" Ġelse Ġ" Ac ross " ĊĠĠĠĠĠĠĠ Ġval Ġdown Title Ġ= Ġif Ġ( has Html Cl ues ) Ġ"< b > Down </ b >" Ġelse Ġ" Down " ĊĠĠĠĠĠĠĠ Ġreturn ĠP uzzle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid . map Indexed Ġ{ Ġy , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . map Indexed Ġ{ Ġx , Ġcell Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġgrid Numbers [ x Ġto Ġy ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . copy ( number Ġ= Ġnumber . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( P uzzle . Cl ue List ( ac ross Title , Ġacross P uzzle Cl ues ), ĠP uzzle . Cl ue List ( down Title , Ġdown P uzzle Cl ues )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords . sorted By Ġ{ Ġit . id Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Html Cl ues Ġ= Ġhas Html Cl ues , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRender Ġthis Ġcross word Ġas Ġa ĠPDF Ġdocument . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠfontFamily ĠFont Ġfamily Ġto Ġuse Ġfor Ġthe ĠPDF . ĊĠĠĠĠ Ġ* Ġ@ param Ġblack Square Light ness Adjustment ĠPer centage Ġ( from Ġ 0 Ġto Ġ 1 ) Ġindicating Ġhow Ġmuch Ġto Ġbright en Ġblack / colored ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquares Ġ( i . e . Ġto Ġsave Ġink ). Ġ 0 Ġindicates Ġno Ġadjustment ; Ġ 1 Ġwould Ġbe Ġfully ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhite . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġas Pdf ( ĊĠĠĠĠĠĠĠ ĠfontFamily : ĠPdf Font Family Ġ= ĠF ONT _ FAMILY _ TIMES _ ROM AN , ĊĠĠĠĠĠĠĠ Ġblack Square Light ness Adjustment : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġ): ĠByteArray Ġ= Ġas P uzzle (). as Pdf ( fontFamily , Ġblack Square Light ness Adjustment ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠExecute Ġthe Ġgiven Ġfunction Ġfor Ġeach Ġcell Ġin Ġthe Ġgrid . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠforEach Cell ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid : ĠList < List < P uzzle . Cell >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfn : Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcl ue Number : ĠInt ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ac ross : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Down : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell : ĠP uzzle . Cell ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Cl ue Number Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġgrid . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġgrid [ y ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grid [ y ][ x ]. cell Type . is Black ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , Ġy , Ġ/* Ġcl ue Number = Ġ*/ Ġnull , Ġ/* Ġis Ac ross = Ġ*/ Ġfalse , Ġ/* Ġis Down = Ġ*/ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid [ y ][ x ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Ac ross Ġ= Ġneeds Ac ross Number ( grid , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Down Ġ= Ġneeds Down Number ( grid , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl ue Number Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ac ross Ġ|| Ġis Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Cl ue Number ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn ( x , Ġy , Ġcl ue Number , Ġis Ac ross , Ġis Down , Ġgrid [ y ][ x ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠExecute Ġthe Ġgiven Ġfunction Ġfor Ġeach Ġnumber ed Ġcell Ġin Ġthe Ġgiven Ġgrid . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠforEach Number ed Cell ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid : ĠList < List < P uzzle . Cell >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfn : Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcl ue Number : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ac ross : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Down : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠforEach Cell ( grid ) Ġ{ Ġx , Ġy , Ġcl ue Number , Ġis Ac ross , Ġis Down , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ac ross Ġ|| Ġis Down ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn ( x , Ġy , Ġcl ue Number !! , Ġis Ac ross , Ġis Down ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġneeds Ac ross Number ( grid : ĠList < List < P uzzle . Cell >>, Ġx : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! grid [ y ][ x ]. cell Type . is Black () Ġ&& Ġ( x Ġ== Ġ 0 Ġ|| Ġgrid [ y ][ x Ġ- Ġ 1 ]. cell Type . is Black ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( x Ġ+ Ġ 1 Ġ< Ġgrid [ 0 ]. size Ġ&& Ġ! grid [ y ][ x Ġ+ Ġ 1 ]. cell Type . is Black ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġneeds Down Number ( grid : ĠList < List < P uzzle . Cell >>, Ġx : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! grid [ y ][ x ]. cell Type . is Black () Ġ&& Ġ( y Ġ== Ġ 0 Ġ|| Ġgrid [ y Ġ- Ġ 1 ][ x ]. cell Type . is Black ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( y Ġ+ Ġ 1 Ġ< Ġgrid . size Ġ&& Ġ! grid [ y Ġ+ Ġ 1 ][ x ]. cell Type . is Black ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ