package Ġnl . jh vh . s udoku . format . box format . with candidates Ċ Ċ /* Ġ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 . Ċ Ġ*/ Ċ Ċ import Ġnl . jh vh . s udoku . format . Format table . Format table List Ċ import Ġnl . jh vh . s udoku . format . simple . Simple CellValue Formatter Ċ import Ġnl . jh vh . s udoku . format . simple . fixed Value Marker Ċ import Ġnl . jh vh . s udoku . grid . model . Grid Ċ import Ġnl . jh vh . s udoku . grid . model . cell . CellValue Ċ import Ġnl . jh vh . s udoku . grid . model . cell . CellValue . Non Fixed Value Ċ import Ġnl . jh vh . s udoku . util . align Center Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ Ċ const Ġval ĠsetValue Marker Left : ĠChar Ġ= Ġ' Â» ' Ċ const Ġval ĠsetValue Marker Right : ĠChar Ġ= Ġ' Â « ' Ċ Ċ /** Ċ Ġ* ĠBasic Ġstate less Ġ[ CellValue ] Ġformatter Ġfor Ġtext ual Ġoutput , Ġtypically Ġto Ġthe Ġconsole . Ċ Ġ* ĠTo Ġbe Ġused Ġin Ġother Ġ( typ ically Ġtext Ġbased ) Ġformat ters . Ċ Ġ*/ Ċ class ĠCell Value With Candidates Formatter : ĠSimple CellValue Formatter () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġbasic Ġtext Ġformat Ġrepresentation Ġof Ġthe Ġ[ cell Value ], Ġwith Ġun solved Cells Ġshowing Ġtheir Ġcandidate Ġvalues . ĊĠĠĠĠ Ġ* Ġ> ĠHowever , Ġcandidate Ġvalues Ġare Ġnot Ġshown Ġin Ġall Ġcases : ĊĠĠĠĠ Ġ* Ġ* ĠC andidate Ġvalues Ġare Ġonly Ġshown Ġwhen Ġeach Ġcandidate Ġvalue Ġis Ġa Ġsingle Ġdigit ; Ġso Ġonly Ġfor Ġgrid Ġsizes Ġup Ġto Ġ 9 . ĊĠĠĠĠ Ġ* ĠĠ ĠFor Ġgrid Ġsizes Ġlarger Ġthan Ġ 9 , Ġthe Ġoutput Ġof Ġ[ Simple CellValue Formatter . format ] Ġis Ġreturned Ġ( so Ġwithout Ġcandidates ) ĊĠĠĠĠ Ġ* ĠĠ Ġto Ġavoid Ġimp r act ically Ġhigh Ġand Ġwide Ġoutputs . ĊĠĠĠĠ Ġ* Ġ* ĠFor Ġsolved Ġgrids , Ġno Ġcandidates Ġare Ġpresent , Ġso Ġin Ġthis Ġcase Ġthe Ġmethod Ġalso Ġreturns Ġthe Ġoutput Ġof ĊĠĠĠĠ Ġ* ĠĠ Ġ[ Simple CellValue Formatter . format ], Ġso Ġwithout Ġcandidates Ġ( these Ġare Ġabsent Ġanyway ) ĊĠĠĠĠ Ġ* ĠĠ Ġ[ setValue Marker Left ], Ġand Ġ` digit `. ĊĠĠĠĠ Ġ* Ġ@ param Ġcell Value Ġ[ CellValue ] Ġto Ġformat ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġformatted Ġ[ CellValue ] Ġas Ġa Ġ[ Format table List ], Ġwith Ġ[ Grid . block Size ] Ġ[ String ] s ĊĠĠĠĠ Ġ* Ġ> ĠThe Ġresulting Ġ[ String ] Ġmay Ġinclude Ġone Ġor Ġmore Ġof Ġthe Ġfollowing Ġcharacters : Ġ` space `, Ġ[ fixed Value Marker ], ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġformat ( cell Value : ĠCell Value ): ĠFormat table List Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid : ĠGrid Ġ= Ġcell Value . grid ĊĠĠĠĠĠĠĠ Ġif Ġ( grid . grid Size Ġ> Ġ 9 Ġ|| Ġgrid . is S olved ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBig ger Ġgrid Ġsizes Ġwill Ġbecome Ġimp r act ically Ġhigh Ġand Ġwide , Ġso Ġjust Ġreturn Ġsuper Ġmethod Ġ( without Ġcandidates ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġsolved Ġgrids , Ġthere Ġare Ġno Ġcandidates Ġleft , Ġso Ġmakes Ġno Ġsense Ġprinting Ġthose Ġ( abs ent ) Ġcandidates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . format ( cell Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġformatted Length Ġ= Ġgrid . block Size Ġ* Ġ 2 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġformatted Height Ġ= Ġgrid . block Size ĊĠĠĠĠĠĠĠ Ġval Ġstr List : ĠMutable List < String > Ġ= ĠArrayList ( formatted Height ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cell Value . isSet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatted Height Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr List . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue With Marker Ġ= Ġif Ġ( cell Value . is Fixed ) Ġ"$ fixed Value Marker ${ cell Value . value }" Ġelse Ġ"$ setValue Marker Left Ġ${ cell Value . value } Ġ$ setValue Marker Right " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr List . add ( StringUtils . center ( value With Marker , Ġformatted Length )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstr List . size Ġuntil Ġformatted Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr List . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Fixed Value Ġ= Ġcell Value Ġas ĠNon Fixed Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Candidates Present Ġ= Ġnon Fixed Value . getValue Candidates (). size Ġ== Ġgrid . grid Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Builder Ġ= ĠStringBuilder ( formatted Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġgrid . block Size ). forEach Ġ{ Ġline Nr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr Builder . clear (). append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġgrid . block Size ). forEach Ġ{ Ġhor Pos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcandidate Str : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( all Candidates Present ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġno Ġcandidates Ġhave Ġbeen Ġremoved Ġyet , Ġwe Ġwill Ġjust Ġshow Ġan Ġempty Ġcell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Str Ġ= Ġ" Ġ Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC andidates Ġhave Ġbeen Ġremoved , Ġshow Ġthe Ġones Ġthat Ġare Ġpresent Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġhor Pos Ġ+ Ġgrid . block Size Ġ* Ġline Nr Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Str Ġ= Ġif Ġ(! non Fixed Value . getValue Candidates (). contains ( value )) Ġ" Ġ Ġ" Ġelse Ġvalue . toString () Ġ+ Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr Builder . append ( candidate Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr List . add ( StringUtils . center ( str Builder . toString (), Ġformatted Length )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠFormat table List ( str List . align Center ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ