{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":47463,"title":"Slitherlink II: Gimmes","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 531.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 265.833px; transform-origin: 407px 265.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 87.8667px 7.91667px; transform-origin: 87.8667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink II: Gimmes\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 293.283px 7.91667px; transform-origin: 293.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is solved using only the Gimmes from Slitherlink Starting Techniques. The site is missing the Gimme case of adjacent 31 on an edge. Trivial cases may be presented and should be solved prior to processing the Gimmes. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPEAAAB/CAIAAACxE7P2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5AsMABUVJm9/YgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxMS1Ob3YtMjAyMCAxNjoyMToyMaHVoXMAAAxGSURBVHic7Z1tSFPvG8evpotJLQslF0WeIn492hShZ2q/JJOKNd/ki4JmikGFQlFRkS7oRUKQPYA9UP4L60UPZCRJ0cM07WFRMdIyk5qVYcNSi9LM6f/FqbHfzmY2z+772tn1YS/sPtt9vl77enef+5z7uob09fUBQSgIFW8BBCEz5GlCaZCnCaVBniaUBnmaUBqRwe3eag1u/4TCMBgG38eQ4K7lDRkSxM4JxVFptep0uri4uJEjRwbcSZDHaYL4S1paWrq6ugbjaZpPE+hob2/v6uoK+ONBmHtYrfDvvzL3SYQbJSVgNgf2URqnCaVBniaUBqtrRLMZFi1idC4P/nf6dKVkPbHAYhHi49mL2bNnj8Ph8GosKSlhrwQAMjMzvVoWGQzmtWs5SGlqAotFzg77ZOfOnT4A71dJifwnGgAWX8F68+YNFzEGyeKrIAhclPT5uogym818pMhtGJp7EEqDPE0oDfI0oTRC4z5ibW3tixcvenp6oqOjU1NTIyP5y3748GFDQ8Pq1atVKv7jAgYxDQ0Nz58/7+zsjIyMTEhImDJlCi8l/M3RP48fP87KyrLb7e6W6Ojo7du379ixg6Oqjx8/Go1Gp9OZkZExdOhQjkowiKmpqdm4caPndwQAer2+uLh47ty57PWg9vTdu3eXLl3a2dkZGxublpam0Wjq6+urq6t37txZW1t79uxZLqra2tqWL1/udDq5nN0L7mKuXbtmNBpdLtewYcOWLVsWHR3d0dFRXl5ut9sXLVpUXl6emprKWpN8SzK/kWlpxuVyTZw4EQCSk5M/f/7sbj927Jio/PLly3/sRPa1vLdv3yYkJLi7+vHjx8A/K/ta3mDESMMSwFret2/fYmNjAWDevHmtra3u9g8fPkyfPh0AdDpdZ2fnH3oJn7W8srKy169fA0BpaemoUaPc7Tk5OQsWLBDbGUs6efJkQkLCs2fPGJ/XJxjEXLhwobW1NSIi4vz58zExMe72MWPGnD9/HgBaWlquXLnCWBVeT7e1tc2ZMycpKUl6tTFp0iQAqK2tZSamp6dn5syZ2dnZHR0dycnJhw8fZnZqzGJu3LgBAPPnzx87dqzXoWnTpmm1WgB4+PAhY1V4PZ2VlXX//v0nT55ID3369AkA/vnnH2Zient7nz17ptVq9+3bZ7PZxo0bx+zUmMVs3br1ypUre/fu9Xm0t7cXANhftqK+RvRJZWXl1atXASA9PZ3ZSVUqlcViyc3N9ZwF8QKPmMTExMTERJ+Hampqvn37BgBz5sxhKyp0PF1ZWdnR0XH16lXxoR+z2Sx9Cid4REZGFhQUMDtd/6AS44/NmzcDgE6nW7FiBeNTh4ane3t7U1JSXC6X+M/09PTi4mK+koh+WL9+vc1mA4CioiL2N8jwzqc9+f79u8lkMpvN6enparX68uXLEyZMuHv3Lm9dhA+2bdt2/PhxAMjLy8vIyGAvIDTG6eHDh1+8eFH8uampaenSpS9fvly5cmVdXd2YMWP4aiM8ycrKOnXqFACYzeaioiIuGkJjnPYkPj6+rKwMANra2o4ePcpbDvGLL1++LFmyRDT0li1beO11gFD0NABMmTIlOTkZALyeMSB40dzcPGvWrJs3bwLAwYMH9+/fz1EM3rnH69ev6+vrY2JiZs+eLT2q0+kAoKenh7kuwpva2tqUlBSn06nVai9evMjhAY//gtfTmzZtqqioWLx48a1bt6RHxRE6OjqauS7iPzQ2NoqG1ul0FRUV/parWYJ37iE+pnj79u3nz597HSorK3v//j0ApKWlcVBG/Ka7u3vFihVOp3P06NEPHjzAYGjAPE5v2LDh0KFDra2tq1atun79uvuJghs3bqxbtw4AEhISVq9ezVVjuFNYWPjy5UsAyMzMrKurq6urk75n/PjxM2bMYKkKr6djYmLOnj1rMpnq6uomTJhgNBqjoqIaGhrExXxBECoqKjDsMQlnjhw5Iv5QWFhYWFjo8z3Z2dknTpxgKArx3AMAUlNTbTbbggULfv78eenSpdLSUpvNplar8/Lynjx5In0WjGBJY2Mjko0RXuAdp0VmzJiB8H6hyWTqQ1OvjJeYSZMm4QmCJ6jHaYIIAPI0oTgC3vXlF5/by9C8BN4BJ7ww+PymFLkfMUgYyNZKJ+w8ze3JGoIVYedpQvGQpwmlIb+nrQBDfr8Igj3Bvedi/f2DIAiCIAT1XL5xOECSmt9gMHg3McHqqwKqNDkTG6RieH1HBpC7Nqx8a3i/uHPnjvQsJZzqBPRZLD7WiahOANUJIIgQgjxNKA3yNKE0sD+XJ4InB70bDKn5m5ubHz161NnZGRUVtXjx4hEjRvBS4gn/yMg31f+FvNeI1dXVer3eqze9Xn/v3r0BfT4414gtLS2jR48GfvmnOzo61qxZ49mVWq3evn27y+UaYA/S70iWa8RAIiP3NSLqcRpjDnoEqfm7u7uXLFlis9kiIiKMRmNMTIxYPqGwsLCxsdGd3Ic93CPzi4D/Gvwh1zgtTw56ucdpDHUC8vPzAUCr1T548MDdKCaLAYBz584NpBPpdzTIcTrwyITPWh7CHPQYUvP39PQcOHAAAPLz8z0zn2RmZmZnZwOAv32BQQVDZNzg9TSqHPR4UvOXl5d//foVfBUMz8nJAQC73V5fX89MD57IuMHraVQ56PGk5hfvaQuC4Pl/l0hycrJarQa25SbwRMYN3mtEVDno8aTmf/v2LQAkJSVJD6lUKkEQXr16VV1dvXbtWjZ68ETGDd5xuh/Y56AXU/Nj+Nq+f/8O/pOqiTVuxPewAU9k3ISep/nmoOfO06dPAcDfLy62//jxg6kmZISYp7nnoOeOeCHhD/HWXf/vUTyhNM5hyEHPHY1G089R0c1hnnItNH55PDnouSPeb+ru7vZ5VGyPiopiqgkZITBONzc3p6SkiPkzDx48mJuby1sRT4YPHw4A4hK1lBcvXgCAdJkvrMDuaWw56LkzefJkAGhoaJAe6u3tfffuHQD4rKwQPqCee3jmoK+qqiJDA8D8+fMBoL6+XixQ7UlNTY1YQtLn6nX4gNfTOHPQcyctLS02NtblconrP56ILUlJSRieL+cI3rkHzhz03FGpVLm5ufn5+bt37546darJZBLbi4qKSktLAUB8ai+cwetpnDnoMbBr166bN29WVVWlp6cvXLhQEAS73S4WbcrOzna7PGxBOvdAm4MeAyqV6vr163l5eWq1uqqq6syZM3a7XavV7t27Nwz/wqUgHafR5qAX4V4nQKPRFBUVIbzxxD0ygHacJoiAIU8TSoPR3OP06dOVlZVszuXJWofDIGncs2ePg7kSAHBIMveBr+0qvLBarVzECA5Hgbw9BryT0R8+99jywkLlL9BjoNoXBNE/5GlCaZCnCaVBniaUBnmaUBqMPM2rTkCBxSIV84bqBGCqEyD7QhmN04TSIE8TSoM8TSgN8jShNJA+a+oP7nUVEFbhAARhAUyRCSVPf/z40Wg0Op3OjIwMZhlN3dTU1GzcuFHcTuJGr9cXFxfPnTuXsRhP+IYF8EUmZDzNt64CziocwDssgDMybJYbB7k+HXhdBTlqX8hThSMI69ODKcQh/Y4CWJ+WJzLhU/vCDfe6CgircACCsADWyKD2NJK6CqiqcACasAC+yIig9jSSugqoqnAAmrAAvsiIoL5GRFJXAVUVDkATFsAXGRHUnhbrKvBW0R/sq3BAKIQFOEVGBPXcAzlhXoWjH/hGhjwdIFSFwx/cI0OjSyBQFQ5/YIgMjdN/B1Xh8AeeyNA4/RdQFQ5/oIoMeXqgUBUOf2CLDHl6QHhW4aioqKCiBW4QRoY8/We8qnDEx8fzVoQFnJEhT/8ZqsLhD5yRIU//GarC4Q+ckaG1vD9AVTj8gTYyoTROc6mrgLwKB/ArN4E2MjROE0qD0Tjd1NRktVrZnMsTweEQpK1WKwg+moONQdIiAACPsIBPMQ4HHzGyF5AIeNeXP/DXCaBXCLyUvR+RIP4K8jShNIb0yX3p2tXV5d5WKd39zx4LQAFvDcQAqfw9odfr9SNHjgysE/nHaY1Go9PpZO+WCB90Ol3AhoYgzT3i4+PJ1kRgaDSauLi4wfQg/9zDTXt7e1lZWZA6HziCr3UrAiftJtNgRmiRIHqaILhA6x6E0iBPE0qDPE0oDfI0oTTI04TSIE8TSoM8TSgN8jShNMjThNL4P3ncDDWW+w8KAAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 363.683px 7.91667px; transform-origin: 363.683px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\n\r\n[sv,valid]=pcheck(s,p,bsegs); \r\nfprintf('sv  init solution\\n')\r\nfprintf('%i ',sv);fprintf('\\n') \r\n\r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n%Author Note: I found creating the complete set was time consuming\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge  add by raz as a Gimme\r\n\r\n [nr,nc]=size(s);\r\n %Example Zero processing\r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  %enter setting of p for 1s in corners\r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  %enter setting of p for 1s in corners\r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n %enter setting of p for 1s in corners \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n %setting p for 03 adjacent cases\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n %setting p for 33 adjacent\r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  %setting p for 03 diagonal\r\n \r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); \r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n  %setting p for 33 diagonal\r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); \r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i); \r\n  %3-0 adjacent set segs to 0/5\r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n %Slithering Starting Techniques misses the 13 edge Gimme     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[5 3 5;3 0 3;5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 2;2 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5;5 0 5;5 3 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5 3 2;5 0 5 0 5;5 3 5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5 5 3 5;5 0 5 5 0 5;5 3 5 5 3 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":3,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T17:23:06.000Z","updated_at":"2025-05-02T19:04:22.000Z","published_at":"2020-11-12T23:27:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink II: Gimmes\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is solved using only the Gimmes from Slitherlink Starting Techniques. The site is missing the Gimme case of adjacent 31 on an edge. Trivial cases may be presented and should be solved prior to processing the Gimmes. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47453,"title":"Slitherlink I: Trivial","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 540.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 270.333px; transform-origin: 407px 270.333px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 78.5333px 7.91667px; transform-origin: 78.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink I: Trivial\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 258.667px 7.91667px; transform-origin: 258.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases of s with a 4 or a pair of adjacent 3s forming a unique solution loop.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 368.367px 7.91667px; transform-origin: 368.367px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink II: Gimmes will use the Starting Techniques from Slitherlink Techniques. Adjacent 3s  yields R 3 R 3 R board values if trivial did not already solve. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 373.267px 7.91667px; transform-origin: 373.267px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np=trivial_solve(p,bsegs,s);\r\n\r\n[sv,valid]=pcheck(s,p,bsegs);\r\n\r\n  %show_pfig(s,p,c,emap,pmap,1)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns = [5 5 5;5 4 5;5 5 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [5 5;4 5;5 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [3 3];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [3;3];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns =[0 5 5;5 3 5;5 3 5;5 5 0];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T00:38:37.000Z","updated_at":"2020-11-12T23:27:09.000Z","published_at":"2020-11-12T23:27:09.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink I: Trivial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases of s with a 4 or a pair of adjacent 3s forming a unique solution loop.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink II: Gimmes will use the Starting Techniques from Slitherlink Techniques. Adjacent 3s  yields R 3 R 3 R board values if trivial did not already solve. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47478,"title":"Slitherlink V: Assert/Evolve/Check (large)","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 678.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 339.333px; transform-origin: 407px 339.333px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 210px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 105px; text-align: left; transform-origin: 384px 105px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 168.4px 7.91667px; transform-origin: 168.4px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink V:  Assert/Evolve/Check(large size)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 207.3px 7.91667px; transform-origin: 207.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving and Recursion due to time and depth issues.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking the Assert/Evolve/Check/Update method.  The advanced solving techniques on the web are weak and complicated. The simple method is not to immediately invoke recursion due to the sparseness of data leading to too many false options. Ther actual simple method is to use Try/Catch by asserting segments as Black/Red and then checking if the layout using a robust Evolve creates an invalid state. If the state became invalid when asserting a single segment as Black then it must be Red with the same being true of Red assertion being invalid must mean the segment is Black. If an Evolve is invalid then Assert the right Bar type and perform an evolve to update the board.  The two large test cases are from Games World of Puzzles October 2020. I was completely hopeless for the large puzzles. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 314.917px 7.91667px; transform-origin: 314.917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive(medium size)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n \r\n %Implement Assert/Check/Evolve\r\n [p]=assert(p,bsegs,s,c,emap,pmap); \r\n \r\n % Check if solved\r\n [sv,valid]=pcheck(s,p,bsegs);\r\n if valid\r\n  fprintf('sv Assert solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n end\r\n \r\n % Start recursive processing\r\n if ~valid\r\n  [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap);\r\n  [sv,valid]=pcheck(s,p,bsegs);\r\n end\r\n%\r\n if valid\r\n  fprintf('sv recursion solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n else\r\n  fprintf('No solution found\\n')\r\n end\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\nfunction [p]=assert(p,bsegs,s,c,emap,pmap)\r\n %Insert code here to assert a segment as Red/Black\r\n %Check if evolve of is valid\r\n %If not valid then Assert segment as Black/Red depending on case and then evolve\r\n %Keep asserting until no more p updates and/or s is solved\r\n %Asserting ends of red segments first may reduce total time\r\n pb=p*0;\r\n valid=0;\r\n while ~isequal(p,pb) \u0026\u0026 ~valid\r\n  pb=p;\r\n  [pr,pc]=find(p==1);\r\n  % insert code here\r\n end % while\r\nend\r\n\r\nfunction [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n %show_pfig(s,p,c,emap,pmap,3)\r\n solved=0;\r\n \r\n %work thru options of first end found with minimum options (2 or 3)  \r\n %(first 2 then 3 if any found)\r\n % extend a segment\r\n ps=sum(p);\r\n ptr=find(ps==7,1,'first'); % First Segment with 2 options\r\n if isempty(ptr)\r\n  ptr=find(ps==8,1,'first'); % First Segment with 3 options\r\n end\r\n pc=find(p(ptr,:)==1);\r\n \r\n for i=pc\r\n  pn=p;\r\n  pn(ptr,i)=5;pn(i,ptr)=5; % make linkage\r\n  \r\n  %This modified pn may be invalid and create an invalid evolve result\r\n  [pn,evalid]=evolve(pn,bsegs,s,c,emap,pmap);\r\n  if ~evalid,continue;end\r\n  \r\n  [v,valid]=pcheck(s,pn,bsegs); % check if segment add and evolve solved\r\n  if valid\r\n   solved=1;\r\n   p=pn;\r\n   return;\r\n  end\r\n  \r\n  %Invoke the next level of recursion build with the recursion assert and Evolve\r\n  [pn,solved]=slither_recur(pn,bsegs,s,c,emap,pmap);\r\n  if solved\r\n   p=pn;\r\n   return\r\n  end\r\n end %i\r\n % Loop through options\r\n % Perform evolve\r\n %  if invalid try next option\r\n %  call next level recur\r\n %  if solved return\r\nend %[p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb)\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e10 % 0 non-5 segments, have 2 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==6 || sum(wv)==2 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e15 % 0 non-5 segments, have 3 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==11 || sum(wv)==3 || sum(wv)==7 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n  end %i s3 3\r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=0; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=0;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=0;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=0;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=0; p(nrc*ncc-1,nrc*ncc)=0;\r\n   p(nrc*ncc,nrc*ncc-nrc)=0;p(nrc*ncc-nrc,nrc*ncc)=0;\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   p(1,2)=5; p(2,1)=5;\r\n   p(1,nrc+1)=5;p(nrc+1,1)=5;\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   p(nrc-1,nrc)=5; p(nrc,nrc-1)=5;\r\n   p(nrc,2*nrc)=5;p(2*nrc,nrc)=5;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=5; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=5;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=5;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=5;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=5; p(nrc*ncc-1,nrc*ncc)=5;\r\n   p(nrc*ncc,nrc*ncc-nrc)=5;p(nrc*ncc-nrc,nrc*ncc)=5;\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up, virtual cv(2)+1==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up\r\n   end\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor, virt cv(2)-nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor rt\r\n   end\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor, virt cv(2)+nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor lt\r\n   end\r\n  end % j L col\r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+1)==0\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  vud\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+nrc)==0\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  hLR\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     if p(cv(2),cv(2)+1)==5 % rr;xr\r\n      if i\u003e1\r\n       p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)+1)==5 % rr;rx\r\n      if i\u003e1\r\n       p(cv(1),cv(1)-1)=0;p(cv(1)-1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     if p(cv(2),cv(2)-1)==5 % xr;rr\r\n      if i\u003cnrc\r\n       p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)-1)==5 % rx;rr\r\n      if i\u003cnrc\r\n       p(cv(1),cv(1)+1)=0;p(cv(1)+1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n     \r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)+1)==0 % down dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+1)==0 % down dead end, rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)-1)==0 % up dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-1)==0 % up dead end rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)-nrc)==0 % rt dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-nrc)==0 % rt dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)+nrc)==0 % left dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+nrc)==0 % left dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5)\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %need an isequal(p,pb)\r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars\r\n   ps=sum(p);\r\n   pv= ps\u003e4  \u0026 ~(ps==10);\r\n   pidx=find(pv);\r\n   for i=pidx\r\n    v=[i find(p(i,:)==5)];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     \r\n    end\r\n    if Lv\u003c4,continue;end % Need at least 3 segments to make a loop\r\n    if p(v(1),v(end)) % path ends are currently adjacent, likely sb 0 but may be final solve\r\n     if Lv\u003cnnz(p==5)/2\r\n      p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n     else % Possible solve\r\n      pchk=p;\r\n      pchk(v(1),v(end))=5;pchk(v(end),v(1))=5;\r\n      [sv,valid]=pcheck(s,pchk,bsegs); % check if solved\r\n      if valid\r\n       p=pchk;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n      end\r\n     end % Lv\r\n    end % p( v 1 end)\r\n   end % pidx\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n  %possible evolve is try seg to see if evolve base leads to a fail thus must be black\r\n  \r\n%   isequal(p,pb)\r\n%   show_pfig(s,p,c,emap,pmap,3)\r\n%   show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n\r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    %if s(sptr)==5,continue;end % what if a 4 seg circle occurs around a 5?\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); % .48  17K\r\n    %if nnz(sum(p)==5) % Node with no escape %.48\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    %if nnz(sum(p)\u003e14) % Node with too many segments % .47\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created                  **********************************\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   %pidx=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; \r\n   %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[3 3 2 3 5 5 3 3 5 1;\r\n    5 5 5 2 5 5 5 5 5 5;\r\n    1 5 5 5 5 1 1 5 5 2;\r\n    0 5 5 5 5 2 5 5 3 3;\r\n    0 5 5 5 1 3 5 5 5 5;\r\n    5 5 5 5 2 3 5 5 5 0;\r\n    3 2 5 5 1 5 5 5 5 2;\r\n    3 5 5 2 0 5 5 5 5 2;\r\n    5 5 5 5 5 5 2 5 5 5;\r\n    3 5 1 3 5 5 3 3 2 3]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\ns=['053552235013';\r\n   '505555535555';\r\n   '355135525552';\r\n   '521552155535';\r\n   '555305555553';\r\n   '535555335551';\r\n   '525050255352';\r\n   '325255555505';\r\n   '525555552521';\r\n   '152552253525';\r\n   '255533555535';\r\n   '255555522555';\r\n   '535551355315';\r\n   '355535512553';\r\n   '555525555515';\r\n   '132523255153']-'0'; % Solves with Assert\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=['225355223525';\r\n    '555235535535';\r\n    '555255555555';\r\n    '232535355512';\r\n    '355555535515';\r\n    '255035555502';\r\n    '555555522555';\r\n    '055515555315';\r\n    '513555535550';\r\n    '555025555555';\r\n    '015555522552';\r\n    '505535555553';\r\n    '315553525223';\r\n    '555555553555';\r\n    '525515531555';\r\n    '535312551533']-'0'; % solves with Assert, Dies in Recursion\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[5 1 5 5 3 5 5 5 0 1;\r\n    5 0 5 5 5 3 3 5 5 5;\r\n    5 5 5 1 2 5 5 5 3 5;\r\n    2 5 5 5 5 5 2 0 5 2;\r\n    0 5 5 5 5 5 5 5 5 5;\r\n    5 5 5 5 5 5 5 5 5 3;\r\n    3 5 1 2 5 5 5 5 5 1;\r\n    5 3 5 5 5 3 0 5 5 5;\r\n    5 5 5 0 0 5 5 5 3 5;\r\n    2 1 5 5 5 1 5 5 3 5]; % solves with recursive/assert\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T21:28:57.000Z","updated_at":"2024-12-14T18:13:16.000Z","published_at":"2020-11-12T23:19:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink V:  Assert/Evolve/Check(large size)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving and Recursion due to time and depth issues.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking the Assert/Evolve/Check/Update method.  The advanced solving techniques on the web are weak and complicated. The simple method is not to immediately invoke recursion due to the sparseness of data leading to too many false options. Ther actual simple method is to use Try/Catch by asserting segments as Black/Red and then checking if the layout using a robust Evolve creates an invalid state. If the state became invalid when asserting a single segment as Black then it must be Red with the same being true of Red assertion being invalid must mean the segment is Black. If an Evolve is invalid then Assert the right Bar type and perform an evolve to update the board.  The two large test cases are from Games World of Puzzles October 2020. I was completely hopeless for the large puzzles. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive(medium size)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47473,"title":"Slitherlink IV: Recursive (medium size)","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 615.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 307.833px; transform-origin: 407px 307.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 144.667px 7.91667px; transform-origin: 144.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink IV: Recursive (medium size)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 239.35px 7.91667px; transform-origin: 239.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving but is solveable using Recursion with limited Guessing.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking Recursion.  When Evolve is used within a recursive routine that asserts incorrect content the Evolve may produce an invalid output for the invalid input. The two medium test cases are from Games World of Puzzles October 2020. I was unable to manually solve these puzzles on my first attempt prior to making an error thus I decided to program this simple pencil puzzle. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 324.633px 7.91667px; transform-origin: 324.633px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv init solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n%  show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv evolve solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n \r\n % Check if solved\r\n [sv,valid]=pcheck(s,p,bsegs);\r\n \r\n % Start recursive processing\r\n if ~valid\r\n  [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap);\r\n  [sv,valid]=pcheck(s,p,bsegs);\r\n end\r\n%\r\n if valid\r\n  fprintf('sv recursion solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n else\r\n  fprintf('No solution found\\n')\r\n end\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\nfunction [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n %show_pfig(s,p,c,emap,pmap,3)\r\n solved=0;\r\n \r\n %work thru options of first end found with minimum options (2 or 3)  \r\n %(first 2 then 3 if any found)\r\n % extend a segment\r\n ps=sum(p);\r\n ptr=find(ps==7,1,'first'); % First Segment with 2 options\r\n if isempty(ptr)\r\n  ptr=find(ps==8,1,'first'); % First Segment with 3 options\r\n end\r\n pc=find(p(ptr,:)==1);\r\n \r\n for i=pc\r\n  pn=p;\r\n  %insertion of code required here\r\n  \r\n  %This modified pn may be invalid and create an invalid evolve result\r\n  [pn,evalid]=evolve(pn,bsegs,s,c,emap,pmap);\r\n  if ~evalid,continue;end\r\n  \r\n  [v,valid]=pcheck(s,pn,bsegs); % check if segment add and evolve solved\r\n  if valid\r\n   solved=1;\r\n   p=pn;\r\n   return;\r\n  end\r\n  \r\n  %Invoke the next level of recursion build with the recursion assert and Evolve\r\n  [pn,solved]=slither_recur(pn,bsegs,s,c,emap,pmap);\r\n  if solved\r\n   p=pn;\r\n   return\r\n  end\r\n end %i\r\n % Loop through options\r\n % Perform evolve\r\n %  if invalid try next option\r\n %  call next level recur\r\n %  if solved return\r\nend %[p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb)\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e10 % 0 non-5 segments, have 2 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==6 || sum(wv)==2 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e15 % 0 non-5 segments, have 3 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==11 || sum(wv)==3 || sum(wv)==7 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n  end %i s3 3\r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=0; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=0;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=0;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=0;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=0; p(nrc*ncc-1,nrc*ncc)=0;\r\n   p(nrc*ncc,nrc*ncc-nrc)=0;p(nrc*ncc-nrc,nrc*ncc)=0;\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   p(1,2)=5; p(2,1)=5;\r\n   p(1,nrc+1)=5;p(nrc+1,1)=5;\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   p(nrc-1,nrc)=5; p(nrc,nrc-1)=5;\r\n   p(nrc,2*nrc)=5;p(2*nrc,nrc)=5;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=5; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=5;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=5;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=5;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=5; p(nrc*ncc-1,nrc*ncc)=5;\r\n   p(nrc*ncc,nrc*ncc-nrc)=5;p(nrc*ncc-nrc,nrc*ncc)=5;\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up, virtual cv(2)+1==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up\r\n   end\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor, virt cv(2)-nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor rt\r\n   end\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor, virt cv(2)+nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor lt\r\n   end\r\n  end % j L col\r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+1)==0\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  vud\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+nrc)==0\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  hLR\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     if p(cv(2),cv(2)+1)==5 % rr;xr\r\n      if i\u003e1\r\n       p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)+1)==5 % rr;rx\r\n      if i\u003e1\r\n       p(cv(1),cv(1)-1)=0;p(cv(1)-1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     if p(cv(2),cv(2)-1)==5 % xr;rr\r\n      if i\u003cnrc\r\n       p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)-1)==5 % rx;rr\r\n      if i\u003cnrc\r\n       p(cv(1),cv(1)+1)=0;p(cv(1)+1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n     \r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)+1)==0 % down dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+1)==0 % down dead end, rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)-1)==0 % up dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-1)==0 % up dead end rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)-nrc)==0 % rt dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-nrc)==0 % rt dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)+nrc)==0 % left dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+nrc)==0 % left dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5)\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %need an isequal(p,pb)\r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars\r\n   ps=sum(p);\r\n   pv= ps\u003e4  \u0026 ~(ps==10);\r\n   pidx=find(pv);\r\n   for i=pidx\r\n    v=[i find(p(i,:)==5)];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     \r\n    end\r\n    if Lv\u003c4,continue;end % Need at least 3 segments to make a loop\r\n    if p(v(1),v(end)) % path ends are currently adjacent, likely sb 0 but may be final solve\r\n     if Lv\u003cnnz(p==5)/2\r\n      p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n     else % Possible solve\r\n      pchk=p;\r\n      pchk(v(1),v(end))=5;pchk(v(end),v(1))=5;\r\n      [sv,valid]=pcheck(s,pchk,bsegs); % check if solved\r\n      if valid\r\n       p=pchk;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n      end\r\n     end % Lv\r\n    end % p( v 1 end)\r\n   end % pidx\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n  %possible evolve is try seg to see if evolve base leads to a fail thus must be black\r\n  \r\n%   isequal(p,pb)\r\n%   show_pfig(s,p,c,emap,pmap,3)\r\n%   show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n\r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    %if s(sptr)==5,continue;end % what if a 4 seg circle occurs around a 5?\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); % .48  17K\r\n    %if nnz(sum(p)==5) % Node with no escape %.48\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    %if nnz(sum(p)\u003e14) % Node with too many segments % .47\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created                  **********************************\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   %pidx=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; \r\n   %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[3 3 2 3 5 5 3 3 5 1;\r\n    5 5 5 2 5 5 5 5 5 5;\r\n    1 5 5 5 5 1 1 5 5 2;\r\n    0 5 5 5 5 2 5 5 3 3;\r\n    0 5 5 5 1 3 5 5 5 5;\r\n    5 5 5 5 2 3 5 5 5 0;\r\n    3 2 5 5 1 5 5 5 5 2;\r\n    3 5 5 2 0 5 5 5 5 2;\r\n    5 5 5 5 5 5 2 5 5 5;\r\n    3 5 1 3 5 5 3 3 2 3]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['252';\r\n   '151';\r\n   '212']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['33353';\r\n   '15551';\r\n   '25055';\r\n   '55253';\r\n   '13511']-'0';% evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[5 1 5 5 3 5 5 5 0 1;\r\n    5 0 5 5 5 3 3 5 5 5;\r\n    5 5 5 1 2 5 5 5 3 5;\r\n    2 5 5 5 5 5 2 0 5 2;\r\n    0 5 5 5 5 5 5 5 5 5;\r\n    5 5 5 5 5 5 5 5 5 3;\r\n    3 5 1 2 5 5 5 5 5 1;\r\n    5 3 5 5 5 3 0 5 5 5;\r\n    5 5 5 0 0 5 5 5 3 5;\r\n    2 1 5 5 5 1 5 5 3 5]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T20:32:38.000Z","updated_at":"2020-11-12T23:28:31.000Z","published_at":"2020-11-12T23:28:31.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink IV: Recursive (medium size)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving but is solveable using Recursion with limited Guessing.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking Recursion.  When Evolve is used within a recursive routine that asserts incorrect content the Evolve may produce an invalid output for the invalid input. The two medium test cases are from Games World of Puzzles October 2020. I was unable to manually solve these puzzles on my first attempt prior to making an error thus I decided to program this simple pencil puzzle. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47468,"title":"Slitherlink III: Evolve","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 615.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 307.833px; transform-origin: 407px 307.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 84.75px 7.91667px; transform-origin: 84.75px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink III: Evolve\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 265.65px 7.91667px; transform-origin: 265.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques but requires additional Evolving that is always valid for a valid input. Evolve examples are a Red bar into a corner must continue that Red bar out of the corner, an s=1 cell with a Red bar must have Black bars on its other 3 edges.  Cases of Trivial and Gimmes should be solved prior to invoking Evolve. The Evolve subroutine is the most critical routine and must be very comprehensive. A general Evolve routine should check if the output State is valid. When Evolve is used within a recursive routine that asserts possibly incorrect content the Evolve may produce an invalid output for the invalid input.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 366.783px 7.91667px; transform-origin: 366.783px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv init solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n%  show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv evolve solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb) %Keep evolving while there is any update to p\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   %insert code\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   %insert code\r\n  end %i s3 3\r\n  \r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n  %insert code\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   %insert code\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   %insert code\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   %insert code\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   %insert code\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   %insert code\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   %insert code\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   %insert code\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   %insert code\r\n  end % \r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    %insert code\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    %insert code\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     %insert code\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     %insert code\r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    %insert code\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    %insert code\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    %insert code\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    %insert code\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5) %Extend Red Bars where there is only 1 option\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars only if no prior evolves have updated p\r\n   % insert code\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); %\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[5 3 5;3 0 3;5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['252';\r\n   '151';\r\n   '212']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['33353';\r\n   '15551';\r\n   '25055';\r\n   '55253';\r\n   '13511']-'0';% evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5]; % Trivial 33\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T19:13:03.000Z","updated_at":"2020-11-12T23:28:07.000Z","published_at":"2020-11-12T23:28:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink III: Evolve\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques but requires additional Evolving that is always valid for a valid input. Evolve examples are a Red bar into a corner must continue that Red bar out of the corner, an s=1 cell with a Red bar must have Black bars on its other 3 edges.  Cases of Trivial and Gimmes should be solved prior to invoking Evolve. The Evolve subroutine is the most critical routine and must be very comprehensive. A general Evolve routine should check if the output State is valid. When Evolve is used within a recursive routine that asserts possibly incorrect content the Evolve may produce an invalid output for the invalid input.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":47463,"title":"Slitherlink II: Gimmes","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 531.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 265.833px; transform-origin: 407px 265.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 87.8667px 7.91667px; transform-origin: 87.8667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink II: Gimmes\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 293.283px 7.91667px; transform-origin: 293.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is solved using only the Gimmes from Slitherlink Starting Techniques. The site is missing the Gimme case of adjacent 31 on an edge. Trivial cases may be presented and should be solved prior to processing the Gimmes. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 363.683px 7.91667px; transform-origin: 363.683px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\n\r\n[sv,valid]=pcheck(s,p,bsegs); \r\nfprintf('sv  init solution\\n')\r\nfprintf('%i ',sv);fprintf('\\n') \r\n\r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n%Author Note: I found creating the complete set was time consuming\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge  add by raz as a Gimme\r\n\r\n [nr,nc]=size(s);\r\n %Example Zero processing\r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  %enter setting of p for 1s in corners\r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  %enter setting of p for 1s in corners\r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n %enter setting of p for 1s in corners \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n %setting p for 03 adjacent cases\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n %setting p for 33 adjacent\r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  %setting p for 03 diagonal\r\n \r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); \r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n  %setting p for 33 diagonal\r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); \r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i); \r\n  %3-0 adjacent set segs to 0/5\r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n %Slithering Starting Techniques misses the 13 edge Gimme     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[5 3 5;3 0 3;5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 2;2 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5;5 0 5;5 3 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5 3 2;5 0 5 0 5;5 3 5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[2 3 5 5 3 5;5 0 5 5 0 5;5 3 5 5 3 2]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":3,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T17:23:06.000Z","updated_at":"2025-05-02T19:04:22.000Z","published_at":"2020-11-12T23:27:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink II: Gimmes\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is solved using only the Gimmes from Slitherlink Starting Techniques. The site is missing the Gimme case of adjacent 31 on an edge. Trivial cases may be presented and should be solved prior to processing the Gimmes. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47453,"title":"Slitherlink I: Trivial","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 540.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 270.333px; transform-origin: 407px 270.333px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 78.5333px 7.91667px; transform-origin: 78.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink I: Trivial\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 258.667px 7.91667px; transform-origin: 258.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases of s with a 4 or a pair of adjacent 3s forming a unique solution loop.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 368.367px 7.91667px; transform-origin: 368.367px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink II: Gimmes will use the Starting Techniques from Slitherlink Techniques. Adjacent 3s  yields R 3 R 3 R board values if trivial did not already solve. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 373.267px 7.91667px; transform-origin: 373.267px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np=trivial_solve(p,bsegs,s);\r\n\r\n[sv,valid]=pcheck(s,p,bsegs);\r\n\r\n  %show_pfig(s,p,c,emap,pmap,1)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns = [5 5 5;5 4 5;5 5 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [5 5;4 5;5 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [3 3];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns = [3;3];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns =[0 5 5;5 3 5;5 3 5;5 5 0];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5];\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T00:38:37.000Z","updated_at":"2020-11-12T23:27:09.000Z","published_at":"2020-11-12T23:27:09.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink I: Trivial\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases of s with a 4 or a pair of adjacent 3s forming a unique solution loop.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink II: Gimmes will use the Starting Techniques from Slitherlink Techniques. Adjacent 3s  yields R 3 R 3 R board values if trivial did not already solve. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47478,"title":"Slitherlink V: Assert/Evolve/Check (large)","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 678.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 339.333px; transform-origin: 407px 339.333px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 210px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 105px; text-align: left; transform-origin: 384px 105px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 168.4px 7.91667px; transform-origin: 168.4px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink V:  Assert/Evolve/Check(large size)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 207.3px 7.91667px; transform-origin: 207.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving and Recursion due to time and depth issues.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking the Assert/Evolve/Check/Update method.  The advanced solving techniques on the web are weak and complicated. The simple method is not to immediately invoke recursion due to the sparseness of data leading to too many false options. Ther actual simple method is to use Try/Catch by asserting segments as Black/Red and then checking if the layout using a robust Evolve creates an invalid state. If the state became invalid when asserting a single segment as Black then it must be Red with the same being true of Red assertion being invalid must mean the segment is Black. If an Evolve is invalid then Assert the right Bar type and perform an evolve to update the board.  The two large test cases are from Games World of Puzzles October 2020. I was completely hopeless for the large puzzles. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 314.917px 7.91667px; transform-origin: 314.917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive(medium size)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n \r\n %Implement Assert/Check/Evolve\r\n [p]=assert(p,bsegs,s,c,emap,pmap); \r\n \r\n % Check if solved\r\n [sv,valid]=pcheck(s,p,bsegs);\r\n if valid\r\n  fprintf('sv Assert solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n end\r\n \r\n % Start recursive processing\r\n if ~valid\r\n  [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap);\r\n  [sv,valid]=pcheck(s,p,bsegs);\r\n end\r\n%\r\n if valid\r\n  fprintf('sv recursion solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n else\r\n  fprintf('No solution found\\n')\r\n end\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\nfunction [p]=assert(p,bsegs,s,c,emap,pmap)\r\n %Insert code here to assert a segment as Red/Black\r\n %Check if evolve of is valid\r\n %If not valid then Assert segment as Black/Red depending on case and then evolve\r\n %Keep asserting until no more p updates and/or s is solved\r\n %Asserting ends of red segments first may reduce total time\r\n pb=p*0;\r\n valid=0;\r\n while ~isequal(p,pb) \u0026\u0026 ~valid\r\n  pb=p;\r\n  [pr,pc]=find(p==1);\r\n  % insert code here\r\n end % while\r\nend\r\n\r\nfunction [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n %show_pfig(s,p,c,emap,pmap,3)\r\n solved=0;\r\n \r\n %work thru options of first end found with minimum options (2 or 3)  \r\n %(first 2 then 3 if any found)\r\n % extend a segment\r\n ps=sum(p);\r\n ptr=find(ps==7,1,'first'); % First Segment with 2 options\r\n if isempty(ptr)\r\n  ptr=find(ps==8,1,'first'); % First Segment with 3 options\r\n end\r\n pc=find(p(ptr,:)==1);\r\n \r\n for i=pc\r\n  pn=p;\r\n  pn(ptr,i)=5;pn(i,ptr)=5; % make linkage\r\n  \r\n  %This modified pn may be invalid and create an invalid evolve result\r\n  [pn,evalid]=evolve(pn,bsegs,s,c,emap,pmap);\r\n  if ~evalid,continue;end\r\n  \r\n  [v,valid]=pcheck(s,pn,bsegs); % check if segment add and evolve solved\r\n  if valid\r\n   solved=1;\r\n   p=pn;\r\n   return;\r\n  end\r\n  \r\n  %Invoke the next level of recursion build with the recursion assert and Evolve\r\n  [pn,solved]=slither_recur(pn,bsegs,s,c,emap,pmap);\r\n  if solved\r\n   p=pn;\r\n   return\r\n  end\r\n end %i\r\n % Loop through options\r\n % Perform evolve\r\n %  if invalid try next option\r\n %  call next level recur\r\n %  if solved return\r\nend %[p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb)\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e10 % 0 non-5 segments, have 2 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==6 || sum(wv)==2 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e15 % 0 non-5 segments, have 3 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==11 || sum(wv)==3 || sum(wv)==7 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n  end %i s3 3\r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=0; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=0;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=0;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=0;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=0; p(nrc*ncc-1,nrc*ncc)=0;\r\n   p(nrc*ncc,nrc*ncc-nrc)=0;p(nrc*ncc-nrc,nrc*ncc)=0;\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   p(1,2)=5; p(2,1)=5;\r\n   p(1,nrc+1)=5;p(nrc+1,1)=5;\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   p(nrc-1,nrc)=5; p(nrc,nrc-1)=5;\r\n   p(nrc,2*nrc)=5;p(2*nrc,nrc)=5;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=5; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=5;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=5;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=5;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=5; p(nrc*ncc-1,nrc*ncc)=5;\r\n   p(nrc*ncc,nrc*ncc-nrc)=5;p(nrc*ncc-nrc,nrc*ncc)=5;\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up, virtual cv(2)+1==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up\r\n   end\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor, virt cv(2)-nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor rt\r\n   end\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor, virt cv(2)+nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor lt\r\n   end\r\n  end % j L col\r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+1)==0\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  vud\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+nrc)==0\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  hLR\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     if p(cv(2),cv(2)+1)==5 % rr;xr\r\n      if i\u003e1\r\n       p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)+1)==5 % rr;rx\r\n      if i\u003e1\r\n       p(cv(1),cv(1)-1)=0;p(cv(1)-1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     if p(cv(2),cv(2)-1)==5 % xr;rr\r\n      if i\u003cnrc\r\n       p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)-1)==5 % rx;rr\r\n      if i\u003cnrc\r\n       p(cv(1),cv(1)+1)=0;p(cv(1)+1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n     \r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)+1)==0 % down dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+1)==0 % down dead end, rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)-1)==0 % up dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-1)==0 % up dead end rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)-nrc)==0 % rt dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-nrc)==0 % rt dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)+nrc)==0 % left dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+nrc)==0 % left dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5)\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %need an isequal(p,pb)\r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars\r\n   ps=sum(p);\r\n   pv= ps\u003e4  \u0026 ~(ps==10);\r\n   pidx=find(pv);\r\n   for i=pidx\r\n    v=[i find(p(i,:)==5)];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     \r\n    end\r\n    if Lv\u003c4,continue;end % Need at least 3 segments to make a loop\r\n    if p(v(1),v(end)) % path ends are currently adjacent, likely sb 0 but may be final solve\r\n     if Lv\u003cnnz(p==5)/2\r\n      p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n     else % Possible solve\r\n      pchk=p;\r\n      pchk(v(1),v(end))=5;pchk(v(end),v(1))=5;\r\n      [sv,valid]=pcheck(s,pchk,bsegs); % check if solved\r\n      if valid\r\n       p=pchk;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n      end\r\n     end % Lv\r\n    end % p( v 1 end)\r\n   end % pidx\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n  %possible evolve is try seg to see if evolve base leads to a fail thus must be black\r\n  \r\n%   isequal(p,pb)\r\n%   show_pfig(s,p,c,emap,pmap,3)\r\n%   show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n\r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    %if s(sptr)==5,continue;end % what if a 4 seg circle occurs around a 5?\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); % .48  17K\r\n    %if nnz(sum(p)==5) % Node with no escape %.48\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    %if nnz(sum(p)\u003e14) % Node with too many segments % .47\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created                  **********************************\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   %pidx=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; \r\n   %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[3 3 2 3 5 5 3 3 5 1;\r\n    5 5 5 2 5 5 5 5 5 5;\r\n    1 5 5 5 5 1 1 5 5 2;\r\n    0 5 5 5 5 2 5 5 3 3;\r\n    0 5 5 5 1 3 5 5 5 5;\r\n    5 5 5 5 2 3 5 5 5 0;\r\n    3 2 5 5 1 5 5 5 5 2;\r\n    3 5 5 2 0 5 5 5 5 2;\r\n    5 5 5 5 5 5 2 5 5 5;\r\n    3 5 1 3 5 5 3 3 2 3]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\ns=['053552235013';\r\n   '505555535555';\r\n   '355135525552';\r\n   '521552155535';\r\n   '555305555553';\r\n   '535555335551';\r\n   '525050255352';\r\n   '325255555505';\r\n   '525555552521';\r\n   '152552253525';\r\n   '255533555535';\r\n   '255555522555';\r\n   '535551355315';\r\n   '355535512553';\r\n   '555525555515';\r\n   '132523255153']-'0'; % Solves with Assert\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=['225355223525';\r\n    '555235535535';\r\n    '555255555555';\r\n    '232535355512';\r\n    '355555535515';\r\n    '255035555502';\r\n    '555555522555';\r\n    '055515555315';\r\n    '513555535550';\r\n    '555025555555';\r\n    '015555522552';\r\n    '505535555553';\r\n    '315553525223';\r\n    '555555553555';\r\n    '525515531555';\r\n    '535312551533']-'0'; % solves with Assert, Dies in Recursion\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[5 1 5 5 3 5 5 5 0 1;\r\n    5 0 5 5 5 3 3 5 5 5;\r\n    5 5 5 1 2 5 5 5 3 5;\r\n    2 5 5 5 5 5 2 0 5 2;\r\n    0 5 5 5 5 5 5 5 5 5;\r\n    5 5 5 5 5 5 5 5 5 3;\r\n    3 5 1 2 5 5 5 5 5 1;\r\n    5 3 5 5 5 3 0 5 5 5;\r\n    5 5 5 0 0 5 5 5 3 5;\r\n    2 1 5 5 5 1 5 5 3 5]; % solves with recursive/assert\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T21:28:57.000Z","updated_at":"2024-12-14T18:13:16.000Z","published_at":"2020-11-12T23:19:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink V:  Assert/Evolve/Check(large size)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving and Recursion due to time and depth issues.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking the Assert/Evolve/Check/Update method.  The advanced solving techniques on the web are weak and complicated. The simple method is not to immediately invoke recursion due to the sparseness of data leading to too many false options. Ther actual simple method is to use Try/Catch by asserting segments as Black/Red and then checking if the layout using a robust Evolve creates an invalid state. If the state became invalid when asserting a single segment as Black then it must be Red with the same being true of Red assertion being invalid must mean the segment is Black. If an Evolve is invalid then Assert the right Bar type and perform an evolve to update the board.  The two large test cases are from Games World of Puzzles October 2020. I was completely hopeless for the large puzzles. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink IV: Recursive(medium size)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47473,"title":"Slitherlink IV: Recursive (medium size)","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 615.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 307.833px; transform-origin: 407px 307.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 144.667px 7.91667px; transform-origin: 144.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink IV: Recursive (medium size)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 239.35px 7.91667px; transform-origin: 239.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving but is solveable using Recursion with limited Guessing.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking Recursion.  When Evolve is used within a recursive routine that asserts incorrect content the Evolve may produce an invalid output for the invalid input. The two medium test cases are from Games World of Puzzles October 2020. I was unable to manually solve these puzzles on my first attempt prior to making an error thus I decided to program this simple pencil puzzle. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 324.633px 7.91667px; transform-origin: 324.633px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv init solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n%  show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv evolve solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n \r\n % Check if solved\r\n [sv,valid]=pcheck(s,p,bsegs);\r\n \r\n % Start recursive processing\r\n if ~valid\r\n  [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap);\r\n  [sv,valid]=pcheck(s,p,bsegs);\r\n end\r\n%\r\n if valid\r\n  fprintf('sv recursion solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n else\r\n  fprintf('No solution found\\n')\r\n end\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\nfunction [p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n %show_pfig(s,p,c,emap,pmap,3)\r\n solved=0;\r\n \r\n %work thru options of first end found with minimum options (2 or 3)  \r\n %(first 2 then 3 if any found)\r\n % extend a segment\r\n ps=sum(p);\r\n ptr=find(ps==7,1,'first'); % First Segment with 2 options\r\n if isempty(ptr)\r\n  ptr=find(ps==8,1,'first'); % First Segment with 3 options\r\n end\r\n pc=find(p(ptr,:)==1);\r\n \r\n for i=pc\r\n  pn=p;\r\n  %insertion of code required here\r\n  \r\n  %This modified pn may be invalid and create an invalid evolve result\r\n  [pn,evalid]=evolve(pn,bsegs,s,c,emap,pmap);\r\n  if ~evalid,continue;end\r\n  \r\n  [v,valid]=pcheck(s,pn,bsegs); % check if segment add and evolve solved\r\n  if valid\r\n   solved=1;\r\n   p=pn;\r\n   return;\r\n  end\r\n  \r\n  %Invoke the next level of recursion build with the recursion assert and Evolve\r\n  [pn,solved]=slither_recur(pn,bsegs,s,c,emap,pmap);\r\n  if solved\r\n   p=pn;\r\n   return\r\n  end\r\n end %i\r\n % Loop through options\r\n % Perform evolve\r\n %  if invalid try next option\r\n %  call next level recur\r\n %  if solved return\r\nend %[p,solved]=slither_recur(p,bsegs,s,c,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb)\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e10 % 0 non-5 segments, have 2 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==6 || sum(wv)==2 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e15 % 0 non-5 segments, have 3 links\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==11 || sum(wv)==3 || sum(wv)==7 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e10\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n  end %i s3 3\r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=0; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=0;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=0;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=0;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=0; p(nrc*ncc-1,nrc*ncc)=0;\r\n   p(nrc*ncc,nrc*ncc-nrc)=0;p(nrc*ncc-nrc,nrc*ncc)=0;\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   p(1,2)=5; p(2,1)=5;\r\n   p(1,nrc+1)=5;p(nrc+1,1)=5;\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   p(nrc-1,nrc)=5; p(nrc,nrc-1)=5;\r\n   p(nrc,2*nrc)=5;p(2*nrc,nrc)=5;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   p((ncc-2)*nrc+1,(ncc-1)*nrc+1)=5; p((ncc-1)*nrc+1,(ncc-2)*nrc+1)=5;\r\n   p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)=5;p((ncc-1)*nrc+1+1,(ncc-1)*nrc+1)=5;\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   p(nrc*ncc,nrc*ncc-1)=5; p(nrc*ncc-1,nrc*ncc)=5;\r\n   p(nrc*ncc,nrc*ncc-nrc)=5;p(nrc*ncc-nrc,nrc*ncc)=5;\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up, virtual cv(2)+1==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert vert up\r\n   end\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor, virt cv(2)-nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert hor rt\r\n   end\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor, virt cv(2)+nrc==0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B hor\r\n    p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert hor lt\r\n   end\r\n  end % j L col\r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+1)==0\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  vud\r\n     p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0; % Insert v up\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)+nrc)==0\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n    end\r\n    if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B  hLR\r\n     p(cv(2),cv(2)-nrc)=0;p(cv(2)-nrc,cv(2))=0; % Insert h L\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     if p(cv(2),cv(2)+1)==5 % rr;xr\r\n      if i\u003e1\r\n       p(cv(2),cv(2)-1)=0;p(cv(2)-1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)+1)==5 % rr;rx\r\n      if i\u003e1\r\n       p(cv(1),cv(1)-1)=0;p(cv(1)-1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     if p(cv(2),cv(2)-1)==5 % xr;rr\r\n      if i\u003cnrc\r\n       p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0;\r\n      end\r\n      if j\u003cncc-1\r\n       p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0;\r\n      end\r\n     end\r\n     \r\n     if p(cv(1),cv(1)-1)==5 % rx;rr\r\n      if i\u003cnrc\r\n       p(cv(1),cv(1)+1)=0;p(cv(1)+1,cv(1))=0;\r\n      end\r\n      if j\u003e1\r\n       p(cv(1),cv(1)-nrc)=0;p(cv(1)-nrc,cv(1))=0;\r\n      end\r\n     end\r\n     \r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)+1)==0 % down dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+1)==0 % down dead end, rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    if p(cv(1),cv(1)-1)==0 % up dead end left side\r\n     if j\u003e1\r\n      p(cv(1)-nrc,cv(1))=0;p(cv(1),cv(1)-nrc)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-1)==0 % up dead end rt side\r\n     if j\u003cncc-1\r\n      p(cv(2)+nrc,cv(2))=0;p(cv(2),cv(2)+nrc)=0;\r\n     end\r\n    end\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)-nrc)==0 % rt dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)-nrc)==0 % rt dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    if p(cv(1),cv(1)+nrc)==0 % left dead end up side\r\n     if i\u003e1\r\n      p(cv(1)-1,cv(1))=0;p(cv(1),cv(1)-1)=0;\r\n     end\r\n    end\r\n    if p(cv(2),cv(2)+nrc)==0 % left dead end down side\r\n     if i\u003cnrc-1\r\n      p(cv(2)+1,cv(2))=0;p(cv(2),cv(2)+1)=0;\r\n     end\r\n    end\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5)\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %need an isequal(p,pb)\r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars\r\n   ps=sum(p);\r\n   pv= ps\u003e4  \u0026 ~(ps==10);\r\n   pidx=find(pv);\r\n   for i=pidx\r\n    v=[i find(p(i,:)==5)];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     \r\n    end\r\n    if Lv\u003c4,continue;end % Need at least 3 segments to make a loop\r\n    if p(v(1),v(end)) % path ends are currently adjacent, likely sb 0 but may be final solve\r\n     if Lv\u003cnnz(p==5)/2\r\n      p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n     else % Possible solve\r\n      pchk=p;\r\n      pchk(v(1),v(end))=5;pchk(v(end),v(1))=5;\r\n      [sv,valid]=pcheck(s,pchk,bsegs); % check if solved\r\n      if valid\r\n       p=pchk;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       p(v(1),v(end))=0;p(v(end),v(1))=0;\r\n      end\r\n     end % Lv\r\n    end % p( v 1 end)\r\n   end % pidx\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n  %possible evolve is try seg to see if evolve base leads to a fail thus must be black\r\n  \r\n%   isequal(p,pb)\r\n%   show_pfig(s,p,c,emap,pmap,3)\r\n%   show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n\r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    %if s(sptr)==5,continue;end % what if a 4 seg circle occurs around a 5?\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); % .48  17K\r\n    %if nnz(sum(p)==5) % Node with no escape %.48\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    %if nnz(sum(p)\u003e14) % Node with too many segments % .47\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created                  **********************************\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   %pidx=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n%    v=unique([v find(p(v(end),:)==5)],'stable'); %.118\r\n     \r\n%      v=[v find(p(v(end),:)==5)]; % fast add unique node to end\r\n%      if nnz(v(1:end-2)==v(end))\r\n%       v(end)=[];\r\n%      elseif nnz(v(1:end-2)==v(end))\r\n%       v(end-1)=[];\r\n%      end\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; \r\n   %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[3 3 2 3 5 5 3 3 5 1;\r\n    5 5 5 2 5 5 5 5 5 5;\r\n    1 5 5 5 5 1 1 5 5 2;\r\n    0 5 5 5 5 2 5 5 3 3;\r\n    0 5 5 5 1 3 5 5 5 5;\r\n    5 5 5 5 2 3 5 5 5 0;\r\n    3 2 5 5 1 5 5 5 5 2;\r\n    3 5 5 2 0 5 5 5 5 2;\r\n    5 5 5 5 5 5 2 5 5 5;\r\n    3 5 1 3 5 5 3 3 2 3]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['252';\r\n   '151';\r\n   '212']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['33353';\r\n   '15551';\r\n   '25055';\r\n   '55253';\r\n   '13511']-'0';% evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n%Source: Games World of Puzzles October 2020\r\n s=[5 1 5 5 3 5 5 5 0 1;\r\n    5 0 5 5 5 3 3 5 5 5;\r\n    5 5 5 1 2 5 5 5 3 5;\r\n    2 5 5 5 5 5 2 0 5 2;\r\n    0 5 5 5 5 5 5 5 5 5;\r\n    5 5 5 5 5 5 5 5 5 3;\r\n    3 5 1 2 5 5 5 5 5 1;\r\n    5 3 5 5 5 3 0 5 5 5;\r\n    5 5 5 0 0 5 5 5 3 5;\r\n    2 1 5 5 5 1 5 5 3 5]; % solves with recursive\r\n\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T20:32:38.000Z","updated_at":"2020-11-12T23:28:31.000Z","published_at":"2020-11-12T23:28:31.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink IV: Recursive (medium size)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques with a single Evolving but is solveable using Recursion with limited Guessing.  Cases of Trivial, Gimmes, and single Evolve should be solved prior to invoking Recursion.  When Evolve is used within a recursive routine that asserts incorrect content the Evolve may produce an invalid output for the invalid input. The two medium test cases are from Games World of Puzzles October 2020. I was unable to manually solve these puzzles on my first attempt prior to making an error thus I decided to program this simple pencil puzzle. This set of five Cody Challenges is the result of five days banging my keyboard to solve Slitherlink.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink III: Evolve, Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":47468,"title":"Slitherlink III: Evolve","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 615.65px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 307.833px; transform-origin: 407px 307.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 105px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 80.1333px 7.91667px; transform-origin: 80.1333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Slitherlink\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 137.7px 7.91667px; transform-origin: 137.7px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e pencil puzzles. An essential starter guide is \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSlitherlink Techniques\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 55.2167px 7.91667px; transform-origin: 55.2167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 84.75px 7.91667px; transform-origin: 84.75px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThis Slitherlink III: Evolve\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 265.65px 7.91667px; transform-origin: 265.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques but requires additional Evolving that is always valid for a valid input. Evolve examples are a Red bar into a corner must continue that Red bar out of the corner, an s=1 cell with a Red bar must have Black bars on its other 3 edges.  Cases of Trivial and Gimmes should be solved prior to invoking Evolve. The Evolve subroutine is the most critical routine and must be very comprehensive. A general Evolve routine should check if the output State is valid. When Evolve is used within a recursive routine that asserts possibly incorrect content the Evolve may produce an invalid output for the invalid input.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 19.4333px 7.91667px; transform-origin: 19.4333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 333.35px 7.91667px; transform-origin: 333.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 25.2667px 7.91667px; transform-origin: 25.2667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334.583px 7.91667px; transform-origin: 334.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 31.1167px 7.91667px; transform-origin: 31.1167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 40.8667px; transform-origin: 404px 40.8667px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 358.05px 7.91667px; transform-origin: 358.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 365.75px 7.91667px; transform-origin: 365.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 177.1px 7.91667px; transform-origin: 177.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(2, 128, 9); border-block-start-color: rgb(2, 128, 9); border-bottom-color: rgb(2, 128, 9); border-inline-end-color: rgb(2, 128, 9); border-inline-start-color: rgb(2, 128, 9); border-left-color: rgb(2, 128, 9); border-right-color: rgb(2, 128, 9); border-top-color: rgb(2, 128, 9); caret-color: rgb(2, 128, 9); color: rgb(2, 128, 9); column-rule-color: rgb(2, 128, 9); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(2, 128, 9); text-decoration: none; text-decoration-color: rgb(2, 128, 9); text-emphasis-color: rgb(2, 128, 9); \"\u003e% 4 8 12 16 20]                       %to path\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 132.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 66.4667px; text-align: left; transform-origin: 384px 66.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 66.9px 7.91667px; transform-origin: 66.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRelated Challenges:\u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 241px;height: 127px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPEAAAB/CAIAAACxE7P2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5AsMABUVJm9/YgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxMS1Ob3YtMjAyMCAxNjoyMToyMaHVoXMAAAxGSURBVHic7Z1tSFPvG8evpotJLQslF0WeIn492hShZ2q/JJOKNd/ki4JmikGFQlFRkS7oRUKQPYA9UP4L60UPZCRJ0cM07WFRMdIyk5qVYcNSi9LM6f/FqbHfzmY2z+772tn1YS/sPtt9vl77enef+5z7uob09fUBQSgIFW8BBCEz5GlCaZCnCaVBniaUBnmaUBqRwe3eag1u/4TCMBgG38eQ4K7lDRkSxM4JxVFptep0uri4uJEjRwbcSZDHaYL4S1paWrq6ugbjaZpPE+hob2/v6uoK+ONBmHtYrfDvvzL3SYQbJSVgNgf2URqnCaVBniaUBqtrRLMZFi1idC4P/nf6dKVkPbHAYhHi49mL2bNnj8Ph8GosKSlhrwQAMjMzvVoWGQzmtWs5SGlqAotFzg77ZOfOnT4A71dJifwnGgAWX8F68+YNFzEGyeKrIAhclPT5uogym818pMhtGJp7EEqDPE0oDfI0oTRC4z5ibW3tixcvenp6oqOjU1NTIyP5y3748GFDQ8Pq1atVKv7jAgYxDQ0Nz58/7+zsjIyMTEhImDJlCi8l/M3RP48fP87KyrLb7e6W6Ojo7du379ixg6Oqjx8/Go1Gp9OZkZExdOhQjkowiKmpqdm4caPndwQAer2+uLh47ty57PWg9vTdu3eXLl3a2dkZGxublpam0Wjq6+urq6t37txZW1t79uxZLqra2tqWL1/udDq5nN0L7mKuXbtmNBpdLtewYcOWLVsWHR3d0dFRXl5ut9sXLVpUXl6emprKWpN8SzK/kWlpxuVyTZw4EQCSk5M/f/7sbj927Jio/PLly3/sRPa1vLdv3yYkJLi7+vHjx8A/K/ta3mDESMMSwFret2/fYmNjAWDevHmtra3u9g8fPkyfPh0AdDpdZ2fnH3oJn7W8srKy169fA0BpaemoUaPc7Tk5OQsWLBDbGUs6efJkQkLCs2fPGJ/XJxjEXLhwobW1NSIi4vz58zExMe72MWPGnD9/HgBaWlquXLnCWBVeT7e1tc2ZMycpKUl6tTFp0iQAqK2tZSamp6dn5syZ2dnZHR0dycnJhw8fZnZqzGJu3LgBAPPnzx87dqzXoWnTpmm1WgB4+PAhY1V4PZ2VlXX//v0nT55ID3369AkA/vnnH2Zient7nz17ptVq9+3bZ7PZxo0bx+zUmMVs3br1ypUre/fu9Xm0t7cXANhftqK+RvRJZWXl1atXASA9PZ3ZSVUqlcViyc3N9ZwF8QKPmMTExMTERJ+Hampqvn37BgBz5sxhKyp0PF1ZWdnR0XH16lXxoR+z2Sx9Cid4REZGFhQUMDtd/6AS44/NmzcDgE6nW7FiBeNTh4ane3t7U1JSXC6X+M/09PTi4mK+koh+WL9+vc1mA4CioiL2N8jwzqc9+f79u8lkMpvN6enparX68uXLEyZMuHv3Lm9dhA+2bdt2/PhxAMjLy8vIyGAvIDTG6eHDh1+8eFH8uampaenSpS9fvly5cmVdXd2YMWP4aiM8ycrKOnXqFACYzeaioiIuGkJjnPYkPj6+rKwMANra2o4ePcpbDvGLL1++LFmyRDT0li1beO11gFD0NABMmTIlOTkZALyeMSB40dzcPGvWrJs3bwLAwYMH9+/fz1EM3rnH69ev6+vrY2JiZs+eLT2q0+kAoKenh7kuwpva2tqUlBSn06nVai9evMjhAY//gtfTmzZtqqioWLx48a1bt6RHxRE6OjqauS7iPzQ2NoqG1ul0FRUV/parWYJ37iE+pnj79u3nz597HSorK3v//j0ApKWlcVBG/Ka7u3vFihVOp3P06NEPHjzAYGjAPE5v2LDh0KFDra2tq1atun79uvuJghs3bqxbtw4AEhISVq9ezVVjuFNYWPjy5UsAyMzMrKurq6urk75n/PjxM2bMYKkKr6djYmLOnj1rMpnq6uomTJhgNBqjoqIaGhrExXxBECoqKjDsMQlnjhw5Iv5QWFhYWFjo8z3Z2dknTpxgKArx3AMAUlNTbTbbggULfv78eenSpdLSUpvNplar8/Lynjx5In0WjGBJY2Mjko0RXuAdp0VmzJiB8H6hyWTqQ1OvjJeYSZMm4QmCJ6jHaYIIAPI0oTgC3vXlF5/by9C8BN4BJ7ww+PymFLkfMUgYyNZKJ+w8ze3JGoIVYedpQvGQpwmlIb+nrQBDfr8Igj3Bvedi/f2DIAiCIAT1XL5xOECSmt9gMHg3McHqqwKqNDkTG6RieH1HBpC7Nqx8a3i/uHPnjvQsJZzqBPRZLD7WiahOANUJIIgQgjxNKA3yNKE0sD+XJ4InB70bDKn5m5ubHz161NnZGRUVtXjx4hEjRvBS4gn/yMg31f+FvNeI1dXVer3eqze9Xn/v3r0BfT4414gtLS2jR48GfvmnOzo61qxZ49mVWq3evn27y+UaYA/S70iWa8RAIiP3NSLqcRpjDnoEqfm7u7uXLFlis9kiIiKMRmNMTIxYPqGwsLCxsdGd3Ic93CPzi4D/Gvwh1zgtTw56ucdpDHUC8vPzAUCr1T548MDdKCaLAYBz584NpBPpdzTIcTrwyITPWh7CHPQYUvP39PQcOHAAAPLz8z0zn2RmZmZnZwOAv32BQQVDZNzg9TSqHPR4UvOXl5d//foVfBUMz8nJAQC73V5fX89MD57IuMHraVQ56PGk5hfvaQuC4Pl/l0hycrJarQa25SbwRMYN3mtEVDno8aTmf/v2LQAkJSVJD6lUKkEQXr16VV1dvXbtWjZ68ETGDd5xuh/Y56AXU/Nj+Nq+f/8O/pOqiTVuxPewAU9k3ISep/nmoOfO06dPAcDfLy62//jxg6kmZISYp7nnoOeOeCHhD/HWXf/vUTyhNM5hyEHPHY1G089R0c1hnnItNH55PDnouSPeb+ru7vZ5VGyPiopiqgkZITBONzc3p6SkiPkzDx48mJuby1sRT4YPHw4A4hK1lBcvXgCAdJkvrMDuaWw56LkzefJkAGhoaJAe6u3tfffuHQD4rKwQPqCee3jmoK+qqiJDA8D8+fMBoL6+XixQ7UlNTY1YQtLn6nX4gNfTOHPQcyctLS02NtblconrP56ILUlJSRieL+cI3rkHzhz03FGpVLm5ufn5+bt37546darJZBLbi4qKSktLAUB8ai+cwetpnDnoMbBr166bN29WVVWlp6cvXLhQEAS73S4WbcrOzna7PGxBOvdAm4MeAyqV6vr163l5eWq1uqqq6syZM3a7XavV7t27Nwz/wqUgHafR5qAX4V4nQKPRFBUVIbzxxD0ygHacJoiAIU8TSoPR3OP06dOVlZVszuXJWofDIGncs2ePg7kSAHBIMveBr+0qvLBarVzECA5Hgbw9BryT0R8+99jywkLlL9BjoNoXBNE/5GlCaZCnCaVBniaUBnmaUBqMPM2rTkCBxSIV84bqBGCqEyD7QhmN04TSIE8TSoM8TSgN8jShNJA+a+oP7nUVEFbhAARhAUyRCSVPf/z40Wg0Op3OjIwMZhlN3dTU1GzcuFHcTuJGr9cXFxfPnTuXsRhP+IYF8EUmZDzNt64CziocwDssgDMybJYbB7k+HXhdBTlqX8hThSMI69ODKcQh/Y4CWJ+WJzLhU/vCDfe6CgircACCsADWyKD2NJK6CqiqcACasAC+yIig9jSSugqoqnAAmrAAvsiIoL5GRFJXAVUVDkATFsAXGRHUnhbrKvBW0R/sq3BAKIQFOEVGBPXcAzlhXoWjH/hGhjwdIFSFwx/cI0OjSyBQFQ5/YIgMjdN/B1Xh8AeeyNA4/RdQFQ5/oIoMeXqgUBUOf2CLDHl6QHhW4aioqKCiBW4QRoY8/We8qnDEx8fzVoQFnJEhT/8ZqsLhD5yRIU//GarC4Q+ckaG1vD9AVTj8gTYyoTROc6mrgLwKB/ArN4E2MjROE0qD0Tjd1NRktVrZnMsTweEQpK1WKwg+moONQdIiAACPsIBPMQ4HHzGyF5AIeNeXP/DXCaBXCLyUvR+RIP4K8jShNIb0yX3p2tXV5d5WKd39zx4LQAFvDcQAqfw9odfr9SNHjgysE/nHaY1Go9PpZO+WCB90Ol3AhoYgzT3i4+PJ1kRgaDSauLi4wfQg/9zDTXt7e1lZWZA6HziCr3UrAiftJtNgRmiRIHqaILhA6x6E0iBPE0qDPE0oDfI0oTTI04TSIE8TSoM8TSgN8jShNMjThNL4P3ncDDWW+w8KAAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\" width=\"241\" height=\"127\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 366.783px 7.91667px; transform-origin: 366.783px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n [nr,nc]=size(s);\r\n [nrc,ncc]=size(c);\r\n% p=p'  as a 1-2 seg is also a 2-1 seg. rows/cols are path nodes and c indices\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% sum of p starts as 2 for corners, 3 for edges, and 4 for mid-points\r\n%The display tool, show_pfigs, makes segments Red for p(i,j)=5, Black if 0, grey if 1\r\n% Final nodes of p are either 5 or 0 with sum(p) being 0 or 10\r\n% Nodes in a path have an entry/exit path thus a sum of 10\r\n\r\np1=trivial_solve(p,bsegs,s);\r\n\r\nif nnz(sum(p1,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p1,bsegs); \r\n if valid\r\n  %show_pfig(s,p1,c,emap,pmap,4)\r\n  fprintf('sv trivial solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\nend\r\n\r\n%No initial solve of p\r\n%Process p for standard beginning info\r\np=init(p,bsegs,s,c,emap,pmap);\r\n%show_pfig(s,p,c,emap,pmap,4)\r\ntic\r\nif nnz(sum(p,2)==10)\u003e3 % Possible final solution\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n  %show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv init solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n') \r\n  return\r\n end\r\nend\r\n\r\n%Implement First Evolve\r\n [p,evalid]=evolve(p,bsegs,s,c,emap,pmap); % evalid not used in first evolve\r\n [sv,valid]=pcheck(s,p,bsegs); \r\n if valid\r\n%  show_pfig(s,p,c,emap,pmap,4)\r\n  fprintf('sv evolve solution\\n')\r\n  fprintf('%i ',sv);fprintf('\\n')\r\n  return\r\n end\r\n\r\n \r\nend % sv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n\r\n\r\nfunction [p,evalid]=evolve(p,bsegs,s,c,emap,pmap)\r\n evalid=0;\r\n [nr,nc]=size(s);\r\n pb=p+1;\r\n sp=s; % update sp for completed nodes by +10  0,10  1,11  2,12  3,13 to avoid reprocess\r\n while ~isequal(p,pb) %Keep evolving while there is any update to p\r\n  pb=p;\r\n  s1=find(sp==1)';\r\n  for i=s1 %1 \r\n   v=bsegs(i,:);\r\n   %wv=[p(21,22) p(21,32) p(22,33) p(32,33)]; % \r\n   wv=[p(v(1),v(2)) p(v(3),v(4)) p(v(5),v(6)) p(v(7),v(8))]; %LUDR values 0,1,5\r\n   if sum(wv)\u003e5 % 0 non-5 segments, have single link\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=0;p(vz(2),vz(1))=0;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   elseif sum(wv)==1 % set 1 to 5\r\n    for j=1:4\r\n     if wv(j)==1\r\n      vz=v(2*j-1:2*j);\r\n      p(vz(1),vz(2))=5;p(vz(2),vz(1))=5;\r\n     end\r\n    end\r\n    sp(i)=sp(i)+10;\r\n   end % if sum \u003e5\r\n   %show_pfig(s,p,c,emap,pmap,2)\r\n  end % i s1 1\r\n  \r\n  \r\n  s2=find(sp==2)';\r\n  for i=s2 %2\r\n   v=bsegs(i,:);\r\n   %insert code\r\n  end %i s2 2\r\n  \r\n  s3=find(sp==3)';\r\n  for i=s3 %3\r\n   v=bsegs(i,:);\r\n   %insert code\r\n  end %i s3 3\r\n  \r\n  if ~isequal(p,pb) % s update created new walls\r\n   %show_pfig(s,p,c,emap,pmap,2);\r\n   continue;\r\n  end\r\n  %show_pfig(s,p,c,emap,pmap,2)\r\n  \r\n  %Process links for new walls\r\n  % RR straight blocks perp, Binto corner makes B outcorner\r\n  % RR corner blocks to corner\r\n  % R into corner extends R\r\n  % BB straight b1 b2 b3; need b2-1 to block b2+1, need b2+1 to block b2-1\r\n  % R node with one option extends R\r\n  [nrc,ncc]=size(c);\r\n  % Bcorners if either corner edge B then both B\r\n  if p(1,2)==0 || p(1,nrc+1)==0 %TLC\r\n   p(1,2)=0; p(2,1)=0;\r\n   p(1,nrc+1)=0;p(nrc+1,1)=0;\r\n  end\r\n  if p(nrc-1,nrc)==0 || p(nrc,2*nrc)==0 %BLC\r\n   p(nrc-1,nrc)=0; p(nrc,nrc-1)=0;\r\n   p(nrc,2*nrc)=0;p(2*nrc,nrc)=0;\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==0 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==0 %TRC\r\n  %insert code\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==0 || p(nrc*ncc,nrc*ncc-nrc)==0 %BRC\r\n   %insert code\r\n  end\r\n  \r\n  % Rcorners if either corner edge R then both R\r\n  if p(1,2)==5 || p(1,nrc+1)==5 %TLC\r\n   %insert code\r\n  end\r\n  if p(nrc-1,nrc)==5 || p(nrc,2*nrc)==5 %BLC\r\n   %insert code\r\n  end\r\n  if p((ncc-2)*nrc+1,(ncc-1)*nrc+1)==5 || p((ncc-1)*nrc+1,(ncc-1)*nrc+1+1)==5 %TRC\r\n   %insert code\r\n  end\r\n  if p(nrc*ncc,nrc*ncc-1)==5 || p(nrc*ncc,nrc*ncc-nrc)==5 %BRC\r\n   %insert code\r\n  end\r\n  \r\n  % BB edges\r\n  %Top Row\r\n  for j=1:ncc-2 % Top Row Black seg pairs, fill down\r\n   cv=c(1,j:j+2);\r\n   if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down, virtual cv(2)-1 == 0\r\n   end\r\n   if p(cv(1),cv(2))==5 \u0026\u0026 p(cv(2),cv(3))==5 % R seg also makes a B vert\r\n    p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert vert down\r\n   end\r\n  end % j Top row\r\n  %Bottom Row\r\n  for j=1:ncc-2 % Bot Row Black seg pairs, fill down\r\n   cv=c(nrc,j:j+2);\r\n   %insert code\r\n  end % j Bot row\r\n  \r\n  %Left Col edge\r\n  for i=1:nrc-2 % L col Black seg pairs, fill hor rt\r\n   cv=c(i:i+2,1);\r\n   %insert code\r\n  end % j L col\r\n  %Right Col edge\r\n  for i=1:nrc-2 % R col Black seg pairs, fill hor lt\r\n   cv=c(i:i+2,ncc);\r\n   %insert code\r\n  end % \r\n  \r\n  %Hor segs not on an edge\r\n  for i=2:nrc-1\r\n   for j=1:ncc-2\r\n    cv=c(i,j:j+2);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-1)==0\r\n     p(cv(2),cv(2)+1)=0;p(cv(2)+1,cv(2))=0; % Insert v d\r\n    end\r\n    %insert code\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  %Ver segs not on an edge\r\n  for i=1:nrc-2\r\n   for j=2:ncc-1\r\n    cv=c(i:i+2,j);\r\n    if p(cv(1),cv(2))==0 \u0026\u0026 p(cv(2),cv(3))==0 \u0026\u0026 p(cv(2),cv(2)-nrc)==0\r\n     p(cv(2),cv(2)+nrc)=0;p(cv(2)+nrc,cv(2))=0; % Insert h R\r\n    end\r\n    %insert code\r\n   end % j 1:ncc-2\r\n  end % i 2:nrc-1\r\n  \r\n  \r\n  % RR corner blocks to corner\r\n  %[rr;xr]  [rr;rx]  [xr;rr]  [rx;rr]\r\n  %RR;xR or RR;Rx\r\n  for i=1:nrc-1\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab top pair\r\n    if p(cv(1),cv(2))==5 % Top Red\r\n     %insert code\r\n    end % Top RR\r\n   end %j\r\n  end %i\r\n  \r\n  for i=2:nrc % Rx;RR  xR;RR\r\n   for j=1:ncc-1\r\n    cv=c(i,j:j+1); % grab lower pair\r\n    if p(cv(1),cv(2))==5 % Bot Red\r\n     %insert code\r\n    end %Bot RR\r\n   end %j\r\n  end %i\r\n  \r\n  % Edge Bs xBB;xBx possible into a BB Tee is a B on the edges\r\n  i=1; % Top\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    %insert code\r\n   end\r\n  end % j\r\n  \r\n  i=nrc; % Bottom % error 2nd time thru meant +nrc cv(2)\r\n  for j=1:ncc-1\r\n   cv=c(i,j:j+1);\r\n   if p(cv(1),cv(2))==0 % BB Top\r\n    %insert code\r\n   end\r\n  end % j\r\n  \r\n  j=ncc; % Right\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    %insert code\r\n   end\r\n  end % i\r\n  \r\n  j=1; % Left\r\n  for i=1:nrc-1\r\n   cv=c(i:i+1,j);\r\n   if p(cv(1),cv(2))==0 % BB Right\r\n    %insert code\r\n   end\r\n  end % i\r\n  \r\n  if ~isequal(p,pb),continue;end\r\n  \r\n  % R node with one option extends R \r\n%   [pr5,pc5]=find(p==5);\r\n%   for i=1:length(pr5)\r\n%    if nnz(p(pr5(i),:)==5)==1 \u0026\u0026 nnz(p(pr5(i),:)\u003e0)==2 % single Red, 1 path out\r\n%     new_node=find(p(pr5(i),:)==1);\r\n%     p(pr5(i),new_node)=5;p(new_node,pr5(i))=5;\r\n%    end\r\n%   end\r\n  \r\n  [pr5,pc5]=find(p==5);\r\n  pr5=unique(pr5); % could sort then remove dupes which are mids\r\n  while ~isempty(pr5) %Extend Red Bars where there is only 1 option\r\n   if nnz(p(pr5(1),:)==5)==1 \u0026\u0026 nnz(p(pr5(1),:)\u003e0)==2 % single Red, 1 path out\r\n    new_node=find(p(pr5(1),:)==1);\r\n    p(pr5(1),new_node)=5;p(new_node,pr5(1))=5;\r\n    pr5(1)=new_node;\r\n   else\r\n    pr5(1)=[];\r\n   end\r\n  end\r\n  \r\n  %check if red seg closes a loop of less than X thus seg must be black\r\n  if isequal(p,pb) % check for bad R bars only if no prior evolves have updated p\r\n   % insert code\r\n  end % isequal p pb  after cells, ends make no change\r\n  \r\n end % while p~=pb\r\n \r\n % Valid checks\r\n   for sptr=1:nr*nc %invalid set/clear segment count\r\n    vsptr=bsegs(sptr,:);\r\n    psegs=[p(vsptr(1),vsptr(2)) p(vsptr(3),vsptr(4)) p(vsptr(5),vsptr(6)) p(vsptr(7),vsptr(8))];\r\n    if s(sptr)==5\r\n     if nnz(psegs==5)==4\r\n      evalid=0;\r\n      return\r\n     else\r\n      continue\r\n     end\r\n    end % s 5\r\n    \r\n    if s(sptr)\u003cnnz(psegs==5) % Too many set segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    if s(sptr)\u003e4-nnz(psegs==0) % Too few set/settable segments\r\n     evalid=0;\r\n     return\r\n    end\r\n    ps=sum(p); %\r\n    if nnz(ps==5) % Node with no escape\r\n     evalid=0;\r\n     return\r\n    end\r\n    if nnz(ps\u003e14) % Node with too many segments\r\n     evalid=0;\r\n     return\r\n    end\r\n   end % sptr\r\n   \r\n   %check for any loops created\r\n   %show_pfig(s,p,c,emap,pmap,3)\r\n   ps=sum(p);\r\n   pidx=find(ps==10);\r\n   pchecked=[];\r\n   for i=pidx\r\n    if nnz(pchecked==i),continue;end % Previously checked in a segment\r\n    vn=find(p(i,:)==5); % Guaranteed 2 points\r\n    if nnz(pchecked==vn(1)) || nnz(pchecked==vn(2))\r\n     pchecked=[pchecked i];\r\n     continue;\r\n    end\r\n    v=[i find(p(i,:)==5,1,'first')];\r\n    Lv=0;\r\n    while length(v)\u003eLv\r\n     Lv=length(v);\r\n     vn=find(p(v(end),:)==5);\r\n     if length(vn)==1,break;end % No loop\r\n     if vn(1)==v(end-1)\r\n      v=[v vn(2)];\r\n     else\r\n      v=[v vn(1)];\r\n     end\r\n     if v(1)==v(end),break;end % Loop created\r\n    end % while extending\r\n    pchecked=[pchecked v];\r\n    \r\n    if Lv\u003c5,continue;end % Need at least 4 segments to make a loop [1 2 4 3 1]\r\n    if v(1)==v(end) % Loop created, may be final solve or a Failed small loop\r\n     if (length(v)-1)\u003cnnz(p==5)/2 %invalid loop   [1 2 4 3 1] loop\r\n      evalid=0;\r\n      return\r\n     else % Possible solve\r\n      [sv,valid]=pcheck(s,p,bsegs); % check if solved\r\n      if valid\r\n       evalid=1;\r\n       return\r\n      else % invalid loop connect thus must be 0\r\n       evalid=0;\r\n       return\r\n      end\r\n     end % Lv-1 compare to total current segments\r\n    end %  v 1 end)\r\n   end % pidx\r\n   \r\n   evalid=1;\r\n \r\nend % evolve\r\n\r\n\r\nfunction p=init(p,bsegs,s,c,emap,pmap)\r\n% Standard Gimmes\r\n% https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\r\n% 0 Corners/Edge/Middle\r\n% 1 Corner\r\n% 2 Corner\r\n% 3 Corner\r\n% 0-3 Adjacent\r\n% 3-3 Adjacent\r\n% 0-3 Diagonal\r\n% 3-3 Diagonal\r\n% 3-1 Edge\r\n\r\n [nr,nc]=size(s);\r\n \r\n [nr0,nc0]=find(s==0);\r\n idx0=find(s==0);\r\n for i=1:length(nr0)\r\n  bidx=idx0(i);\r\n  vb=bsegs(bidx,:);\r\n  for j=1:2:7\r\n   p(vb(j),vb(j+1))=0; % Clear p array segments around zeros valid for all 0s\r\n   p(vb(j+1),vb(j))=0;\r\n  end\r\n  \r\n  if nr0(i)==1 \u0026\u0026 nc0(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(2,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(1+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==1 \u0026\u0026 nc0(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==nr \u0026\u0026 nc0(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n   end\r\n    \r\n  elseif nr0(i)==1 %T non-corner\r\n   vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   \r\n  elseif nr0(i)==nr %B non-corner\r\n   vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==1 %L non-corner\r\n   vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n    \r\n  elseif nc0(i)==nc\r\n   vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n  end % if TL/TR/BL/BR/T/B/L/R\r\n  \r\n end %i  nr0 corners/edges/mid  s==0\r\n \r\n [nr1,nc1]=find(s==1); %One corner zeros\r\n idx1=find(s==1);\r\n for i=1:length(nr1)\r\n  bidx=idx1(i);\r\n  if nr1(i)==1 \u0026\u0026 nc1(i)==1 %TL1\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==1 \u0026\u0026 nc1(i)==nc %TR1\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==1 %BL1\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n   \r\n  elseif nr1(i)==nr \u0026\u0026 nc1(i)==nc %BR1\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=0;\r\n   p(vbsegs(2),vbsegs(1))=0;\r\n   p(vbsegs(3),vbsegs(4))=0;\r\n   p(vbsegs(4),vbsegs(3))=0;\r\n  end\r\n  \r\n end % nr1 corners\r\n \r\n [nr3,nc3]=find(s==3); %Three corners set corner segs to 5\r\n idx3=find(s==3);\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1 %TL3\r\n   vbsegs=bsegs(bidx,1:4); %bidx, L,T\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==1 \u0026\u0026 nc3(i)==nc %TR3\r\n   vbsegs=bsegs(bidx,[3 4 7 8]); %bidx, T,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==1 %BL3\r\n   vbsegs=bsegs(bidx,[1 2 5 6]); %bidx, L,B\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n   \r\n  elseif nr3(i)==nr \u0026\u0026 nc3(i)==nc %BR3\r\n   vbsegs=bsegs(bidx,5:8); %bidx, B,R\r\n   p(vbsegs(1),vbsegs(2))=5;\r\n   p(vbsegs(2),vbsegs(1))=5;\r\n   p(vbsegs(3),vbsegs(4))=5;\r\n   p(vbsegs(4),vbsegs(3))=5;\r\n  end\r\n  \r\n end % nr3 corners\r\n \r\n \r\n [nr2,nc2]=find(s==2);\r\n idx2=find(s==2);\r\n for i=1:length(nr2)\r\n  bidx=idx2(i);\r\n  \r\n  if nr2(i)==1 \u0026\u0026 nc2(i)==1 %TL0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,1:2); %bidx+1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,3:4); %bidx+nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==1 \u0026\u0026 nc2(i)==nc %TR0\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx+1,7:8); %bidx+1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,3:4); %bidx-nr, T\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==1 %BL\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,1:2); %bidx-1, L\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx+nr,5:6); %bidx+nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  elseif nr2(i)==nr \u0026\u0026 nc2(i)==nc %BR\r\n   if nr\u003e1\r\n    vbsegs=bsegs(bidx-1,7:8); %bidx-1, R\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if nc\u003e1\r\n    vbsegs=bsegs(bidx-nr,5:6); %bidx-nr, B\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n    \r\n  end % if TL/TR/BL/BR\r\n  \r\n end %i  s==2 Corners\r\n \r\n \r\n% 0-3 Adjacent\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  %0-3mid sets4 segs, clears 4 segs\r\n  %0-3edge  sets 4 segs, clears 2 segs on edge\r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % Top edge\r\n   if s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   \r\n  elseif nr3(i)==nr % Bot Edge\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   \r\n  elseif nc3(i)==1 %Left Edge\r\n   if s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   \r\n  elseif nc3(i)==nc % Rt edge\r\n   if s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   end\r\n   \r\n   \r\n  else %non-edge 3\r\n   if s(nr3(i)-1,nc3(i))==0 % Top 0  3below0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,B,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tset,Bclear\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i)+1,nc3(i))==0 % Below 0, 3above0\r\n    vbsegs=bsegs(bidx,:); %bidx, L,T,R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, L,R clear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Bset,Tclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n     \r\n   elseif s(nr3(i),nc3(i)-1)==0 % Left 0 3rt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBR set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Lset,Rclear\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx+nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   elseif s(nr3(i),nc3(i)+1)==0 % Right 0 3Lt0\r\n    vbsegs=bsegs(bidx,:); %bidx, TBL set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx-1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx+1, Rset,Lclear\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx-nr, Tclear,Bclear\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    \r\n   end\r\n  end % Edges/Mid 3\r\n    \r\n \r\n end % nr3 with adjacent 0; both can not be on edge or either in a corner\r\n\r\n\r\n% 3-3 Adjacent T3 not Possible. I3 or Ix possible\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  bidx=idx3(i);\r\n  if nr3(i)==1\r\n   if nc3(i)==1 % TL  only one R or D possible\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % TR only one L or D possible. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Top Row  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  \r\n  if nr3(i)\u003cnr  % Mid section 33\r\n   if nc3(i)==1 % check only one R and D p\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    elseif s(bidx+1)==3 %D\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   if nc3(i)==nc % check only D. Process only D\r\n    if s(bidx+1)==3\r\n     vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(3),vbsegs(4))=5;\r\n     p(vbsegs(4),vbsegs(3))=5;\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n     vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n     vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set\r\n     p(vbsegs(5),vbsegs(6))=5;\r\n     p(vbsegs(6),vbsegs(5))=5;\r\n    end\r\n    continue\r\n   end\r\n   % Mid Row (not col 1 or nc)  L or R or D possible, check only R/D\r\n   if s(bidx+nr)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+1 R Clr, idx+nr R set,idx-1 R Clr\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n   elseif s(bidx+1)==3\r\n    vbsegs=bsegs(bidx,:); %bidx, TB set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx-nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx-nr B Clr, idx+1 B set,idx+nr B Clr\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n   end\r\n   continue \r\n  end\r\n  \r\n  if nr3(i)==nr  % Bot row 33\r\n    if nc3(i)==nc,continue;end % No process BR corner\r\n    if s(bidx+nr)==3 %R\r\n     vbsegs=bsegs(bidx,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(1),vbsegs(2))=5;\r\n     p(vbsegs(2),vbsegs(1))=5;\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx+nr,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=5;\r\n     p(vbsegs(8),vbsegs(7))=5;\r\n     vbsegs=bsegs(bidx-1,:); %bidx, LR set,idx+nr R set,idx-1 R Clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    continue\r\n  end\r\n \r\n end % i nr3  3-3 adjacent\r\n\r\n\r\n% 0-3 Diagonal no 3 corners, edges-2/mid-4 allowed\r\n [nr3,nc3]=find(s==3); %3-0 adjacent set segs to 0/5\r\n idx3=find(s==3);\r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n end\r\n for i=1:length(nr3)\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==1,continue;end %corner detect of 3\r\n  if nr3(i)==1 \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==1,continue;end %corner detect\r\n  if nr3(i)==nr \u0026\u0026 nc3(i)==nc,continue;end %corner detect\r\n  \r\n  bidx=idx3(i);\r\n  if nr3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx+1-nr)==0 %BL\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %BR\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==1\r\n  \r\n  if nr3(i)==nr % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %TL\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %TR\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n   end\r\n   continue\r\n  end % nr3==nr\r\n  \r\n  if nc3(i)==1 % double diagonal zeros possible  \r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==1\r\n  \r\n  if nc3(i)==nc % double diagonal zeros possible  \r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   continue\r\n  end % nc3==nc\r\n  \r\n  %mid : check 4 courners\r\n   if s(bidx-1-nr)==0 %LT\r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1-nr)==0 %LB\r\n    vbsegs=bsegs(bidx,:); %bidx, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n   if s(bidx-1+nr)==0 %RT\r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n   end\r\n   if s(bidx+1+nr)==0 %RB\r\n    vbsegs=bsegs(bidx,:); %bidx, RB set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n   end\r\n end % i 0-3 diagonal\r\n\r\n\r\n% 3-3 Diagonal  Convolve to find locations [10;01],[01;10] find 6 \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[1 0;0 1],'same');\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  idx3=find(sc==6); \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+1+nr,:); %bidx+1+nr  down diag, RB set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e1 % Not left edge\r\n     vbsegs=bsegs(bidx-nr,:); %bidx-nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003c=nc-2 % Not near right edge\r\n     vbsegs=bsegs(bidx+1+2*nr,:); %bidx+1+2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2+nr,:); %bidx+2+nr, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DR\r\n \r\n if nr==1 || nc==1  % No single row/col\r\n  nr3=[];\r\n else\r\n  sp=s;\r\n  sp(sp==5)=0;\r\n  sc=conv2(sp,[0 1;1 0],'same'); % conv puts 6 at TL of grid, want TR\r\n  [nr3,nc3]=find(sc==6); %3-0 adjacent set segs to 0/5\r\n  nc3=nc3+1;\r\n  idx3=find(sc==6)+nr; \r\n  \r\n end\r\n \r\n for i=1:length(nr3)\r\n  bidx=idx3(i);  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    \r\n    vbsegs=bsegs(bidx+1-nr,:); %bidx+1+nr  down diag, LB set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    \r\n    if nr3(i)\u003e1 % Not top edge\r\n     vbsegs=bsegs(bidx-1,:); %bidx-1, R clr\r\n     p(vbsegs(7),vbsegs(8))=0;\r\n     p(vbsegs(8),vbsegs(7))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003cnc % Not Right edge\r\n     vbsegs=bsegs(bidx+nr,:); %bidx+nr, T clr\r\n     p(vbsegs(3),vbsegs(4))=0;\r\n     p(vbsegs(4),vbsegs(3))=0;\r\n    end\r\n    \r\n    if nc3(i)\u003e=3 % Not near Left edge\r\n     vbsegs=bsegs(bidx+1-2*nr,:); %bidx+1-2nr, B clr\r\n     p(vbsegs(5),vbsegs(6))=0;\r\n     p(vbsegs(6),vbsegs(5))=0;\r\n    end\r\n    if nr3(i)\u003c=nr-2 % Not near bottom edge\r\n     vbsegs=bsegs(bidx+2-nr,:); %bidx+2-nr, L clr\r\n     p(vbsegs(1),vbsegs(2))=0;\r\n     p(vbsegs(2),vbsegs(1))=0;\r\n    end\r\n    \r\n end % i nr3 33 diagonal DL\r\n \r\n \r\n if nr==1 || nc==1, return;end  % No single row/col\r\n     \r\n i=1; %Top Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, T set\r\n    p(vbsegs(3),vbsegs(4))=5;\r\n    p(vbsegs(4),vbsegs(3))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, BR CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n  i=1; %Top Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LB  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 31\r\n for j=1:nc-1\r\n  if s(i,j)==3 \u0026\u0026 s(i,j+1)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, TR CLR\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    p(vbsegs(7),vbsegs(8))=0;\r\n    p(vbsegs(8),vbsegs(7))=0;\r\n  end\r\n end\r\n \r\n i=nr; %Bot Edge 13\r\n for j=1:nc-1\r\n  if s(i,j)==1 \u0026\u0026 s(i,j+1)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT  clr\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+nr,:); %bidx, B set\r\n    p(vbsegs(5),vbsegs(6))=5;\r\n    p(vbsegs(6),vbsegs(5))=5;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(1),vbsegs(2))=0;\r\n    p(vbsegs(2),vbsegs(1))=0;\r\n  end\r\n end\r\n \r\n j=nc; %Right Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, LT clr\r\n    p(vbsegs(1),vbsegs(1))=0;\r\n    p(vbsegs(2),vbsegs(2))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, R set\r\n    p(vbsegs(7),vbsegs(8))=5;\r\n    p(vbsegs(8),vbsegs(7))=5;\r\n  end\r\n end\r\n \r\n \r\n  j=1; %Left Edge 31\r\n for i=1:nr-1\r\n  if s(i,j)==3 \u0026\u0026 s(i+1,j)==1\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, LB CLR\r\n    p(vbsegs(5),vbsegs(6))=0;\r\n    p(vbsegs(6),vbsegs(5))=0;\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n  end\r\n end\r\n \r\n j=1; %Left Edge 13\r\n for i=1:nr-1\r\n  if s(i,j)==1 \u0026\u0026 s(i+1,j)==3\r\n   bidx=i+(j-1)*nr;  \r\n    vbsegs=bsegs(bidx,:); %bidx, RT clr\r\n    p(vbsegs(7),vbsegs(7))=0;\r\n    p(vbsegs(8),vbsegs(8))=0;\r\n    p(vbsegs(3),vbsegs(4))=0;\r\n    p(vbsegs(4),vbsegs(3))=0;\r\n    vbsegs=bsegs(bidx+1,:); %bidx, L set\r\n    p(vbsegs(1),vbsegs(2))=5;\r\n    p(vbsegs(2),vbsegs(1))=5;\r\n  end\r\n end\r\n \r\nend % init  basic gimmes corners/3-3/33diag/0/03diag/03adj/13edge\r\n\r\n\r\n\r\n\r\nfunction p=trivial_solve(p,bsegs,s)\r\n if nnz(s==4)\r\n  p=p*0;\r\n  %p(?)=5\r\n  p=p+p';\r\n  return\r\n end\r\n \r\n ptr3=find(s==3); % adjacent 3s  check if box around solves\r\n %p(?)=5\r\n p=p+p'; \r\nend %p=trivial_solve(p,bsegs,s)\r\n\r\n\r\n\r\nfunction [v,valid]=pcheck(s,p,bsegs)\r\n%creates the sv vector and tells valid status\r\n valid=0;\r\n v=[];\r\n if nnz(sum(p,2)==10)\u003c4,return;end\r\n  \r\n sv=s(:);\r\n schk=sv*0; % will add seg walls to schk and compare to sv using bsegs while ignore sv==5\r\n p(p\u003c5)=0; % clear non-segments\r\n v=find(sum(p,2)==10,1,'first'); %first index,  indices of corners; valid if v(1)=v(end)\r\n vnext=find(p(v,:)==5,1,'first');\r\n p(v,vnext)=0;\r\n p(vnext,v)=0;\r\n v=[v vnext];\r\n while v(1)~=v(end)\r\n  vnext=find(p(v(end),:)==5);\r\n  if isempty(vnext),return;end % No connector - no solution\r\n  p(v(end),vnext)=0;\r\n  p(vnext,v(end))=0;\r\n  v=[v vnext];\r\n end\r\n % v(1)==v(end)  [1 2 4 3 1]\r\n vsegs=sort([v(1:end-1);v(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(sv) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % bsegs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(sv==5)=5;\r\n if isequal(schk,sv)\r\n  valid=1;\r\n end\r\n \r\nend % pcheck\r\n\r\n\r\n\r\nfunction show_pfig(s,p,c,emap,pmap,fignum)\r\n%Create display of current solution status using p\r\n% p(i,j)=5 is a Red bar, p(i,j)=0 is a Black bar, p(i,j)=1 is a Grey bar\r\n% emap/pmap contain info on what segments are part of the puzzle p(1,end) is not a real segment\r\n [nr,nc]=size(s);\r\n \r\n figure(fignum);plot([0,nc,nc,0,0],[0,0,nr,nr,0],'color',[192 192 192]/255,'LineWidth',5);hold on\r\n axis tight\r\n set (gca,'Ydir','reverse')\r\n set (gca,'Xtick',[]);\r\n set (gca,'Ytick',[]);\r\n for i=0:nr\r\n  plot([0,nc],[i,i],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n for i=0:nc\r\n  plot([i,i],[0,nr],'color',[192 192 192]/255,'LineWidth',5)\r\n end\r\n\r\n for i=1:nr\r\n  for j=1:nc\r\n   txt=num2str(s(i,j));\r\n   t=text(j-.6,i-.5,txt); % reverse i,j  j is y-row, i is col  graph [col,row]\r\n   t.FontSize=20; %https://www.mathworks.com/help/matlab/creating_plots/add-text-to-specific-points-on-graph.html\r\n  end\r\n end\r\n \r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if pv==0\r\n    plot([b,d],[a,c],'k','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n \r\n %Draw RED on top\r\n for i=1:size(pmap,1)\r\n  pr=pmap(i,1);\r\n  pc=pmap(i,2);\r\n  pv=p(pr,pc);\r\n  if pv~=1\r\n   a=emap(pr,1);\r\n   b=emap(pr,2);\r\n   c=emap(pc,1);\r\n   d=emap(pc,2);\r\n   if b==d\r\n    if a\u003cc\r\n     a=max(0,a-.05);\r\n     c=min(nr,c+.05);\r\n    else % a\u003ec\r\n     a=min(nr,a+.05);\r\n     c=max(0,c-.05);\r\n    end\r\n   else %a==c\r\n    if b\u003cd\r\n     b=max(0,b-.05);\r\n     d=min(nc,d+.05);\r\n    else % b\u003ed\r\n     b=min(nc,b+.05);\r\n     d=max(0,d-.05);\r\n    end\r\n   end\r\n   if pv==5\r\n    plot([b,d],[a,c],'r','LineWidth',5);\r\n   end\r\n  end\r\n end\r\n hold off \r\nend %show_pfig(s,p,c,emap,pmap,fignum)\r\n\r\nfunction [c,bsegs,p,pmap]=create_p(nr,nc)\r\n%This is provided by the calling routine.  Included here for reference info\r\n%p is matrix of connections from r2c,c2r\r\n%0 is no connect, 1 is possible, 5 is connected\r\n%p row sums to 0 or 10\r\n%p_row_sum of 1 evolves to 0\r\n%p_row_sum of 6 evolves to 10\r\n%p_row_sum 1:4,6:8 has multiple options\r\n% transpose values always match\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n %[nr*nc,8]  four C segments about each s index\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc];\r\n p=p+p';\r\n \r\n %c\r\n %bsegs\r\n %p\r\n \r\n%1 4 2x1   1 4 7  1 5 9\r\n% A         A C    A D\r\n%2 5       2 5 8  2 6 10\r\n% B         B D    B E\r\n%3 6       3 6 9  3 7 11\r\n%                  C F\r\n%                 4 8 12\r\nend %[c,bsegs,p,pmap]=create_p(nr,nc)\r\n","test_suite":"%%\r\ns = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=[5 3 5;3 0 3;5 3 5]; %No evolve, init solves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['252';\r\n   '151';\r\n   '212']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n s=['3553';\r\n    '1551';\r\n    '2112']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['3212';\r\n   '1521';\r\n   '0532';\r\n   '1322']-'0'; % evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns=['33353';\r\n   '15551';\r\n   '25055';\r\n   '55253';\r\n   '13511']-'0';% evolves\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\npvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\ns =[5 1 1 5;1 3 3 1;5 1 1 5]; % Trivial 33\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n\r\n%%\r\n% anti-hack case\r\ns=zeros(randi(4,1,2)+2)+5;\r\ns(randi(prod(size(s)))) = 4;\r\n\r\n [nr,nc]=size(s);\r\n nr1=nr+1;\r\n nc1=nc+1;\r\n p=zeros(nr1*nc1);\r\n bsegs=zeros(nr*nc,8); % borders\r\n c=reshape(1:nr1*nc1,nr1,nc1); % corners\r\n [er,ec]=find(c);\r\n emap=[er-1,ec-1]; % used by visualizer\r\n \r\n for i=1:nr\r\n  for j=1:nc\r\n   ptr=i+nr*(j-1);\r\n   bsegs(ptr,:)=[c(i,j) c(i+1,j) c(i,j) c(i,j+1) c(i+1,j) c(i+1,j+1) c(i,j+1) c(i+1,j+1)];\r\n  end\r\n end %i\r\n \r\n for i=1:nr*nc\r\n  for j=1:2:7\r\n   p(bsegs(i,j),bsegs(i,j+1))=1;\r\n  end\r\n end\r\n \r\n [pr,pc]=find(p==1);\r\n pmap=[pr,pc]; %used by visualizer\r\n p=p+p';\r\n\r\nsv=slitherlink(s,c,p,bsegs,emap,pmap)\r\n \r\n schk=s(:)*0;\r\n vsegs=sort([sv(1:end-1);sv(2:end)]',2); % make low to hi to match bsegs pairs\r\n idxvsegs=vsegs*[bsegs(end);1]; %Create an index value for easier comparison\r\n \r\n pvalid=1; %check path is valid, contiguous\r\n for i=1:length(sv)-1\r\n  pvalid=pvalid*p(sv(i),sv(i+1));\r\n end\r\n for i=1:length(s(:)) % Create schk by examining all segments for each s index\r\n  for j=1:2:7 % besgs pairs loop\r\n   if nnz(idxvsegs==(bsegs(i,j)*bsegs(end)+bsegs(i,j+1)))\r\n    schk(i)=schk(i)+1;\r\n   end\r\n  end\r\n end\r\n schk(s(:)==5)=5; % overwrite real values with unknown setting\r\n if isequal(schk,s(:))\r\n  valid=1;\r\n else\r\n  valid=0;\r\n end\r\n\r\nassert(isequal(valid*pvalid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-11-12T19:13:03.000Z","updated_at":"2020-11-12T23:28:07.000Z","published_at":"2020-11-12T23:28:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to solve \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Slitherlink\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e pencil puzzles. An essential starter guide is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.conceptispuzzles.com/index.aspx?uri=puzzle/slitherlink/techniques\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink Techniques\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. An s matrix with values from 0:5 is provided. An s of 5 means this locations edges are not provided and may be from 0:3. The player will be given the s, c, and initial p matrices. The c matrix is clarified for the creation of the solution path of nodes as given in c.  The p matrix is a [numel,numel] matrix of c indices where p(x,y)=1 is a possible node connection. p(1,2)=1 as well as example's p(1,5)=1. Additional details of p are provided in the function template. Function template also includes visualization code.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis Slitherlink III: Evolve\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is for the cases where s is not solved using only the Gimmes from Slitherlink Starting Techniques but requires additional Evolving that is always valid for a valid input. Evolve examples are a Red bar into a corner must continue that Red bar out of the corner, an s=1 cell with a Red bar must have Black bars on its other 3 edges.  Cases of Trivial and Gimmes should be solved prior to invoking Evolve. The Evolve subroutine is the most critical routine and must be very comprehensive. A general Evolve routine should check if the output State is valid. When Evolve is used within a recursive routine that asserts possibly incorrect content the Evolve may produce an invalid output for the invalid input.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e s,  matrix of edge counts of the unique solution path; (c,p,bsegs,emap,pmap)  are provided but not required\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e sv, a vector of path nodes where sv(1)=sv(end). These nodes correspond to values in the c matrix example.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[%[1 5  9 13 17 % c matrix   [3 1 1 2; % s matrix  [1 2 6 7 8 12 16 20 19 18 17 13 9 5 1] % sv\\n% 2 6 10 14 18 %path nodes   2 1 0 1; %qty edges  % sv matrix is vector of nodes generating the\\n% 3 7 11 15 19 % corners     1 2 1 2] %adjacent   % Red Line path\\n% 4 8 12 16 20]                       %to path]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRelated Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"127\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"241\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSlitherlink I: Trivial, Slitherlink II: Gimmes, Slitherlink IV: Recursive (medium), Slitherlink V: Assert/Evolve/Check (large)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"pencil\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"pencil\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"pencil\"","","\"","pencil","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f77079ea1f8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f77079ea158\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f77079e9898\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f77079ea478\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f77079ea3d8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f77079ea338\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f77079ea298\u003e":"tag:\"pencil\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f77079ea298\u003e":"tag:\"pencil\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"pencil\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"pencil\"","","\"","pencil","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f77079ea1f8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f77079ea158\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f77079e9898\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f77079ea478\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f77079ea3d8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f77079ea338\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f77079ea298\u003e":"tag:\"pencil\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f77079ea298\u003e":"tag:\"pencil\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":47463,"difficulty_rating":"medium"},{"id":47453,"difficulty_rating":"medium-hard"},{"id":47478,"difficulty_rating":"hard"},{"id":47473,"difficulty_rating":"hard"},{"id":47468,"difficulty_rating":"hard"}]}}