package Ġnl . jh vh . s udoku . format Ċ Ċ /* ĠCopyright Ġ 2 0 2 0 ĠJan - H end rik Ġvan ĠHe us den ĊĊĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠInterface Ġto Ġsupport Ġformatting Ġof ĠS udoku Ġelements Ġto Ġa Ġhuman Ġreadable Ġformat . Ċ Ġ* Ċ Ġ* ĠThe Ġdesign Ġpatterns Ġused Ġis Ġ[ Visitor ĠPattern ]( https :// en . wikipedia . org / wiki / Visitor _ pattern # Java _ example ). Ċ Ġ* Ġ Ġ* ĠThe Ġ[ format ] Ġmethod Ġin Ġthis Ġinterface Ġrepresents Ġthe Ġ' accept ' Ġmethod Ġof Ġthe Ġclassic ĠVisitor ĠPattern . Ċ Ġ*/ Ċ interface ĠFormat table Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOutput Ġa ĠS udoku Ġelement Ġ( typ ically Ġthe Ġ[ Grid ], Ġbut Ġmay Ġalso Ġbe Ġa Ġ[ Grid Segment ] Ġlike Ġa Ġ[ Cell ] Ġor Ġ[ Row ]), ĊĠĠĠĠ Ġ* Ġin Ġa Ġhuman Ġreadable Ġor Ġmachine Ġreadable Ġ( e . g . ĠHTML ) Ġway ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġformatter ĠThe Ġ[ S udoku Formatter ] Ġimplementation Ġto Ġbe Ġaccepted Ġby Ġthe Ġelement Ġto Ġprint . ĊĠĠĠĠ Ġ* Ġ Ġ* ĠThe Ġelement Ġto Ġprint Ġwill Ġaccept Ġthe Ġ[ S udoku Formatter ] Ġas Ġa Ġdelegate Ġfor Ġthe Ġprint Ġformatting ĊĠĠĠĠ Ġ* Ġ@ return ĠThe ĠS udoku Ġelement Ġas Ġa Ġformatted Ġ[ Format table List ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat ( formatter : ĠS udoku Formatter ): ĠFormat table List ĊĊĠĠĠ Ġ/** ĠThe Ġlength Ġof Ġthe Ġhighest Ġpossible Ġvalue Ġin Ġa Ġcell ; Ġdepending Ġon Ġthe Ġgrid Ġsize . ĠE . g . ĊĠĠĠĠ Ġ* ĠĠ Ġ* Ġ` 3 * 3 ` Ġblock Ġsize Ġ(` 9 * 9 ` Ġgrid ): Ġhighest Ġpossible Ġvalue Ġis Ġ 9 Ġ=> Ġmax Ġlength Ġ= Ġ 1 ĊĠĠĠĠ Ġ* ĠĠ Ġ* Ġ` 4 * 4 ` Ġblock Ġsize Ġ(` 1 6 * 1 6 ` Ġgrid ): Ġhighest Ġpossible Ġvalue Ġis Ġ 1 6 Ġ=> Ġmax Ġlength Ġis Ġ 2 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠmaxValue Length : ĠInt ĊĊĊĠĠĠ Ġ/** Ġ[ List ]< [ String ]> Ġwith Ġ[ toString ] Ġoverridden Ġfor Ġof Ġformatting Ġgrid Ġor Ġgrid Ġelements Ġ*/ ĊĠĠĠ Ġclass ĠFormat table List ( collection : ĠList < String > Ġ= Ġempty List ()): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList < String > Ġby ĠArrayList < String >( collection ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPro duces Ġdesired Ġresults Ġwhen Ġformatting Ġgrid Ġor Ġgrid Ġelements ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcontent Ġof Ġeach Ġline , Ġseparated Ġby Ġ[ line Separator ] Ġ= Ġ[ System . line Separator ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . join ToString ( separator Ġ= Ġline Separator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ[ equals ] Ġbased Ġ[ List . equals ] Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . toList () Ġ== Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ[ hashCode ] Ġbased Ġ[ List . hashCode ] Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . toList (). hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ