{"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":1246,"title":"PACMAT 05 - Optimized Ghosts, PACMAT increasing speed, 12 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  PACMAT gets faster as a function of captures. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m PACMAT_Ghosts_005.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4 Alfonso Enhanced\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots\r\n\r\n*Scoring:* \r\n\r\n  score = F(Lives Remaining) + moves\r\n\r\n  F = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]  \r\n\r\n*Note:* Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\r\n\r\n\r\n*Future:* Asteroids\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  PACMAT gets faster as a function of captures.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m\"\u003ePACMAT_Ghosts_005.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4\"\u003eAlfonso Enhanced\u003c/a\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003escore = F(Lives Remaining) + moves\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eF = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]  \r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Asteroids\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% raz 314\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n     'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...        'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Expect \u003c 1000\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=12; % Lives\r\n  speed=[12 8 6 4 3 2 2 2 2 2 2 1]; % Faster as fewer lives remain\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n\r\n for pac2x=1:speed(lives) % G05 Mod\r\n  if ~(lives \u0026\u0026 any(mod(map(:),10)==1)),continue;end % Died or completed\r\n \r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\n\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2X Speed Loop\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n   gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n%\r\n\r\nassert(lives\u003e0,sprintf('Twelve Captures\\n')) % ) Lives allowed\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) \r\n\r\nscore_array=[ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0];\r\nscore=score_array(lives) + movepac;\r\n  \r\nfprintf('Moves %i\\n',movepac)\r\nfprintf('Lives Remaining %i\\n',lives)\r\nfprintf('Score %i\\n',score)\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T22:19:40.000Z","updated_at":"2026-03-30T18:42:31.000Z","published_at":"2013-02-03T23:04:48.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. PACMAT gets faster as a function of captures.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_005.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Enhanced\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\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[score = F(Lives Remaining) + moves\\n\\nF = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Asteroids\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1245,"title":"PACMAT 04 - Optimized Ghosts, Equal Speed, 10 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  This may be an unclearable level with equal speed for PACMAT and Ghosts. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m PACMAT_Ghosts_004.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4 Alfonso Enhanced\u003e (MP4) The ghosts spread and then converge to block all paths.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Max 114 remaining dots out of starting 244\r\n\r\n*Scoring:* Updated 2/06/13\r\n\r\n  if dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\r\n  else score= 2000 - 200 * Lives Remaining + moves\r\n\r\n*Hint:* Algorithm that finds optimum path to nearest dot will Pass\r\n\r\n*Theory:* Usage of non-adjacent Ghost locations needed for Total Success\r\n\r\n\r\n*Near Future:* Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  This may be an unclearable level with equal speed for PACMAT and Ghosts.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m\"\u003ePACMAT_Ghosts_004.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4\"\u003eAlfonso Enhanced\u003c/a\u003e (MP4) The ghosts spread and then converge to block all paths.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Max 114 remaining dots out of starting 244\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Updated 2/06/13\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eif dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\r\nelse score= 2000 - 200 * Lives Remaining + moves\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eHint:\u003c/b\u003e Algorithm that finds optimum path to nearest dot will Pass\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e Usage of non-adjacent Ghost locations needed for Total Success\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',9000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=10; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n   gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Remaining %i\\n',lives)\r\n%\r\n% Total dots 244\r\n% To Pass need to leave at most 114 dots\r\nassert(dots\u003c115,sprintf('Max Dots 114, Dots Remaining %i\\n',dots))\r\n\r\n%assert(lives\u003e0,sprintf('Three Captures\\n')) % ) Lives allowed\r\n%assert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) \r\n\r\nif dots\u003e0 % Give credit to staying alive\r\n %score=1000-floor(movepac/10)+20*dots;\r\n score=3000-floor(movepac/50)+50*dots;\r\nelse\r\n %score=1000-100*lives+movepac;\r\n score=2000-200*lives+movepac;\r\nend\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 9000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2013-02-06T20:15:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T19:18:09.000Z","updated_at":"2026-04-02T18:51:43.000Z","published_at":"2013-02-03T20:43:55.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. This may be an unclearable level with equal speed for PACMAT and Ghosts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_004.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Enhanced\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) The ghosts spread and then converge to block all paths.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Max 114 remaining dots out of starting 244\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Updated 2/06/13\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[if dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\\nelse score= 2000 - 200 * Lives Remaining + moves]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHint:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Algorithm that finds optimum path to nearest dot will Pass\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Usage of non-adjacent Ghost locations needed for Total Success\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":44850,"title":"X O X O","description":"On a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\r\n\r\nAssumptions/constraints:\r\n\r\n* All squares are populated.\r\n* \r\n* Number of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\r\n* \r\n* Minimum Grid size (n) = 1x1\r\n\r\nThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the\r\noptions for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition.\r\nThe maths is relatively simple, and is the solution to \"choose k from n\".\r\n\r\n19-Feb-19 -  Test suite updated to take into account solutions where the opposing player goes first.\r\n\r\n","description_html":"\u003cp\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/p\u003e\u003cp\u003eAssumptions/constraints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAll squares are populated.\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003eNumber of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003eMinimum Grid size (n) = 1x1\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the\r\noptions for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition.\r\nThe maths is relatively simple, and is the solution to \"choose k from n\".\u003c/p\u003e\u003cp\u003e19-Feb-19 -  Test suite updated to take into account solutions where the opposing player goes first.\u003c/p\u003e","function_template":"function y = xoxo(n)\r\n  y = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = 252;\r\nassert(isequal(xoxo(n),y_correct));\r\n%%\r\n% sneaky... With n=1 this is a single player game though the outcome is 2 as you can still choose 'x' or 'o' to play.\r\nn = 1; \r\ny_correct = 2;\r\nassert(isequal(xoxo(n),y_correct));","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":179218,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":40,"test_suite_updated_at":"2019-04-08T12:17:28.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-02-15T13:48:23.000Z","updated_at":"2026-03-04T22:02:57.000Z","published_at":"2019-02-15T13:54:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssumptions/constraints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAll squares are populated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNumber of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMinimum Grid size (n) = 1x1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the options for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition. The maths is relatively simple, and is the solution to \\\"choose k from n\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e19-Feb-19 - Test suite updated to take into account solutions where the opposing player goes first.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44851,"title":"X O X Oh!","description":"_This follows on from problem 44850 - X O X O_ \r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003e\r\n\r\nOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\r\n\r\nAssumptions/constraints:\r\n\r\n* All squares are populated.\r\n\r\n* Number of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\r\n\r\n* A solution with more than one \"win\" cannot be valid as the game would have finished before the board was full!","description_html":"\u003cp\u003e\u003ci\u003eThis follows on from problem 44850 - X O X O\u003c/i\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\"\u003ehttps://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003c/a\u003e\u003c/p\u003e\u003cp\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/p\u003e\u003cp\u003eAssumptions/constraints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAll squares are populated.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eNumber of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eA solution with more than one \"win\" cannot be valid as the game would have finished before the board was full!\u003c/li\u003e\u003c/ul\u003e","function_template":"function y = xoxo(n)\r\n  y = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = 63;\r\nassert(isequal(xoxo(n),y_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":158257,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2019-02-15T16:42:29.000Z","updated_at":"2024-11-05T01:44:13.000Z","published_at":"2019-02-15T16:42:29.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis follows on from problem 44850 - X O X O\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssumptions/constraints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAll squares are populated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNumber of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA solution with more than one \\\"win\\\" cannot be valid as the game would have finished before the board was full!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":60780,"title":"Play Hocus Focus","description":"The card game Hocus Focus starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \r\nWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\r\nYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, EmilyR and JessicaR, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\r\n\r\nImage adapted from ultraboardgames.com","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 624.8px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 312.4px; transform-origin: 407px 312.4px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe card game \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://boardgamegeek.com/boardgame/1199/hocus-focus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eHocus Focus\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/players/18927291\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eEmilyR\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/players/8608872\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eJessicaR\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 357.8px; 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 178.9px; text-align: left; transform-origin: 384px 178.9px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"427\" height=\"352\" style=\"vertical-align: baseline;width: 427px;height: 352px\" src=\"data:image/jpeg;base64,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rNfs7H1+5g/nX53fAjxVpfjfwLda14B8ZfEi/wBP+PPjW10zwf4Usfibfyy6bpVpaahfCee6u57iXS21CO1u7l1txHJ5X2WHYsqysOn/AOCeXxx+KH7QnjLRbrXvih4gt/CPgX4Z6J4m1G2sobC8fxJPdax4gjh+0XcluxdDY6bbmRofKeRjGwkQbw75mKyPtmX4f+FrfXrfSJLucancW8l3BZPq0nnywxtGryrHvyyI0sQZgCFMiA/eFWE+GqvDHbReItdhWEEhEkgYhSTgnMROOCAc9vWvjX/gnh4k8cfGD9pn4f8Ajjx/4obxJrWvfAu28UPajTrWzXQG12/t7hrKAwKpa3j+wKitLukYxOzSNlQnU/sXfsveC/i948uvjrqUK2PxOi+KvjRYNetBFDqGsafaX+q6HBplzKyGSayS2t4pktwwCSW8LjBVgxzSE4Re59TWvwojgLeZrWtXW7p5rQ/L9NsYqZfhbYj711fSf7zJ/wDE102MUVUa01szJ4Wk94nNxfC7T45o38y6by23AFlwT78VP4M8AWngg3jW813cSXsnmSPcMrMOuANqjgZrdoolWnJWkyoUYQ+FBjmiiiszUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo60UUANMe7uc+tQX2kWupmP7RBDMYSWjMkYfYSCpIyDjKkj6EjvVmigDzvVf2QvhPr3h280e/wDhj8Pr7SdSlinu7K48O2ctvdSRbzE8kbRlWZPMk2kgld7Y6nOx4H+BHgv4ZpcJ4d8J+HdChutPttJkisNOhtoms7YSC3ttiKB5MQmlCR42r5r4A3HPWUUAeU/s9/sS/DP9lfVLq88CeH7jRp7vSrTQz5urXl8sNhaSXElraRLcSyLDDE13PsjjCqocKBtVQuT8Nf2BvAvwr+ODeOtOn8UXF1b3eqahpelXusS3Gk6FdanL52oXFpbtxHJcSF2bJYL5soQIJGB9sooAKKKKACiiigAooooAKKKKAP/Z\" data-image-state=\"image-loaded\"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eImage adapted from \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.ultraboardgames.com/hocus-focus/game-rules.php\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eultraboardgames.com\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = HocusFocus(x,c)\r\n%  c = 5x12 matrix corresponding to the table cards\r\n%  x = 5x1 vector corresponding to the card drawn from the deck\r\n%  y = number from 1 to 12 indicating the card with nothing in common with the drawn card OR 'No cards work'\r\n  y = randi(12);\r\nend","test_suite":"%%\r\nc = [1 2 2 2 1 1 1 1 2 1 3 2\r\n     2 3 3 1 4 2 4 2 4 1 1 3\r\n     1 1 3 1 3 1 4 2 1 4 4 2\r\n     4 3 3 4 2 4 4 4 2 3 3 1\r\n     1 1 1 1 2 1 3 3 2 2 2 3];\r\nx = [2 1 4 2 1]';\r\ny = HocusFocus(x,c);\r\ny_correct = 8;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [1 2 2 2 1 1 1 1 2 1 3 2\r\n     2 3 3 1 4 2 4 2 4 1 1 3\r\n     1 1 3 1 3 1 4 2 1 4 4 2\r\n     4 3 3 4 4 4 4 4 2 3 3 1\r\n     1 1 1 1 2 1 3 3 2 2 2 3];\r\nx = [2 1 4 2 1]';\r\ny = HocusFocus(x,c);\r\ny_corrects = [5 8];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 2\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 1 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\ny_correct = 12;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 2\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 3 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\ny_corrects = [9 12];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 3\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 1 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,'No cards work'))\r\n\r\n%%\r\nc = [1 4 3 2 1 4 2 2 1 2 3 4\r\n     3 3 4 2 1 1 3 1 2 4 2 2\r\n     1 1 3 4 2 2 3 4 1 4 2 4\r\n     4 3 4 1 4 3 2 1 2 1 3 2\r\n     3 2 2 3 2 1 1 3 1 1 2 3];\r\nx = [2 2 1 3 1]';\r\ny = HocusFocus(x,c); \r\ny_corrects = [3 5];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 3 4 3 1 3 3 3 3 1 1\r\n     3 2 2 4 1 1 2 1 3 4 3 2\r\n     2 4 3 4 2 2 3 1 2 3 4 1\r\n     2 4 1 2 2 1 3 2 4 2 2 2\r\n     2 2 2 3 2 3 2 3 1 3 1 3];\r\nx = [3 1 2 1 3]';\r\ny = HocusFocus(x,c); \r\ny_correct = 11;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [4 1 1 4 1 1 3 4 3 3 4 1\r\n     2 3 2 2 1 2 1 1 3 3 1 3\r\n     4 2 2 4 3 3 4 2 3 3 3 2\r\n     3 4 2 2 2 1 2 1 2 3 1 2\r\n     2 3 2 2 2 3 3 1 2 2 2 3];\r\nx = [2 2 1 4 3]';\r\ny = HocusFocus(x,c); \r\ny_corrects = [5 8:11];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [randi(4,[4 12]); randi(3, [1 12])];\r\nx = randi(4,[5 1]);\r\nk = randi(5);\r\nx(k) = 1; c(k,:) = 1;\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,'No cards work'))\r\n\r\n%%\r\nc = ones(5,12);\r\nk = randi(12);\r\nc(:,k) = 3;\r\nx = ones(5,1);\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,k))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":46909,"edited_by":46909,"edited_at":"2024-12-28T05:15:50.000Z","deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-12-28T01:18:31.000Z","updated_at":"2025-03-05T08:09:06.000Z","published_at":"2024-12-28T01:24:28.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eThe card game \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://boardgamegeek.com/boardgame/1199/hocus-focus\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHocus Focus\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \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\u003eWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\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\u003eYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/players/18927291\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eEmilyR\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/players/8608872\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eJessicaR\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\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:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"352\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"427\\\"/\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\u003eImage adapted from \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.ultraboardgames.com/hocus-focus/game-rules.php\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eultraboardgames.com\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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.jpeg\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.jpeg\",\"contentType\":\"image/jpeg\",\"content\":\"data:image/jpeg;base64,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rNfs7H1+5g/nX53fAjxVpfjfwLda14B8ZfEi/wBP+PPjW10zwf4Usfibfyy6bpVpaahfCee6u57iXS21CO1u7l1txHJ5X2WHYsqysOn/AOCeXxx+KH7QnjLRbrXvih4gt/CPgX4Z6J4m1G2sobC8fxJPdax4gjh+0XcluxdDY6bbmRofKeRjGwkQbw75mKyPtmX4f+FrfXrfSJLucancW8l3BZPq0nnywxtGryrHvyyI0sQZgCFMiA/eFWE+GqvDHbReItdhWEEhEkgYhSTgnMROOCAc9vWvjX/gnh4k8cfGD9pn4f8Ajjx/4obxJrWvfAu28UPajTrWzXQG12/t7hrKAwKpa3j+wKitLukYxOzSNlQnU/sXfsveC/i948uvjrqUK2PxOi+KvjRYNetBFDqGsafaX+q6HBplzKyGSayS2t4pktwwCSW8LjBVgxzSE4Re59TWvwojgLeZrWtXW7p5rQ/L9NsYqZfhbYj711fSf7zJ/wDE102MUVUa01szJ4Wk94nNxfC7T45o38y6by23AFlwT78VP4M8AWngg3jW813cSXsnmSPcMrMOuANqjgZrdoolWnJWkyoUYQ+FBjmiiiszUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo60UUANMe7uc+tQX2kWupmP7RBDMYSWjMkYfYSCpIyDjKkj6EjvVmigDzvVf2QvhPr3h280e/wDhj8Pr7SdSlinu7K48O2ctvdSRbzE8kbRlWZPMk2kgld7Y6nOx4H+BHgv4ZpcJ4d8J+HdChutPttJkisNOhtoms7YSC3ttiKB5MQmlCR42r5r4A3HPWUUAeU/s9/sS/DP9lfVLq88CeH7jRp7vSrTQz5urXl8sNhaSXElraRLcSyLDDE13PsjjCqocKBtVQuT8Nf2BvAvwr+ODeOtOn8UXF1b3eqahpelXusS3Gk6FdanL52oXFpbtxHJcSF2bJYL5soQIJGB9sooAKKKKACiiigAooooAKKKKAP/Z\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53850,"title":"Backgammon #4 - Dice Probabilities","description":"Previous problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\r\nBackgammon is played with two standard six-sided dice.\r\nSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \r\nIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \r\n[3,6]\r\nYou have to return the probablility (between 0 and 1) of obtaining such a throw.\r\nSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\r\n[2,0], [0,2]\r\nAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\r\nIf the input is not a valid throw, such as:\r\n[0,0], [4,8], [-2,5]\r\nyou should return NaN.\r\nPrevious problem in series: Problem 53840. Backgammon #3 - Display a Board Position\r\nNext problem in series: Problem 53780. Backgammon #5 - Valid Move?\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 571.3px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 285.65px; transform-origin: 407px 285.65px; vertical-align: baseline; \"\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: 365.667px 7.75px; transform-origin: 365.667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\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: 175.05px 7.75px; transform-origin: 175.05px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBackgammon is played with two standard six-sided dice.\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: 361.742px 7.75px; transform-origin: 361.742px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 19.25px 8.25px; tab-size: 4; transform-origin: 19.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[3,6]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 243.642px 7.75px; transform-origin: 243.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou have to return the probablility (between 0 and 1) of obtaining such a throw.\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: 377.667px 7.75px; transform-origin: 377.667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 46.2px 8.25px; tab-size: 4; transform-origin: 46.2px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[2,0], [0,2]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 262.958px 7.75px; transform-origin: 262.958px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\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: 122.117px 7.75px; transform-origin: 122.117px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the input is not a valid throw, such as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 77px 8.25px; tab-size: 4; transform-origin: 77px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[0,0], [4,8], [-2,5]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 71.9667px 7.75px; transform-origin: 71.9667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eyou should return NaN.\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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53840\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53780\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53780. Backgammon #5 - Valid Move?\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 275.408px 7.75px; transform-origin: 275.408px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function prob = diceprob(throw)\r\n    prob=1;\r\nend","test_suite":"%%\r\nthrow=[6,6];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,48,50,55,55,55,55,55,55,55,55,55,55,55,55,56]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[3,4];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,48,53,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[5,0];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,51,48,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[0,1];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,51,48,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[0,0];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[7,5];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[4,8];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[3,-1];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\ns=fileread('diceprob.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2022-01-18T11:30:27.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2022-01-12T19:50:23.000Z","updated_at":"2026-03-05T10:54:58.000Z","published_at":"2022-01-13T15:07:27.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\u003ePrevious problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\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\u003eBackgammon is played with two standard six-sided dice.\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\u003eSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \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\u003eIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \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[[3,6]]]\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:t\u003eYou have to return the probablility (between 0 and 1) of obtaining such a throw.\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\u003eSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\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[[2,0], [0,2]]]\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:t\u003eAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\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\u003eIf the input is not a valid throw, such as:\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[[0,0], [4,8], [-2,5]]]\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:t\u003eyou should return NaN.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53840\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53780\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53780. Backgammon #5 - Valid Move?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1339,"title":"Travelling Salesman Problem (TSP)","description":"Find a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\r\nhttp://en.wikipedia.org/wiki/Travelling_salesman_problem\r\nHave fun!","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: 102px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 51px; transform-origin: 407px 51px; vertical-align: baseline; \"\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: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFind a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\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\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003ehttp://en.wikipedia.org/wiki/Travelling_salesman_problem\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 30.5px 8px; transform-origin: 30.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eHave fun!\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = TSP(x)\r\n  y = x;\r\nend","test_suite":"%% Test 1\r\nx = [8.2 -6.9 3.2 -9.5 15.5 0.3 -4.9 7.6 4.5 -7.1 6.5 -7.5 5.6 -0.5] + i*[-4.4 3.8 7.7 -8 -1.9 16.5 2.3 6.8 6.6 -1.6 -1.2 5.5 -9.3 8.9];\r\ntic;\r\ny = TSP(x);\r\nT1 = 1e4*toc;\r\nL1 = sum(abs(diff(y)));\r\n%S = calculateSize('tsp.m')\r\nassert(isequal(y,sort(x)))\r\n\r\n%% Test 2\r\nx = 10*sin(primes(200))+10i*cos(primes(200));\r\ntic;\r\ny = TSP(x);\r\nT2 = 1e6*toc;\r\nL2 = sum(abs(diff(y)));\r\nassert(isequal(y,sort(x)))\r\n\r\n%% Test 3\r\nx = [75.5 5.43 94.73 3.89 .37 42.38 -8.5 36.72 .54 .02 83.27 47];\r\ntic;\r\ny = TSP(x(randperm(12)));\r\nT3 = 1e5*toc;\r\nL3 = sum(abs(diff(y)));\r\nassert(isequal(y,sort(x)))\r\n\r\n%assignin('caller','score',round(S +T1+L1 +T2+L2 +T3+L3));","published":true,"deleted":false,"likes_count":3,"comments_count":10,"created_by":3105,"edited_by":223089,"edited_at":"2022-09-15T06:05:23.000Z","deleted_by":null,"deleted_at":null,"solvers_count":139,"test_suite_updated_at":"2022-09-15T06:05:24.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-10T18:58:10.000Z","updated_at":"2026-03-30T17:25:01.000Z","published_at":"2013-03-10T19:04:41.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eFind a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\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:hyperlink w:docLocation=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://en.wikipedia.org/wiki/Travelling_salesman_problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eHave fun!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44657,"title":"Kurosu checker","description":"The game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\r\n1. The game is played on a 6x6 board.\r\n2. Each row and each column must contain exactly 3 'X's and 3 'O's.\r\n3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\r\n4. Diagonals are of no importance.\r\nIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\r\nExample 1:\r\nb = [1 0 1 0 0 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\n\r\ntf = true;\r\nExample 2:\r\nb = [1 0 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 1 1 0 0 1\r\n     0 1 0 1 1 0\r\n     1 0 0 1 0 0\r\n     0 0 1 0 1 1];\r\n\r\ntf = false;","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: 620.933px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 310.467px; transform-origin: 407px 310.467px; vertical-align: baseline; \"\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: 383px 8px; transform-origin: 383px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\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: 121.5px 8px; transform-origin: 121.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1. The game is played on a 6x6 board.\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: 213px 8px; transform-origin: 213px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\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: 251px 8px; transform-origin: 251px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\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: 109px 8px; transform-origin: 109px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e4. Diagonals are of no importance.\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: 378.5px 8px; transform-origin: 378.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\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: 34.5px 8px; transform-origin: 34.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample 1:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.467px; 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 81.7333px; transform-origin: 404px 81.7333px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eb = [1 0 1 0 0 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 0 1 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1];\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 40px 8.5px; tab-size: 4; transform-origin: 40px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etf = true;\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 34.5px 8px; transform-origin: 34.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample 2:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.467px; 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 81.7333px; transform-origin: 404px 81.7333px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eb = [1 0 1 0 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 1 0 0 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 0 1 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 0 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1];\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 44px 8.5px; tab-size: 4; transform-origin: 44px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etf = false;\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = kurosuchecker(b)\r\n    tf = true;\r\nend","test_suite":"%%\r\nfiletext = fileread('kurosuchecker.m');\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'switch')))\r\n\r\n%%\r\nb = zeros(6);\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     0 1 0 1 0 1\r\n     1 0 1 0 1 0];\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 0 1 1 0 0\r\n     0 1 0 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 1 1 0 0 1\r\n     0 1 0 1 1 0\r\n     1 0 0 1 0 1\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(~b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 0 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 0 1 0 1\r\n     0 1 0 1 1 0\r\n     0 1 1 0 0 1\r\n     1 0 0 1 1 0\r\n     1 1 1 0 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     1 0 0 0 1 1\r\n     0 1 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 1 0 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 1 0 0 1 0\r\n     0 0 1 1 0 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1 0\r\n     1 1 0 0 1 0 0\r\n     0 0 1 1 0 1 0\r\n     0 1 0 1 1 0 0\r\n     1 0 1 0 0 1 0\r\n     0 1 0 1 1 0 0\r\n     0 0 0 0 0 0 0];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = gallery('circul',[1 1 0 0 1 0]);\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb=gallery('circul',[1 0 1 0 1 0]);\r\nassert(isequal(kurosuchecker(b),true))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":15521,"edited_by":223089,"edited_at":"2023-02-19T07:06:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":23,"test_suite_updated_at":"2023-02-19T07:06:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-29T11:37:42.000Z","updated_at":"2026-01-18T13:07:57.000Z","published_at":"2018-05-29T17:54:54.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\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\u003e1. The game is played on a 6x6 board.\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\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\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\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\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\u003e4. Diagonals are of no importance.\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\u003eIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\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\u003eExample 1:\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[b = [1 0 1 0 0 1\\n     1 1 0 1 0 0\\n     0 0 1 0 1 1\\n     0 1 0 1 1 0\\n     1 1 0 1 0 0\\n     0 0 1 0 1 1];\\n\\ntf = true;]]\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:t\u003eExample 2:\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[b = [1 0 1 0 1 0\\n     1 1 0 1 0 0\\n     0 1 1 0 0 1\\n     0 1 0 1 1 0\\n     1 0 0 1 0 0\\n     0 0 1 0 1 1];\\n\\ntf = false;]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":46072,"title":"Rock Paper Scissors Lizard Spock","description":"Can't decide what to watch on TV? How about settling the dispute with a good old fashioned round of Paper Scissors Lizard Spock ? Given your opponents choice and a strategy (\"win\", \"lose\", or \"tie\"), return a string representing the choice(s) that would yield that desired outcome.\r\n\r\nEx:\r\nrpsls(\"rock\",\"lose\")\r\nans = {\"Spock\", \"paper\"} %%you will lose if you choose either Spock or paper\r\nrpsls(\"paper\", \"tie\")\r\nans = \"paper\" %%you will tie if you select the same choice","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 598.55px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 299.275px; transform-origin: 407px 299.275px; vertical-align: baseline; \"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCan't decide what to watch on TV? How about settling the dispute with a good old fashioned round of\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://youtu.be/Kov2G0GouBw?t=37\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003ePaper Scissors Lizard Spock\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ? Given your opponents choice and a strategy (\"win\", \"lose\", or \"tie\"), return a string representing the choice(s) that would yield that desired outcome.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 404.8px; 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 202.4px; text-align: center; transform-origin: 384px 202.4px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"493\" height=\"399\" style=\"vertical-align: baseline;width: 493px;height: 399px\" src=\"data:image/JPEG;base64,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\" data-image-state=\"image-loaded\"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEx:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.75px; 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.875px; transform-origin: 404px 40.875px; 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.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erpsls(\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"rock\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"lose\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eans = {\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"Spock\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e, \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e} \u003c/span\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%%you will lose if you choose either Spock or paper\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erpsls(\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e, \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"tie\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eans = \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\" \u003c/span\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%%you will tie if you select the same choice\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = rpsls(choice,strategy)\r\ny = \"rock\";\r\nend","test_suite":"C = {'rock', 'paper', 'scissors', 'lizard', 'Spock'};\r\n[r,p,sc,l,sp] = C{:};\r\n%% Rock wins against lizard, scissors\r\nassert(isequal(rpsls(\"rock\",\"win\"), {l, sc})|| isequal(rpsls(\"rock\",\"win\"), {sc, l}))\r\n%% Rock loses against Spock, paper\r\nassert(isequal(rpsls(\"rock\",\"lose\"), {sp, p}) || isequal(rpsls(\"rock\",\"lose\"), {p, sp}))\r\n%% Rock ties with itself\r\nassert(isequal(rpsls(\"rock\",\"tie\"), r))\r\n%% Paper wins against Spock, rock\r\nassert(isequal(rpsls(\"paper\",\"win\"), {sp, r}) || isequal(rpsls(\"paper\",\"win\"), {r,sp}))\r\n%% Paper loses against scissors, lizard\r\nassert(isequal(rpsls(\"paper\",\"lose\"), {sc, l}) || isequal(rpsls(\"paper\",\"lose\"), {l, sc}))\r\n%% Paper ties with itself\r\nassert(isequal(rpsls(\"paper\",\"tie\"), p))\r\n%% Scissors wins against lizard, paper\r\nassert(isequal(rpsls(\"scissors\",\"win\"), {l, p}) || isequal(rpsls(\"scissors\",\"win\"), {p, l}))\r\n%% Scissors loses against rock, Spock\r\nassert(isequal(rpsls(\"scissors\",\"lose\"), {r, sp}) || isequal(rpsls(\"scissors\",\"lose\"), {sp, r}))\r\n%% Scissors ties with itself\r\nassert(isequal(rpsls(\"scissors\",\"tie\"), sc))\r\n%% Lizard wins against paper, Spock\r\nassert(isequal(rpsls(\"lizard\",\"win\"), {p, sp}) || isequal(rpsls(\"lizard\",\"win\"), {sp, p}))\r\n%% Lizard loses against scissors, rock\r\nassert(isequal(rpsls(\"lizard\",\"lose\"), {sc, r}) || isequal(rpsls(\"lizard\",\"lose\"), {r, sc}))\r\n%% Lizard ties with itself\r\nassert(isequal(rpsls(\"lizard\",\"tie\"), l))\r\n%% Spock wins against rock, scissors\r\nassert(isequal(rpsls(\"Spock\",\"win\"), {r, sc}) || isequal(rpsls(\"Spock\",\"win\"), {sc, r}))\r\n%% Spock loses against paper, lizard\r\nassert(isequal(rpsls(\"Spock\",\"lose\"), {p, l}) || isequal(rpsls(\"Spock\",\"lose\"), {l, p}))\r\n%% Spock ties with themself\r\nassert(isequal(rpsls(\"Spock\",\"tie\"), sp))","published":true,"deleted":false,"likes_count":7,"comments_count":6,"created_by":464375,"edited_by":485721,"edited_at":"2025-02-13T21:09:57.000Z","deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2020-08-04T21:26:16.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-07-29T17:23:06.000Z","updated_at":"2026-01-20T13:47:30.000Z","published_at":"2020-07-29T17:23:06.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eCan't decide what to watch on TV? How about settling the dispute with a good old fashioned round of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://youtu.be/Kov2G0GouBw?t=37\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePaper Scissors Lizard Spock\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e ? Given your opponents choice and a strategy (\\\"win\\\", \\\"lose\\\", or \\\"tie\\\"), return a string representing the choice(s) that would yield that desired outcome.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"399\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"493\\\"/\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\u003eEx:\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[rpsls(\\\"rock\\\",\\\"lose\\\")\\nans = {\\\"Spock\\\", \\\"paper\\\"} %%you will lose if you choose either Spock or paper\\nrpsls(\\\"paper\\\", \\\"tie\\\")\\nans = \\\"paper\\\" %%you will tie if you select the same choice]]\u003e\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.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;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":46006,"title":"Backgammon #2 - Your turn!","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\r\nWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \r\nThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\r\nBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\r\nPrevious problem in series: Problem 45967. Backgammon #1- Pip Count\r\nNext problem in series: Problem 53840. Backgammon #3 - Display a Board Position\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1690.73px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 314.1px 845.367px; transform-origin: 314.1px 845.367px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; 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: 125px 42px; text-align: left; transform-origin: 125px 42px; 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: 117.992px 8.33333px; transform-origin: 117.992px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 30.55px 8.33333px; transform-origin: 30.55px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 328.933px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 132px 164.467px; transform-origin: 132px 164.467px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 61.9667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 30.9833px; text-align: left; transform-origin: 104px 30.9833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 101.592px 8.33333px; transform-origin: 101.592px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 164.133px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 82.0667px; text-align: left; transform-origin: 104px 82.0667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 103.625px 8.33333px; transform-origin: 103.625px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 102.833px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 51.4167px; text-align: left; transform-origin: 104px 51.4167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 86.75px 8.33333px; transform-origin: 86.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 125px 21px; text-align: left; transform-origin: 125px 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: 119.258px 8.33333px; transform-origin: 119.258px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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: 311.1px 173.683px; transform-origin: 311.1px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 117.6px 8.33333px; tab-size: 4; transform-origin: 117.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 201.6px 8.33333px; tab-size: 4; transform-origin: 201.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 12.6px 8.33333px; transform-origin: 12.6px 8.33333px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 121.8px 8.33333px; tab-size: 4; transform-origin: 121.8px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 10.5px; text-align: left; transform-origin: 125px 10.5px; 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: 76.0333px 8.33333px; transform-origin: 76.0333px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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: 311.1px 10.2167px; transform-origin: 311.1px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 285.6px 8.33333px; tab-size: 4; transform-origin: 285.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 21px; text-align: left; transform-origin: 125px 21px; 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: 105.142px 8.33333px; transform-origin: 105.142px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\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: 125px 73.5px; text-align: left; transform-origin: 125px 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: 120.6px 8.33333px; transform-origin: 120.6px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\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: 125px 73.5px; text-align: left; transform-origin: 125px 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: 113.75px 8.33333px; transform-origin: 113.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 125px 52.5px; text-align: left; transform-origin: 125px 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: 104.225px 8.33333px; transform-origin: 104.225px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 125px 52.5px; text-align: left; transform-origin: 125px 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: 122.925px 8.33333px; transform-origin: 122.925px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\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: 125px 21px; text-align: left; transform-origin: 125px 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: 85.575px 8.33333px; transform-origin: 85.575px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967. Backgammon #1- Pip Count\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 73.0917px 8.33333px; transform-origin: 73.0917px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53840\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 121.417px 8.33333px; transform-origin: 121.417px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function BoardOut = flipboard(BoardIn)\r\n  BoardOut = 1;\r\nend","test_suite":"%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,0,12,-13];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[0,1,0,0,0,5,0,1,0,0,0,-1,2,-2,0,0,-1,0,-3,0,0,-1,0,0,1,0,5,-7];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10];\r\nBoardOut=flipboard(BoardIn);\r\nassert(isequal([1],isnan([BoardOut])));\r\n\r\n%%\r\nBoardIn=[-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10];\r\nBoardOut=flipboard(BoardIn);\r\nassert(isequal([1],isnan([BoardOut])));\r\n\r\n%%\r\ns=importdata('flipboard.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":437780,"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-06-30T08:23:48.000Z","updated_at":"2022-01-12T20:45:40.000Z","published_at":"2022-01-07T16:44:37.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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\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\u003eWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \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\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\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\u003eBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967. Backgammon #1- Pip Count\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53840\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1182,"title":"Hangman (easy)","description":"What is the best letter to start a \u003chttp://en.wikipedia.org/wiki/Hangman_(game) hangman\u003e game with?\r\n\r\nYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary. \r\n\r\nYou can assume that words will always be in all capital letters, and the cell array will always be a row.\r\n\r\n*Example:*\r\n\r\nwords={'AAA','BED','BEG','BAD'};\r\n\r\nYou should return letter='B';\r\n\r\nnote: Letter 'B' occurrs in _three_ different words. Letter 'A', while occurring four times (counting repetitions), only appears in _two_ different words. \r\n\r\n*Follow-up:* \r\n\r\nIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the _best_ 'simple' strategy in a hangman game, then the next problem in this series - \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy Hangman (strategy)\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games. ","description_html":"\u003cp\u003eWhat is the best letter to start a \u003ca href=\"http://en.wikipedia.org/wiki/Hangman_(game)\"\u003ehangman\u003c/a\u003e game with?\u003c/p\u003e\u003cp\u003eYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary.\u003c/p\u003e\u003cp\u003eYou can assume that words will always be in all capital letters, and the cell array will always be a row.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cp\u003ewords={'AAA','BED','BEG','BAD'};\u003c/p\u003e\u003cp\u003eYou should return letter='B';\u003c/p\u003e\u003cp\u003enote: Letter 'B' occurrs in \u003ci\u003ethree\u003c/i\u003e different words. Letter 'A', while occurring four times (counting repetitions), only appears in \u003ci\u003etwo\u003c/i\u003e different words.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFollow-up:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the \u003ci\u003ebest\u003c/i\u003e 'simple' strategy in a hangman game, then the next problem in this series - \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy\"\u003eHangman (strategy)\u003c/a\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games.\u003c/p\u003e","function_template":"function letter = hangman(words)\r\n  letter='S';\r\nend","test_suite":"%%\r\nwords={'AAA','BED','BEG','BAD'};\r\nassert(isequal(hangman(words),'B'));\r\n\r\n%%\r\nwords={'BUZZ','COZY','DOZE','FUZZ','GAZE','HAZE','JAZZ','LAZY','SIZE','ZERO','ZONE'};\r\nassert(isequal(hangman(words),'Z'));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[100,3])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[200,4])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[500,5])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":0,"created_by":43,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":52,"test_suite_updated_at":"2013-01-08T05:17:12.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-01-07T03:59:12.000Z","updated_at":"2025-12-15T20:07:42.000Z","published_at":"2013-01-07T04:03:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the best letter to start a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Hangman_(game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehangman\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e game with?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can assume that words will always be in all capital letters, and the cell array will always be a row.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewords={'AAA','BED','BEG','BAD'};\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou should return letter='B';\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003enote: Letter 'B' occurrs in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ethree\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e different words. Letter 'A', while occurring four times (counting repetitions), only appears in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etwo\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e different words.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFollow-up:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ebest\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 'simple' strategy in a hangman game, then the next problem in this series -\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHangman (strategy)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43652,"title":"\"Bubblegum, Bubblegum, in a dish; How many pieces do you wish?\"","description":"The child's game \"bubblegum, bubblegum, in a dish; how many pieces do you wish?\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \"leader\") says the words \"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\" bumping the fists of the players in order until landing on the final fist on \"wish.\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\r\n\r\nSee http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm for another explanation\r\n\r\nYou are the leader of \"bubblegum\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \"wishing\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \"bubblegum\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\r\n\r\nSo, for example, if there are 4 players, the first \"wisher\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\r\n\r\nGraphically: Start:\r\n\r\nP1R P1L P2R P2L P3R P3L P4R P4L\r\n\r\nP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u003e wishes \"3\"; P1L eliminated. Remaining fists:\r\n\r\nP1R P2R-W2 P2L P3R P3L P4R P4L -\u003e wishes \"5\"; P4L eliminated. Remaining fists:\r\n\r\nP1R P2R P2L-W3 P3R P3L P4R -\u003e wishes \"1\"; P3R eliminated. Remaining fists:\r\n\r\nP1R P2R P2L-W4 P3L P4R -\u003e wishes \"6\"; P3L eliminated. Remaining fists:\r\n\r\nP1R P2R-W5 P2L P4R -\u003e wishes \"3\"; P1R eliminated. Remaining fists:\r\n\r\nP2R P2L P4R-W6 -\u003e wishes \"2\"; P2L eliminated. Remaining fists:\r\n\r\nP2R P4R-W7 -\u003e wishes \"4\"; P4R eliminated (eliminates self). Remaining fists:\r\n\r\nP2R -\u003e Player 2 is the WINNER!\r\n\r\nReturn the number of the winning player.\r\n\r\nNote: since this is a child's game, a child can inadvertently eliminate himself.","description_html":"\u003cp\u003eThe child's game \"bubblegum, bubblegum, in a dish; how many pieces do you wish?\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \"leader\") says the words \"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\" bumping the fists of the players in order until landing on the final fist on \"wish.\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\u003c/p\u003e\u003cp\u003eSee \u003ca href = \"http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\"\u003ehttp://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\u003c/a\u003e for another explanation\u003c/p\u003e\u003cp\u003eYou are the leader of \"bubblegum\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \"wishing\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \"bubblegum\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\u003c/p\u003e\u003cp\u003eSo, for example, if there are 4 players, the first \"wisher\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\u003c/p\u003e\u003cp\u003eGraphically: Start:\u003c/p\u003e\u003cp\u003eP1R P1L P2R P2L P3R P3L P4R P4L\u003c/p\u003e\u003cp\u003eP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u0026gt; wishes \"3\"; P1L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R-W2 P2L P3R P3L P4R P4L -\u0026gt; wishes \"5\"; P4L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R P2L-W3 P3R P3L P4R -\u0026gt; wishes \"1\"; P3R eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R P2L-W4 P3L P4R -\u0026gt; wishes \"6\"; P3L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R-W5 P2L P4R -\u0026gt; wishes \"3\"; P1R eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP2R P2L P4R-W6 -\u0026gt; wishes \"2\"; P2L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP2R P4R-W7 -\u0026gt; wishes \"4\"; P4R eliminated (eliminates self). Remaining fists:\u003c/p\u003e\u003cp\u003eP2R -\u0026gt; Player 2 is the WINNER!\u003c/p\u003e\u003cp\u003eReturn the number of the winning player.\u003c/p\u003e\u003cp\u003eNote: since this is a child's game, a child can inadvertently eliminate himself.\u003c/p\u003e","function_template":"function winner = bbgwinner(wishes, players)\r\n  y = x;\r\nend","test_suite":"%%\r\nplayers=4;\r\nwishes=[3 5 1 6 3 2 4];\r\nwinner=2;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=4;\r\nwishes=[20 13 7 8 2 16 3];\r\nwinner=4;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=2\r\nwishes=[2 1];\r\nwinner=2;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=5;\r\nwishes=[20 13 7 8 2 16 3 1 2];\r\nwinner=4;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=5;\r\nwishes=[20 13 7 8 2 16 3 3];\r\nwinner=5;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=20;\r\nwishes=123.*[1:39];\r\nwinner=17\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=30;\r\nwishes=[1:59];\r\nwinner=18;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=30;\r\nwishes=[1:54 3 1 2 4];\r\nwinner=29;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":93456,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-11-12T00:03:52.000Z","updated_at":"2016-11-12T00:03:52.000Z","published_at":"2016-11-12T00:03:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe child's game \\\"bubblegum, bubblegum, in a dish; how many pieces do you wish?\\\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \\\"leader\\\") says the words \\\"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\\\" bumping the fists of the players in order until landing on the final fist on \\\"wish.\\\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSee\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for another explanation\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are the leader of \\\"bubblegum\\\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \\\"wishing\\\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \\\"bubblegum\\\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSo, for example, if there are 4 players, the first \\\"wisher\\\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGraphically: Start:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P1L P2R P2L P3R P3L P4R P4L\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u0026gt; wishes \\\"3\\\"; P1L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R-W2 P2L P3R P3L P4R P4L -\u0026gt; wishes \\\"5\\\"; P4L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R P2L-W3 P3R P3L P4R -\u0026gt; wishes \\\"1\\\"; P3R eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R P2L-W4 P3L P4R -\u0026gt; wishes \\\"6\\\"; P3L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R-W5 P2L P4R -\u0026gt; wishes \\\"3\\\"; P1R eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R P2L P4R-W6 -\u0026gt; wishes \\\"2\\\"; P2L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R P4R-W7 -\u0026gt; wishes \\\"4\\\"; P4R eliminated (eliminates self). Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R -\u0026gt; Player 2 is the WINNER!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the number of the winning player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNote: since this is a child's game, a child can inadvertently eliminate himself.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1481,"title":"Game of Nim","description":"\r\nThe Game of Nim is a famous studied 2 player strategy game. \r\n\u003chttp://en.wikipedia.org/wiki/Nim\u003e\r\n\r\nThere are 3 heaps, and you are given the number of pebbles in each heap.\r\nPlayer 1 and 2 take turns removing pebbles from each heap.  \r\nGame ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.  \r\n \r\nGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\r\n\r\nProblem 5)\r\nPrev: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1478 1478\u003e\r\nNext: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1482 1482\u003e","description_html":"\u003cp\u003eThe Game of Nim is a famous studied 2 player strategy game.  \u003ca href = \"http://en.wikipedia.org/wiki/Nim\"\u003ehttp://en.wikipedia.org/wiki/Nim\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThere are 3 heaps, and you are given the number of pebbles in each heap.\r\nPlayer 1 and 2 take turns removing pebbles from each heap.  \r\nGame ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.\u003c/p\u003e\u003cp\u003eGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\u003c/p\u003e\u003cp\u003eProblem 5)\r\nPrev: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1478\"\u003e1478\u003c/a\u003e\r\nNext: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1482\"\u003e1482\u003c/a\u003e\u003c/p\u003e","function_template":"function out = game_nim(hvect)\r\n  heapindex0;\r\n  removecount=0;\r\n  out = [heapindex removecount];\r\nend","test_suite":"%%\r\nx = [3 4 5];\r\ny_correct = [1 2];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [0 7 9];\r\ny_correct = [3 2];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [7 7 7 ];\r\ny_correct = [1 7];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [112 98 99];\r\ny_correct = [1 111];\r\nassert(isequal(game_nim(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":11275,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":38,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-04-30T23:50:29.000Z","updated_at":"2026-02-15T07:35:53.000Z","published_at":"2013-04-30T23:50:29.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Game of Nim is a famous studied 2 player strategy game. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Nim\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://en.wikipedia.org/wiki/Nim\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are 3 heaps, and you are given the number of pebbles in each heap. Player 1 and 2 take turns removing pebbles from each heap. Game ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 5) Prev:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1478\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1478\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e Next:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1482\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1482\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\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":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\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[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\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\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 Direction\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 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\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":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\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[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\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\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 Direction\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 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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\"}]}"},{"id":3690,"title":"OXO counting","description":"Count the number of occurrences of \"OXO\" in rows, columns, diagonals and anti-diagonals.\r\n\r\n\r\nExample:\r\n\r\n    \u003e\u003e board = ['OOX'\r\n                'XXO'\r\n                'OXO'];\r\n    \u003e\u003e count_OXO(board)\r\n    ans =\r\n       3\r\n    \u003e\u003e board = [' O '\r\n                'XXO'\r\n                'OXO'];\r\n    \u003e\u003e count_OXO(board)\r\n    ans =\r\n       1","description_html":"\u003cp\u003eCount the number of occurrences of \"OXO\" in rows, columns, diagonals and anti-diagonals.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre\u003e    \u0026gt;\u0026gt; board = ['OOX'\r\n                'XXO'\r\n                'OXO'];\r\n    \u0026gt;\u0026gt; count_OXO(board)\r\n    ans =\r\n       3\r\n    \u0026gt;\u0026gt; board = [' O '\r\n                'XXO'\r\n                'OXO'];\r\n    \u0026gt;\u0026gt; count_OXO(board)\r\n    ans =\r\n       1\u003c/pre\u003e","function_template":"function y = count_OXO(board)\r\n  y = ;\r\nend","test_suite":"%%\r\nboard = 'OXO';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = '';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = '   ';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ' X ';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'O O';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'O O OXO X';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOX';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXOX';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOX OX';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXXO';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXOOOOXXOXOX';\r\ny_correct = 2;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'OXO';'OXO'];\r\ny_correct = 4;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'OXO';'OOO'];\r\ny_correct = 4;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXX';'XXX';'XOO'];\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'X O';'OXO'];\r\ny_correct = 2;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['     ';'     ';'     ';'     '];\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['O OO';'O XO';'OOX '];\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXXOXO';' OXO X';'XOXOXO'];\r\ny_correct = 6;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXOXOXO';'OXOXO X';'XOOOXOX'];\r\ny_correct = 8;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OXO'.';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\n% Keep in mind that Test Suite may be extended, so try to write general solution.\r\n% If you find any bugs, please report it to me. Thanks!\r\n% Have fun.","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":14358,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":"2017-08-31T12:44:18.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2015-03-24T21:25:19.000Z","updated_at":"2026-01-04T13:01:10.000Z","published_at":"2017-08-31T09:25:21.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCount the number of occurrences of \\\"OXO\\\" in rows, columns, diagonals and anti-diagonals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\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[    \u003e\u003e board = ['OOX'\\n                'XXO'\\n                'OXO'];\\n    \u003e\u003e count_OXO(board)\\n    ans =\\n       3\\n    \u003e\u003e board = [' O '\\n                'XXO'\\n                'OXO'];\\n    \u003e\u003e count_OXO(board)\\n    ans =\\n       1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"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":54214,"title":"To Bet or Not to Bet","description":"Given your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. Since this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 126px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 63px; transform-origin: 407px 63px; vertical-align: baseline; \"\u003e\u003cdiv style=\"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 63px; text-align: left; transform-origin: 384px 63px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eSince this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = willLikelyWin(hand,upCardsOpp,totalCards)\r\n  tf=1;\r\nend","test_suite":"%%\r\nrng(1);\r\ncards=[repmat(1:13,1,4)',repelem(1:4,13)'];\r\nfor k=1:5\r\n    cards=cards(randperm(52),:);\r\nend\r\nt=[5 7];\r\ntotalCards=t(randi(2,1,100));\r\nfor k=1:100\r\n    if totalCards(k)==5\r\n        r=randperm(52,3);\r\n        hand{k}=cards(r(1:2),:);\r\n        upCardsOpp{k}=cards(r(3),:);\r\n    else\r\n        r=randperm(52,5);\r\n        hand{k}=cards(r(1:3),:);\r\n        upCardsOpp{k}=cards(r(4:5),:);\r\n    end\r\nend\r\nfor k=1:100\r\n    tf(k)=willLikelyWin(hand{k},upCardsOpp{k},totalCards(k));\r\nend\r\ntfg51=[ 1   0   1   0   1   1   0   0   1   1   1   0   0   1   0   0   0   1   0   0   0   0   0   1   0   1   0   0   1   1   0   1   0   0   0   0   1   0   1   0   1   0   1   0   1   0   0   0   1   1   1   1   1   1   0   1   0   1   0   1   0   0   0   0   0   0   1   1   1   1   1   1   0   1   0   0   0   1   1   0   1   1   0   0   0   1   0   0   1   1   0   1   1   0   0   0   0   0   1   0];\r\ntfl49=[ 0   1   0   0   0   0   1   1   0   0   0   1   1   0   1   1   1   0   1   1   1   0   0   0   1   0   1   1   0   0   1   0   1   1   0   1   0   1   0   1   0   1   0   1   0   1   0   1   0   0   0   0   0   0   1   0   1   0   1   0   1   1   1   1   1   1   0   0   0   0   0   0   1   0   1   1   1   0   0   1   0   0   1   1   1   0   1   1   0   0   1   0   0   1   1   1   1   1   0   1];\r\nassert(all(ismember(find(tfg51),find(tf))));\r\nassert(all(~ismember(find(tfl49),find(tf))));\r\n%%\r\nrng(1000);\r\ncards=[repmat(1:13,1,4)',repelem(1:4,13)'];\r\nfor k=1:5\r\n    cards=cards(randperm(52),:);\r\nend\r\nt=[5 7];\r\ntotalCards=t(randi(2,1,100));\r\nfor k=1:100\r\n    if totalCards(k)==5\r\n        r=randperm(52,3);\r\n        hand{k}=cards(r(1:2),:);\r\n        upCardsOpp{k}=cards(r(3),:);\r\n    else\r\n        r=randperm(52,5);\r\n        hand{k}=cards(r(1:3),:);\r\n        upCardsOpp{k}=cards(r(4:5),:);\r\n    end\r\nend\r\nfor k=1:100\r\n    tf(k)=willLikelyWin(hand{k},upCardsOpp{k},totalCards(k));\r\nend\r\ntfg51=[1   1   0   0   0   1   1   1   1   0   0   0   1   0   1   0   0   0   0   0   0   1   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   1   1   1   1   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   1   0   0   1   1   1   1   1   0   0   0   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   1   0   1];\r\ntfl49=[0   0   1   1   1   0   0   0   0   1   1   0   0   1   0   1   1   1   0   1   1   0   1   1   1   1   1   0   0   1   0   1   1   1   1   1   1   1   1   1   1   0   1   1   0   0   0   0   1   1   1   0   0   0   0   1   1   1   1   0   0   1   1   1   1   0   1   1   0   0   0   0   0   1   1   1   0   0   0   0   0   1   1   1   1   0   1   1   1   1   1   0   1   1   0   1   0   0   1   0];\r\nassert(all(ismember(find(tfg51),find(tf))));\r\nassert(all(~ismember(find(tfl49),find(tf))));\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2022-03-17T01:13:52.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-03-15T22:44:04.000Z","updated_at":"2025-12-16T01:19:56.000Z","published_at":"2022-03-16T21:52:54.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eGiven your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSince this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":54275,"title":"Get twenty-four","description":"Inpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \r\nYou need to return a format and a vector with the same four integers, such that you can print the expression.\r\nE.g., input                            x = [5 5 7 7]\r\n        you may return            f  = '(%d*%d)-(%d/%d)'\r\n                     and                 z = [5 5 7 7]\r\n      so  24 is obatined by     eval(sprintf(f,z)).\r\n     The answer is not necessary unique, e.g., other acceptable answers are\r\n                                            f  = '(%d*%d)-(%d*%d)'  \r\n                                            z =  [7 7 5 5]\r\n                   and                   f = '(%d-%d)*(%d+%d)'\r\n                                            z = [7 5 7 5]","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 363px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 181.5px; transform-origin: 407px 181.5px; vertical-align: baseline; \"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eInpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou need to return a format and a vector with the same four integers, such that you can print the expression.\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eE.g., input                            x = [5 5 7 7]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        you may return            f  = '(%d*%d)-(%d/%d)'\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                     and                 z = [5 5 7 7]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e      so  24 is obatined by     eval(sprintf(f,z)).\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e     The answer is not necessary unique, e.g., other acceptable answers are\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            f  = '(%d*%d)-(%d*%d)'  \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            z =  [7 7 5 5]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                   and                   f = '(%d-%d)*(%d+%d)'\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            z = [7 5 7 5]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [f,z] = get24(x)\r\n  z = 23;\r\n  f = '(%d%d+%s%s)'\r\nend","test_suite":"%%\r\nx = [1 2 3 4];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [6 9 9 10];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e=9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [4 4 10 10];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [3 3 7 7];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [1 4 5 6];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":2197980,"edited_by":2197980,"edited_at":"2024-08-29T05:32:43.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2024-08-29T05:32:43.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-04-13T12:52:09.000Z","updated_at":"2024-08-29T05:32:43.000Z","published_at":"2022-04-13T12:52:22.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eInpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \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\u003eYou need to return a format and a vector with the same four integers, such that you can print the expression.\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\u003eE.g., input                            x = [5 5 7 7]\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\u003e        you may return            f  = '(%d*%d)-(%d/%d)'\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\u003e                     and                 z = [5 5 7 7]\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\u003e      so  24 is obatined by     eval(sprintf(f,z)).\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\u003e     The answer is not necessary unique, e.g., other acceptable answers are\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\u003e                                            f  = '(%d*%d)-(%d*%d)'  \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\u003e                                            z =  [7 7 5 5]\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\u003e                   and                   f = '(%d-%d)*(%d+%d)'\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\u003e                                            z = [7 5 7 5]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1231,"title":"PACMAT Easy","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026d=1 PACMAT_Easy.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\nAn example video of the first Player \u003chttps://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026d=1 PACMAT_Easy_Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\nAlfonso Nieto-Castanon's 298 \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026d=1 PACMAT Video\u003e\r\n\r\nAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots\r\n\r\n\r\n*Near Future:* Ghosts will move with various algorithms.\r\n\r\n*Far Future:* Asteroids and Space Invaders","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003eAn example video of the first Player \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy_Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003eAlfonso Nieto-Castanon's 298 \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT Video\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will move with various algorithms.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFar Future:\u003c/b\u003e Asteroids and Space Invaders\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n lives=1; % Lives\r\n  movepac=0;\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003c5000 \u0026\u0026 ~isempty(find(map(:)==2))\r\n   while ~isempty(find(map(:)==2)) \u0026\u0026 movepac\u003c5000\r\n     movepac=movepac+1;\r\n\r\n if isempty(find(map==1,1)),break;end % \r\n [curdir]=pacmat(map);\r\n  if curdir==0,continue;end\r\n\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n     % Do nothing - Ran into a Wall\r\n    elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n      map(ptrpac)=0; % remove PAC from the board\r\n      lives=0;\r\n      break; % Lose\r\n    else % legal move\r\n      map(ptrpac)=0; % Eat Dot and clear PAC\r\n      ptrpac=ptrpac+mapdelta(curdir);\r\n      if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n      if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n      map(ptrpac)=2;\r\n    end\r\n  end % PAC Move while\r\n  if isempty(find(map==1,1)),break;end % \r\n   if lives==0,break;end\r\n   lives=lives-1;\r\n end % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0)\r\nassert(isempty(find(map==1)))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,movepac )) );","published":true,"deleted":false,"likes_count":4,"comments_count":4,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":19,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-01-30T04:55:54.000Z","updated_at":"2026-02-07T15:46:18.000Z","published_at":"2013-01-30T05:48:03.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAn example video of the first Player\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy_Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Nieto-Castanon's 298\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will move with various algorithms.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFar Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Asteroids and Space Invaders\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":44658,"title":"Kurosu solver","description":"This problem is related to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker Problem 44657\u003e.\r\n\r\nThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\r\n\r\n1. The game is played on a 6x6 board.\r\n\r\n2. Each row and each column must contain exactly 3 'X's and 3 'O's.\r\n\r\n3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\r\n\r\n4. Diagonals are of no importance.\r\n\r\nIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\r\n\r\nExample:\r\n\r\n  b0 = [-1 -1 -1  0 -1 -1\r\n        -1 -1 -1  0  0 -1\r\n        -1 -1 -1 -1 -1 -1\r\n        -1 -1  0 -1 -1  1\r\n        -1 -1 -1 -1  1  1\r\n        -1 -1  1 -1 -1 -1];\r\n\r\n  b1 = [ 1  1  0  0  1  0\r\n         0  1  1  0  0  1\r\n         1  0  0  1  1  0\r\n         0  1  0  1  0  1\r\n         0  0  1  0  1  1\r\n         1  0  1  1  0  0];","description_html":"\u003cp\u003eThis problem is related to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker\"\u003eProblem 44657\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\u003c/p\u003e\u003cp\u003e1. The game is played on a 6x6 board.\u003c/p\u003e\u003cp\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\u003c/p\u003e\u003cp\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\u003c/p\u003e\u003cp\u003e4. Diagonals are of no importance.\u003c/p\u003e\u003cp\u003eIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eb0 = [-1 -1 -1  0 -1 -1\r\n      -1 -1 -1  0  0 -1\r\n      -1 -1 -1 -1 -1 -1\r\n      -1 -1  0 -1 -1  1\r\n      -1 -1 -1 -1  1  1\r\n      -1 -1  1 -1 -1 -1];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eb1 = [ 1  1  0  0  1  0\r\n       0  1  1  0  0  1\r\n       1  0  0  1  1  0\r\n       0  1  0  1  0  1\r\n       0  0  1  0  1  1\r\n       1  0  1  1  0  0];\r\n\u003c/pre\u003e","function_template":"function b1 = kurosusolver(b0)\r\n    b1 = [];\r\nend","test_suite":"%%\r\nfiletext = fileread('kurosusolver.m');\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'switch')))\r\n\r\n%%\r\nb0 = zeros(6);\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [-1 -1 -1  0 -1 -1\r\n      -1 -1 -1  0  0 -1\r\n      -1 -1 -1 -1 -1 -1\r\n      -1 -1  0 -1 -1  1\r\n      -1 -1 -1 -1  1  1\r\n      -1 -1  1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [ 1 -1 -1  1  1 -1\r\n      -1 -1 -1 -1 -1  1\r\n      -1 -1  1 -1 -1 -1\r\n       1 -1 -1 -1 -1  1\r\n       1 -1 -1 -1  1 -1\r\n      -1  0 -1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [-1 -1  0 -1  0  0\r\n      -1 -1 -1  1 -1  1\r\n       0 -1 -1 -1 -1 -1\r\n      -1 -1 -1 -1 -1  1\r\n       0 -1 -1  1 -1 -1\r\n      -1 -1 -1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [1 0 0 1 1 0\r\n      0 0 1 0 1 1\r\n      1 1 0 1 0 0\r\n      0 1 1 0 0 1\r\n      1 0 1 0 1 0\r\n      0 1 0 1 0 1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [1 0 0 1 1 0\r\n      0 0 1 0 1 1\r\n      1 1 0 1 0 0\r\n      0 1 1 0 0 1\r\n      0 0 1 1 1 0\r\n      1 1 0 0 0 1];\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [0 1 0 1 1 0\r\n      1 0 1 0 0 1\r\n      1 1 0 1 0 0\r\n      0 0 1 1 0 1\r\n      1 0 1 0 1 0\r\n      0 1 0 0 1 1];\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [1  0  0  1  1  0\r\n      0  0  1  0  1  1\r\n      1  1  0  1  0  0\r\n      0 -1  1  0  0  1\r\n      1  0  1  0  1  0\r\n      0  1  0  1  0  1];\r\nb1 = kurosusolver(b0);\r\nb2 = zeros(6);\r\nb2(4,2) = 2;\r\nassert(isequal(b1,b0+b2))","published":true,"deleted":false,"likes_count":4,"comments_count":7,"created_by":15521,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":"2018-08-23T13:27:30.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-29T12:09:47.000Z","updated_at":"2019-01-18T11:50:58.000Z","published_at":"2018-05-29T17:56:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44657\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1. The game is played on a 6x6 board.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e4. Diagonals are of no importance.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\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[b0 = [-1 -1 -1  0 -1 -1\\n      -1 -1 -1  0  0 -1\\n      -1 -1 -1 -1 -1 -1\\n      -1 -1  0 -1 -1  1\\n      -1 -1 -1 -1  1  1\\n      -1 -1  1 -1 -1 -1];\\n\\nb1 = [ 1  1  0  0  1  0\\n       0  1  1  0  0  1\\n       1  0  0  1  1  0\\n       0  1  0  1  0  1\\n       0  0  1  0  1  1\\n       1  0  1  1  0  0];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2026,"title":"Skyscrapers - Puzzle","description":"The Skyscraper puzzle challenge comes from \u003chttp://logicmastersindia.com/home/ Logic Masters India\u003e and \u003chttp://www.conceptispuzzles.com/ Games' Concept is Puzzles\u003e. \r\n\r\nCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\r\n\r\n*Input:* [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\r\n\r\n*Output:* M  an NxN matrix\r\n\r\n*Example:*\r\n\r\n  vr=[0 0 3 0 0]';\r\n  vL=[3 0 0 1 0]';\r\n  vd=[0 0 0 0 0];\r\n  vu=[5 2 0 0 0];\r\n\r\n  M\r\n         5     4     2     1     3\r\n         4     5     1     3     2\r\n         3     2     4     5     1\r\n         2     1     3     4     5\r\n         1     3     5     2     4\r\n\r\n*Algorithm Discussion:*\r\n\r\n  1) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\r\n  2) Calc Skyscraper count from Left and Right\r\n  3) Determine subset of SkyVectors possible for each Row and Column\r\n  4) Sort the Qty of 2*N possible solutions\r\n  5) Recursion from least to most valid SkyVectors\r\n  6) In recursion verify valid overlay or return\r\n","description_html":"\u003cp\u003eThe Skyscraper puzzle challenge comes from \u003ca href = \"http://logicmastersindia.com/home/\"\u003eLogic Masters India\u003c/a\u003e and \u003ca href = \"http://www.conceptispuzzles.com/\"\u003eGames' Concept is Puzzles\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e M  an NxN matrix\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003evr=[0 0 3 0 0]';\r\nvL=[3 0 0 1 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[5 2 0 0 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eM\r\n       5     4     2     1     3\r\n       4     5     1     3     2\r\n       3     2     4     5     1\r\n       2     1     3     4     5\r\n       1     3     5     2     4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eAlgorithm Discussion:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\r\n2) Calc Skyscraper count from Left and Right\r\n3) Determine subset of SkyVectors possible for each Row and Column\r\n4) Sort the Qty of 2*N possible solutions\r\n5) Recursion from least to most valid SkyVectors\r\n6) In recursion verify valid overlay or return\r\n\u003c/pre\u003e","function_template":"function m=solve_skyscrapers(vr,vL,vd,vu)\r\n m=[];\r\nend","test_suite":"%%\r\n%Games Feb 2014 #1\r\nvr=[0 0 1 0 5]'; %1\r\nvL=[0 4 4 0 0]';\r\nvd=[2 2 0 1 3];\r\nvu=[3 0 0 2 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd; % view down check\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view Left check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m); % view Up check\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #2\r\nvr=[0 4 0 2 0]'; %2\r\nvL=[5 1 0 0 0]';\r\nvd=[0 0 3 0 0];\r\nvu=[4 1 2 0 2];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #3\r\nvr=[5 2 2 0 0]'; %3\r\nvL=[0 3 0 3 4]';\r\nvd=[5 0 0 0 0];\r\nvu=[0 2 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #4\r\nvr=[0 0 4 5 0]'; %4\r\nvL=[0 0 0 0 0]';\r\nvd=[2 0 2 3 0];\r\nvu=[0 0 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #5\r\nvr=[3 5 0 0 0]'; %5\r\nvL=[0 0 4 0 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[2 0 1 0 2];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\n\r\n%%\r\nvr=[0 0 3 0 0]'; %Games Feb 2014 #6\r\nvL=[3 0 0 1 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[5 2 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-29T19:42:36.000Z","updated_at":"2026-01-08T14:21:06.000Z","published_at":"2013-11-29T22:09:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Skyscraper puzzle challenge comes from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://logicmastersindia.com/home/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLogic Masters India\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames' Concept is Puzzles\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 M an NxN matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[vr=[0 0 3 0 0]';\\nvL=[3 0 0 1 0]';\\nvd=[0 0 0 0 0];\\nvu=[5 2 0 0 0];\\n\\nM\\n       5     4     2     1     3\\n       4     5     1     3     2\\n       3     2     4     5     1\\n       2     1     3     4     5\\n       1     3     5     2     4]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Discussion:\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) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\\n2) Calc Skyscraper count from Left and Right\\n3) Determine subset of SkyVectors possible for each Row and Column\\n4) Sort the Qty of 2*N possible solutions\\n5) Recursion from least to most valid SkyVectors\\n6) In recursion verify valid overlay or return]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":45967,"title":"Backgammon #1 - Pip Count","description":"The following is a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\r\nThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\r\nBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\r\nNext problem in series: Problem 46006. Backgammon #2 - Your turn!\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1546.73px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 314.1px 773.367px; transform-origin: 314.1px 773.367px; vertical-align: baseline; \"\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: 125px 21px; text-align: left; transform-origin: 125px 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: 84.3083px 8.33333px; transform-origin: 84.3083px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe following is a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 328.933px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 132px 164.467px; transform-origin: 132px 164.467px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 61.9667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 30.9833px; text-align: left; transform-origin: 104px 30.9833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 101.592px 8.33333px; transform-origin: 101.592px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 164.133px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 82.0667px; text-align: left; transform-origin: 104px 82.0667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 103.625px 8.33333px; transform-origin: 103.625px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 102.833px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 51.4167px; text-align: left; transform-origin: 104px 51.4167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 86.75px 8.33333px; transform-origin: 86.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 125px 21px; text-align: left; transform-origin: 125px 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: 119.258px 8.33333px; transform-origin: 119.258px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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: 311.1px 173.683px; transform-origin: 311.1px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 117.6px 8.33333px; tab-size: 4; transform-origin: 117.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 201.6px 8.33333px; tab-size: 4; transform-origin: 201.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 12.6px 8.33333px; transform-origin: 12.6px 8.33333px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 121.8px 8.33333px; tab-size: 4; transform-origin: 121.8px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 10.5px; text-align: left; transform-origin: 125px 10.5px; 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: 76.0333px 8.33333px; transform-origin: 76.0333px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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: 311.1px 10.2167px; transform-origin: 311.1px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 285.6px 8.33333px; tab-size: 4; transform-origin: 285.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 21px; text-align: left; transform-origin: 125px 21px; 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: 105.142px 8.33333px; transform-origin: 105.142px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 168px; 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: 125px 84px; text-align: left; transform-origin: 125px 84px; 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: 125px 8.33333px; transform-origin: 125px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 189px; 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: 125px 94.5px; text-align: left; transform-origin: 125px 94.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: 104.225px 8.33333px; transform-origin: 104.225px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 126px; 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: 125px 63px; text-align: left; transform-origin: 125px 63px; 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: 107.425px 8.33333px; transform-origin: 107.425px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\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: 125px 21px; text-align: left; transform-origin: 125px 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: 73.0917px 8.33333px; transform-origin: 73.0917px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/46006\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 121.417px 8.33333px; transform-origin: 121.417px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [WhitePip, RedPip, RelativePip]=pipcount(Board)\r\n  y = x;\r\nend","test_suite":"%%\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\ncorrect=[167,167,0];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\n\r\ncorrect=[12,10,2];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\ncorrect=[64,91,-27];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\nassert(isequal([1 1 1],isnan([w,r,wpc])));\r\n\r\n%%\r\nBoard=[-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\nassert(isequal([1 1 1],isnan([w,r,wpc])));\r\n\r\n%%\r\ns=importdata('pipcount.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":437780,"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-06-20T10:13:41.000Z","updated_at":"2022-01-12T20:06:05.000Z","published_at":"2021-04-17T13:26:03.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\u003eThe following is a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\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\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\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\u003eBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/46006\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1698,"title":"Connect Four: find winning move","description":"Inspired by \u003chttp://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker this problem\u003e...\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Connect_Four Connect Four\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\r\n\r\n*Problem Statement*\r\n\r\nGiven an array (size is arbitrary) in which\r\n\r\n* 0 : space is empty\r\n* 1 : player 1 piece\r\n* 2 : player 2 piece\r\n\r\nreturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\r\n\r\n*Assumptions*\r\n\r\n* Pieces fall to the bottommost available row in each column, as in the real game\r\n* The input grid will always represent a valid game state\r\n\r\n*Example*\r\n\r\nIf\r\n\r\n  b = [0 0 0 0 0 0 0;\r\n       0 0 0 0 0 0 0;\r\n       0 0 0 2 0 0 0;\r\n       0 0 0 1 0 0 0;\r\n       0 0 0 2 2 0 0;\r\n       0 0 2 1 1 1 0];\r\n\r\nthen\r\n\r\n  y = 7\r\n","description_html":"\u003cp\u003eInspired by \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker\"\u003ethis problem\u003c/a\u003e...\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Connect_Four\"\u003eConnect Four\u003c/a\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/p\u003e\u003cp\u003e\u003cb\u003eProblem Statement\u003c/b\u003e\u003c/p\u003e\u003cp\u003eGiven an array (size is arbitrary) in which\u003c/p\u003e\u003cul\u003e\u003cli\u003e0 : space is empty\u003c/li\u003e\u003cli\u003e1 : player 1 piece\u003c/li\u003e\u003cli\u003e2 : player 2 piece\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/p\u003e\u003cp\u003e\u003cb\u003eAssumptions\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003ePieces fall to the bottommost available row in each column, as in the real game\u003c/li\u003e\u003cli\u003eThe input grid will always represent a valid game state\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\n\u003c/pre\u003e\u003cp\u003ethen\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ey = 7\r\n\u003c/pre\u003e","function_template":"function y = c4win(b)\r\n  y = [];\r\nend","test_suite":"%%\r\nb = zeros(6,7);\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 0 0;\r\n     2 1 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 1 0 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = 5;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     2 0 0 1 1 1 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [3 5 6];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [2 2 1 2 1 2 1;\r\n     1 2 2 1 2 2 2;\r\n     2 1 1 2 2 1 1;\r\n     1 2 1 1 1 2 1;\r\n     2 2 1 2 2 1 1;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     2 1 0 0 0 0 0;\r\n     2 2 1 1 0 0 0;\r\n     1 2 2 1 0 0 0];\r\ny_correct = 1;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 1 2 0 0 2 0;\r\n     0 1 1 0 1 2 0;\r\n     0 1 2 1 2 2 0];\r\ny_correct = [2 4];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 2 2 0 0 0;\r\n     0 0 0 2 1 1 0 0 0;\r\n     0 0 2 1 2 2 0 0 0;\r\n     0 0 1 2 1 1 0 0 0;\r\n     1 0 1 1 2 2 0 0 0;\r\n     2 2 1 2 1 1 0 0 0];\r\ny_correct = 2;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0 2 0;\r\n     0 0 0 0 0 2 2 1 1;\r\n     0 0 0 0 0 2 1 2 2;\r\n     0 0 0 0 0 1 2 1 1;\r\n     0 0 0 1 0 1 1 2 2;\r\n     0 0 0 2 2 1 2 1 1];\r\ny_correct = [5 9];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 2;\r\n     0 0 0 1 0 1;\r\n     0 0 0 1 0 2;\r\n     0 1 0 1 0 1;\r\n     0 2 1 2 0 2;\r\n     1 2 2 2 0 1;\r\n     2 2 1 1 0 2];\r\ny_correct = [4];\r\nassert(isequal(c4win(b),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":29,"test_suite_updated_at":"2013-07-07T23:16:13.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-07-07T21:57:33.000Z","updated_at":"2025-06-13T11:30:13.000Z","published_at":"2013-07-07T23:16:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInspired by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ethis problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Connect_Four\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eConnect Four\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eProblem Statement\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an array (size is arbitrary) in which\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e0 : space is empty\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1 : player 1 piece\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2 : player 2 piece\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAssumptions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePieces fall to the bottommost available row in each column, as in the real game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe input grid will always represent a valid game state\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf\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[b = [0 0 0 0 0 0 0;\\n     0 0 0 0 0 0 0;\\n     0 0 0 2 0 0 0;\\n     0 0 0 1 0 0 0;\\n     0 0 0 2 2 0 0;\\n     0 0 2 1 1 1 0];]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen\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[y = 7]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1982,"title":"Battleship - Seaman Level","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Future:* The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.","description_html":"\u003cp\u003e\u003ca href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003eGames Magazine Battleships\u003c/a\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/p\u003e\u003cp\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\u003c/p\u003e\u003cp\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/p\u003e\u003cp\u003eShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/p\u003e\u003cp\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e b; A binary 12x12 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003em              b\r\n000000000000  000000000000\r\n077757777770  000011000000\r\n077777777770  000000000000\r\n077777777770  000100010000\r\n077777777770  000100010000\r\n077777777770  010000010000\r\n077777777770  010000010010\r\n027777777760  010000000010\r\n077777777770  000101000010\r\n077777777770  000000000000\r\n077777477770  010001100100\r\n000000000000  000000000000\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.\u003c/p\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n% Games August 2013 1-Seaman\r\nr=[0 2 2 3 1 1 1 1 2 2 5 0]';\r\nc=[0 1 0 1 1 2 6 0 5 0 4 0];\r\nm(2,2)=1;\r\nm(2,6)=1;\r\nm(4,9)=3;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 1-Seaman \r\n r=[0 1 1 1 1 2 3 3 3 1 4 0]';\r\n c=[0 3 2 0 1 6 0 3 1 4 0 0];\r\n m(2,3)=1;\r\n m(8,5)=1;\r\n m(7,8)=6;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 1-Seaman\r\n r=[0 1 1 2 4 1 0 2 2 5 2 0]';\r\n c=[0 1 1 1 1 4 0 7 0 2 3 0];\r\n m(2,8)=0;\r\n m(8,3)=1;\r\n m(9,6)=0;\r\n m(5,11)=6;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n\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":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-12T05:17:43.000Z","updated_at":"2013-11-12T06:14:18.000Z","published_at":"2013-11-12T06:14:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 b; A binary 12x12 array\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2004,"title":"BattleShip - Petty Officer (Level 2)","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to solve.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Algorithm:* \r\n\r\n  1) Initialize processing array based upon input matrix.\r\n  2) Implement a cycling check of driven array changes\r\n  3) Quick Test of Change every single Unknown serially\r\n  4) Evolve and check if complete solution created","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: 795.667px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 397.833px; transform-origin: 407px 397.833px; vertical-align: baseline; \"\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\u003ca target='_blank' href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eGames Magazine Battleships\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: 291.35px 7.91667px; transform-origin: 291.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\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: 360.45px 7.91667px; transform-origin: 360.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to solve.\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: 382.1px 7.91667px; transform-origin: 382.1px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\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: 382.267px 7.91667px; transform-origin: 382.267px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\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: 165.183px 7.91667px; transform-origin: 165.183px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe map is ringed by zeros to make m a 12x12 array.\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: 220.5px 7.91667px; transform-origin: 220.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\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: 74.3px 7.91667px; transform-origin: 74.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e b; A binary 12x12 array\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\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 326.933px; 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 163.467px; transform-origin: 404px 163.467px; 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: 111.65px 7.91667px; transform-origin: 111.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ec=[0 4 0 3 1 3 1 4 0 1 3 0];\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 57.75px 7.91667px; transform-origin: 57.75px 7.91667px; \"\u003em              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 7.91667px; \"\u003eb\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e000000000000  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077757777770  000011000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000100010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000100010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  010000010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  010000010010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e027777777760  010000000010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000101000010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777477770  010001100100\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e000000000000  000000000000\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 35.3833px 7.91667px; transform-origin: 35.3833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm:\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: 211.75px 7.91667px; transform-origin: 211.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; \"\u003e1) Initialize \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 157.85px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 157.85px 7.91667px; \"\u003eprocessing array based upon input matrix.\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: 200.2px 7.91667px; transform-origin: 200.2px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; \"\u003e2) Implement \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 150.15px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 150.15px 7.91667px; \"\u003ea cycling check of driven array changes\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: 204.05px 7.91667px; transform-origin: 204.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 34.65px 7.91667px; transform-origin: 34.65px 7.91667px; \"\u003e3) Quick \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 169.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 169.4px 7.91667px; \"\u003eTest of Change every single Unknown serially\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: 184.8px 7.91667px; transform-origin: 184.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 38.5px 7.91667px; transform-origin: 38.5px 7.91667px; \"\u003e4) Evolve \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 146.3px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 146.3px 7.91667px; \"\u003eand check if complete solution created\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"%%\r\nglobal valid\r\nfiletext = fileread('solve_battleship.m');\r\nvalid=isempty(strfind(filetext, '(exist(fullfile(cd'));\r\nassert(valid,'overwrite assert forbidden')\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n% Games August 2013 2-Petty Officer %\r\nr=[0 0 1 4 1 3 3 3 3 2 0 0]';\r\nc=[0 2 3 2 0 5 0 4 0 2 2 0];\r\nm(5,4)=3;\r\nm(6,11)=3;\r\nm(9,8)=0;\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 2-Petty %\r\nr=[0 2 2 2 3 2 0 0 7 0 2 0]';\r\nc=[0 2 5 1 4 1 4 0 2 1 0 0];\r\nm(3,3)=3;\r\nm(5,7)=1;\r\nm(9,4)=0;\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 2-Petty\r\nr=[0 5 1 4 1 0 5 1 2 1 0 0]';\r\nc=[0 2 3 3 2 0 5 0 3 1 1 0];\r\nm(9,2)=1;\r\nm(2,7)=0;\r\nm(3,9)=1;\r\n\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\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":4,"test_suite_updated_at":"2020-10-01T19:08:44.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2013-11-17T22:45:53.000Z","updated_at":"2025-12-10T03:22:09.000Z","published_at":"2013-11-17T23:06:51.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:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\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\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to 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:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\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\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\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\u003eThe map is ringed by zeros to make m a 12x12 array.\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\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 b; A binary 12x12 array\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003eAlgorithm:\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) Initialize processing array based upon input matrix.\\n2) Implement a cycling check of driven array changes\\n3) Quick Test of Change every single Unknown serially\\n4) Evolve and check if complete solution created]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2005,"title":"BattleShip - Seaman (1) thru Admiral(6) :  CPU Time Scoring(msec)","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThis Challenge is to complete three full sets of Battleship in minimal time.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Scoring:* Total Time (msec)\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Algorithm:* \r\n\r\n  1) Initialize processing array based upon input matrix.\r\n  2) Implement a cycling check of driven array changes\r\n  3) Quick Test of Change every single Unknown serially\r\n  4) Evolve and check if complete solution created\r\n  5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs","description_html":"\u003cp\u003e\u003ca href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003eGames Magazine Battleships\u003c/a\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/p\u003e\u003cp\u003eThis Challenge is to complete three full sets of Battleship in minimal time.\u003c/p\u003e\u003cp\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/p\u003e\u003cp\u003eShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/p\u003e\u003cp\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e b; A binary 12x12 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total Time (msec)\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003em              b\r\n000000000000  000000000000\r\n077757777770  000011000000\r\n077777777770  000000000000\r\n077777777770  000100010000\r\n077777777770  000100010000\r\n077777777770  010000010000\r\n077777777770  010000010010\r\n027777777760  010000000010\r\n077777777770  000101000010\r\n077777777770  000000000000\r\n077777477770  010001100100\r\n000000000000  000000000000\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eAlgorithm:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Initialize processing array based upon input matrix.\r\n2) Implement a cycling check of driven array changes\r\n3) Quick Test of Change every single Unknown serially\r\n4) Evolve and check if complete solution created\r\n5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs\r\n\u003c/pre\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"assignin('caller','score',2000);\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 1-Seaman\r\nr=[0 2 2 3 1 1 1 1 2 2 5 0]';\r\nc=[0 1 0 1 1 2 6 0 5 0 4 0];\r\nm(2,2)=1;\r\nm(2,6)=1;\r\nm(4,9)=3;\r\n\r\n%tz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\n%tt=tz+cputime-time0\r\ntt=cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 2-Petty Officer\r\nr=[0 0 1 4 1 3 3 3 3 2 0 0]';\r\nc=[0 2 3 2 0 5 0 4 0 2 2 0];\r\nm(5,4)=3;\r\nm(6,11)=3;\r\nm(9,8)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 3-Ensign\r\nr=[0 3 0 4 1 0 0 1 2 1 8 0]';\r\nc=[0 5 1 1 3 1 1 1 1 3 3 0];\r\nm(4,7)=1;\r\nm(4,11)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 4-Captain\r\nr=[0 1 2 2 2 2 5 0 5 0 1 0]';\r\nc=[0 5 0 0 0 2 1 4 2 1 5 0];\r\nm(4,8)=0;\r\nm(7,10)=4;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 5-Commodore\r\nr=[0 1 1 5 0 3 1 3 2 1 3 0]';\r\nc=[0 2 2 1 0 2 1 6 0 5 1 0];\r\nm(6,4)=1;\r\nm(6,8)=0;\r\nm(7,10)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 6-Admiral\r\nr=[0 5 1 4 2 3 1 1 0 3 0 0]';\r\nc=[0 4 0 1 2 4 2 1 1 5 0 0];\r\nm(5,2)=1;\r\nm(10,7)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 1-Seaman\r\nr=[0 1 1 1 1 2 3 3 3 1 4 0]';\r\nc=[0 3 2 0 1 6 0 3 1 4 0 0];\r\nm(2,3)=1;\r\nm(8,5)=1;\r\nm(7,8)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 2-Petty\r\nr=[0 2 2 2 3 2 0 0 7 0 2 0]';\r\nc=[0 2 5 1 4 1 4 0 2 1 0 0];\r\nm(3,3)=3;\r\nm(5,7)=1;\r\nm(9,4)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 3-Ensign\r\nr=[0 3 0 0 2 4 3 2 1 4 1 0]';\r\nc=[0 2 2 5 2 3 0 3 0 2 1 0];\r\nm(7,2)=1;\r\nm(7,4)=3;\r\nm(9,8)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 4-Captain\r\nr=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\nm(8,2)=2;\r\nm(2,5)=5;\r\nm(11,7)=4;\r\nm(8,11)=6;\r\n\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 5-Commodore\r\nr=[0 3 2 3 1 1 1 3 3 2 1 0]';\r\nc=[0 1 2 4 1 4 1 1 0 5 1 0];\r\nm(2,10)=5;\r\nm(8,4)=6;\r\nm(8,6)=5;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 6-Admiral\r\nr=[0 5 1 0 3 0 1 5 2 3 0 0]';\r\nc=[0 0 4 2 5 2 1 2 1 1 2 0];\r\nm(2,10)=0;\r\nm(8,7)=0;\r\nm(10,5)=1;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 1-Seaman\r\nr=[0 1 1 2 4 1 0 2 2 5 2 0]';\r\nc=[0 1 1 1 1 4 0 7 0 2 3 0];\r\nm(2,8)=0;\r\nm(8,3)=1;\r\nm(9,6)=0;\r\nm(5,11)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 2-Petty\r\nr=[0 5 1 4 1 0 5 1 2 1 0 0]';\r\nc=[0 2 3 3 2 0 5 0 3 1 1 0];\r\nm(9,2)=1;\r\nm(2,7)=0;\r\nm(3,9)=1;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 3-Ensign\r\nr=[0 3 0 2 3 1 1 2 2 2 4 0]';\r\nc=[0 1 1 0 6 1 4 0 3 1 3 0];\r\nm(4,3)=0;\r\nm(5,6)=4;\r\nm(7,9)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 4-Captain\r\nr=[0 0 6 0 2 2 4 1 3 2 0 0]';\r\nc=[0 3 1 3 1 2 2 2 2 0 4 0];\r\nm(5,2)=0;\r\nm(9,4)=0;\r\nm(3,5)=4;\r\nm(6,11)=2;\r\nm(8,11)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 5-Commodore %\r\nr=[0 5 2 1 1 7 1 2 0 0 1 0]';\r\nc=[0 2 3 1 2 1 3 1 2 0 5 0];\r\nm(8,2)=1;\r\nm(5,11)=2;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 6-Admiral % Solved with with Bship HV .10 \r\n% solved recur .023\r\nr=[0 0 2 4 1 4 1 0 2 0 6 0]';\r\nc=[0 3 1 3 1 3 2 1 2 1 3 0];\r\nm(3,2)=0;\r\nm(4,5)=4;\r\nm(9,9)=5;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\ntt\r\nassignin('caller','score',min(2000,floor(1000*tt)));","published":true,"deleted":false,"likes_count":1,"comments_count":0,"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":"2013-11-17T23:26:01.000Z","updated_at":"2013-11-18T00:27:11.000Z","published_at":"2013-11-18T00:27:11.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to complete three full sets of Battleship in minimal time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 b; A binary 12x12 array\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total Time (msec)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm:\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) Initialize processing array based upon input matrix.\\n2) Implement a cycling check of driven array changes\\n3) Quick Test of Change every single Unknown serially\\n4) Evolve and check if complete solution created\\n5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":54010,"title":"Evaluate Poker Hand","description":"Given an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\r\nExample:\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[rank,kickers]=evalHand(hand)\r\n\r\nrank =\r\n\r\n     1\r\n\r\n\r\nkickers =\r\n\r\n    13","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 411.25px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 205.625px; transform-origin: 407px 205.625px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 126px; 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 63px; text-align: left; transform-origin: 384px 63px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 245.25px; 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 122.625px; transform-origin: 404px 122.625px; 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.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand.Properties.VariableNames={\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); \"\u003e'value'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); \"\u003e'suit'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e};\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[rank,kickers]=evalHand(hand)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erank =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ekickers =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    13\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [rank,kickers]=evalHand(hand)\r\nrank=1;\r\nkickers=13;\r\nend","test_suite":"%%\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,1));\r\nassert(isequal(k,13));\r\n%%\r\nhand=table([10    11     9     7     6     8    13]',[3     1     4     3     2     2     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,5));\r\nassert(isequal(k,11));\r\n%%\r\nhand=table([10     5     8    10     2     7     1]',[1     4     4     3     4     4     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,4));\r\nassert(isequal(k,[8     7     5     2     1]));\r\n%%\r\nhand=table([5     4     5     8     7    13     8]',[1     4     4     4     2     2     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,7));\r\nassert(isequal(k,[8     5    13]));\r\n%%\r\nhand=table([10     1     3     2    13     5    11]',[3     1     1     4     2     4     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,9));\r\nassert(isequal(k,[13    11    10     5     3]));\r\n%%\r\nhand=table([10    13     2     1     3    13     8]',[4     3     1     2     1     2     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,8));\r\nassert(isequal(k,[13    10     8     3]));\r\n%%\r\nhand=table([12     2     5     6     5     5     9    12     3    10     6    10     7]',[3     1     1     2     4     3     3     2     4     3     1     4     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,3));\r\nassert(isequal(k,[5    12]));\r\n%%\r\nhand=table([9     9     9     5     9]',[1     2     3     3     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,2));\r\nassert(isequal(k,[9     5]));\r\n%%\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2022-02-17T03:41:12.000Z","updated_at":"2022-02-17T03:46:12.000Z","published_at":"2022-02-17T03:41:12.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\u003eGiven an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\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\u003eExample:\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[hand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\\nhand.Properties.VariableNames={'value','suit'};\\n[rank,kickers]=evalHand(hand)\\n\\nrank =\\n\\n     1\\n\\n\\nkickers =\\n\\n    13]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53780,"title":"Backgammon #5 - Valid Move?","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\r\nThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified standard notation. \r\nFor the purpose of this exercise, the move is expressed simply as 'starting_point/destination_point' using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\r\n'6/3' '24/18' '13/9' 'bar/22' and '6/off'\r\nYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\r\nWhite does not have a stone on the starting_point\r\nRed has more than one stone on the destination_point\r\nWhite has a stone on the bar and the move is not moving that stone off the bar\r\nWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\r\nThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\r\nFor this problem, you can assume that the board input vector represents a legal backgammon board position. \r\nPrevious problem in series: Problem 53850. Backgammon #4 - Dice Probabilities\r\nNext problem in series: Coming soon!\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1157.07px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 578.533px; transform-origin: 407px 578.533px; vertical-align: baseline; \"\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: 140.433px 7.75px; transform-origin: 140.433px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 182.825px 7.75px; transform-origin: 182.825px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 124.1px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 62.05px; transform-origin: 391px 62.05px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 296.8px 7.75px; transform-origin: 296.8px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.8px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 30.9px; text-align: left; transform-origin: 363px 30.9px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 354.1px 7.75px; transform-origin: 354.1px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 41.3667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.6833px; text-align: left; transform-origin: 363px 20.6833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 362.108px 7.75px; transform-origin: 362.108px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 159.642px 7.75px; transform-origin: 159.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 107.8px 8.25px; tab-size: 4; transform-origin: 107.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 184.8px 8.25px; tab-size: 4; transform-origin: 184.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 11.55px 8.25px; transform-origin: 11.55px 8.25px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 111.65px 8.25px; tab-size: 4; transform-origin: 111.65px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 77.0167px 7.75px; transform-origin: 77.0167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 261.8px 8.25px; tab-size: 4; transform-origin: 261.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 159.083px 7.75px; transform-origin: 159.083px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\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: 379.267px 7.75px; transform-origin: 379.267px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://thegammonpress.com/backgammon-notation/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003estandard notation\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: 2.4px 7.75px; transform-origin: 2.4px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \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: 206.308px 7.75px; transform-origin: 206.308px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor the purpose of this exercise, the move is expressed simply as '\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: 98.2083px 7.75px; transform-origin: 98.2083px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estarting_point/destination_point'\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: 78.575px 7.75px; transform-origin: 78.575px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 157.85px 8.25px; tab-size: 4; transform-origin: 157.85px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 115.5px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 115.5px 8.25px; \"\u003e'6/3' '24/18' '13/9' 'bar/22' \u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003eand \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 26.95px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 26.95px 8.25px; \"\u003e'6/off'\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 361.9px 7.75px; transform-origin: 361.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 83.7333px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 41.8667px; transform-origin: 391px 41.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 112.017px 7.75px; transform-origin: 112.017px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite does not have a stone on the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 42.0167px 7.75px; transform-origin: 42.0167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estarting_point\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 115.525px 7.75px; transform-origin: 115.525px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eRed has more than one stone on the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 52.9167px 7.75px; transform-origin: 52.9167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003edestination_point\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 242.958px 7.75px; transform-origin: 242.958px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite has a stone on the bar and the move is not moving that stone off the bar\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 299.142px 7.75px; transform-origin: 299.142px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 347.492px 7.75px; transform-origin: 347.492px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\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: 339.967px 7.75px; transform-origin: 339.967px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor this problem, you can assume that the board input vector represents a legal backgammon board position. \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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53850\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \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: 43.1833px 7.75px; transform-origin: 43.1833px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eComing soon!\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: 275.408px 7.75px; transform-origin: 275.408px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function valid = validmove(Board, move)\r\n  valid=true;\r\nend","test_suite":"%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='24/23';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='bar/22';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='15/11';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='bar/22';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='bar/18';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='13/7';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nmove='6/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,12,-12];\r\nmove='6/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,12,-12];\r\nmove='9/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='13/12';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='8/11';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='off/5';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='13/bar';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='24/30';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='54/48';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='5/0';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='4/-1';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='13/13';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\ns=fileread('validmove.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2022-01-18T16:51:09.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-01-07T17:10:38.000Z","updated_at":"2022-01-18T16:51:09.000Z","published_at":"2022-01-18T11:22:56.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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\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\u003eThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://thegammonpress.com/backgammon-notation/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003estandard notation\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor the purpose of this exercise, the move is expressed simply as '\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estarting_point/destination_point'\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\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['6/3' '24/18' '13/9' 'bar/22' and '6/off']]\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:t\u003eYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite does not have a stone on the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estarting_point\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRed has more than one stone on the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edestination_point\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite has a stone on the bar and the move is not moving that stone off the bar\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\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\u003eThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\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\u003eFor this problem, you can assume that the board input vector represents a legal backgammon board position. \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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53850\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eComing soon!\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53840,"title":"Backgammon #3 - Display a Board Position","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nPlease look at Problem 45967 to understand how the board is represented as a 28-element vector.\r\nFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with fprintf to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\r\nSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\r\nNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\r\nSome example inputs and outputs are:\r\nStarting board:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+  O           X    BB  X              O +  +\r\n+  O           X    BB  X              O +  +\r\n+  O           X    BB  X                +  +\r\n+  O                BB  X                +  +\r\n+  O                BB  X                +  +\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   +  +\r\n+  X                BB  O                +  +\r\n+  X                BB  O                +  +\r\n+  X           O    BB  O                +  +\r\n+  X           O    BB  O              X +  +\r\n+  X           O    BB  O              X +  +\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nBoard with stones on bar and home:\r\nBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+  O           X    BX  X           X    + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   + 7+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB  O                + O+\r\n+  X  O             BB  O                + O+\r\n+  X  O        O    BB  O        O       + O+\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nBoard with most stones borne off:\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+                   BB  X           X    + X+\r\n+                   BB              X    + X+\r\n+                   BB                   + X+\r\n+                   BB                   + X+\r\n+                   BB                   + X+\r\n+                   BB                   +12+\r\n+===================BB===================+==+\r\n+                   BB                   +13+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB  O                + O+\r\n+                   BB  O                + O+\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \r\nNote that the test suite will compare your chartacter array against the correct array, but will also fprintf your array so that you can check visually that it looks correct.\r\nPrevious problem in series: Problem 46006. Backgammon #2 - Your turn!\r\nNext problem in series: Problem 53850. Backgammon #4 - Dice Probabilities\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.","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: 2497.87px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 1248.93px; transform-origin: 407px 1248.93px; vertical-align: baseline; \"\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: 140.433px 7.75px; transform-origin: 140.433px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 182.825px 7.75px; transform-origin: 182.825px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 124.1px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 62.05px; transform-origin: 391px 62.05px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 296.8px 7.75px; transform-origin: 296.8px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.8px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 30.9px; text-align: left; transform-origin: 363px 30.9px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 354.1px 7.75px; transform-origin: 354.1px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 41.3667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.6833px; text-align: left; transform-origin: 363px 20.6833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 362.108px 7.75px; transform-origin: 362.108px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 45.9px 7.75px; transform-origin: 45.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease look at \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 211.992px 7.75px; transform-origin: 211.992px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to understand how the board is represented as a 28-element vector.\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: 377.258px 7.75px; transform-origin: 377.258px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; 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: 378.45px 7.75px; transform-origin: 378.45px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with \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: 17.5px 7.75px; transform-origin: 17.5px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efprintf\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: 309.642px 7.75px; transform-origin: 309.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\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: 373.017px 7.75px; transform-origin: 373.017px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; 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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\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: 119.808px 7.75px; transform-origin: 119.808px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSome example inputs and outputs are:\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: 45.9px 7.75px; transform-origin: 45.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eStarting board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 261.8px 8.25px; tab-size: 4; transform-origin: 261.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 112.417px 7.75px; transform-origin: 112.417px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eBoard with stones on bar and home:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 269.5px 8.25px; tab-size: 4; transform-origin: 269.5px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 42.35px 8.25px; transform-origin: 42.35px 8.25px; \"\u003e           \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + 7+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X  O             \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 57.75px 8.25px; transform-origin: 57.75px 8.25px; \"\u003e+  X  O        \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 30.8px 8.25px; transform-origin: 30.8px 8.25px; \"\u003e        \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 26.95px 8.25px; transform-origin: 26.95px 8.25px; \"\u003e       \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 104.233px 7.75px; transform-origin: 104.233px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eBoard with most stones borne off:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 273.35px 8.25px; tab-size: 4; transform-origin: 273.35px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 138.6px 8.25px; transform-origin: 138.6px 8.25px; \"\u003e+                   BB  X           \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB              X    + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +12+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +13+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 375.725px 7.75px; transform-origin: 375.725px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \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: 296.25px 7.75px; transform-origin: 296.25px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote that the test suite will compare your chartacter array against the correct array, but will also \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: 17.5px 7.75px; transform-origin: 17.5px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efprintf\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: 70.25px 7.75px; transform-origin: 70.25px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e your array so that you can check visually that it looks correct.\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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/46006\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53850\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; 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: 372.025px 7.75px; transform-origin: 372.025px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function bstring = displayboard(Board)\r\n    %String to display an empty board\r\n    bstring=strcat(...\r\n        '                  Red (X)                    \\n',...\r\n        '+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+===================BB===================+==+\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n        '                  White (O)                  \\n');\r\n    %Add your code here...\r\nend","test_suite":"%%\r\nBoardIn=zeros(1,28);\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nBoardString=displayboard(BoardIn);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+  O           X    BB  X              O +  +\\n',...\r\n'+  O           X    BB  X              O +  +\\n',...\r\n'+  O           X    BB  X                +  +\\n',...\r\n'+  O                BB  X                +  +\\n',...\r\n'+  O                BB  X                +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+  X                BB  O                +  +\\n',...\r\n'+  X                BB  O                +  +\\n',...\r\n'+  X           O    BB  O                +  +\\n',...\r\n'+  X           O    BB  O              X +  +\\n',...\r\n'+  X           O    BB  O              X +  +\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nfprintf(correct)\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+                   BB  X           X    + X+\\n',...\r\n'+                   BB              X    + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   +12+\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +13+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+  O           X    BX  X           X    + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   + 7+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+  X  O             BB  O                + O+\\n',...\r\n'+  X  O        O    BB  O        O       + O+\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%% Anti-cheating code temporarily removed as some solutions fail for the importdata() function\r\n%Alternative anti-cheating tests may be added later, if cheat solutions are submitted\r\ns=fileread('displayboard.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2022-01-18T11:35:29.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2022-01-11T13:45:31.000Z","updated_at":"2022-01-18T11:35:29.000Z","published_at":"2022-01-11T14:33: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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003ePlease look at \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to understand how the board is represented as a 28-element vector.\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\u003eFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:t\u003eThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efprintf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\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\u003eSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\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\u003eNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\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\u003eSome example inputs and outputs are:\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eStarting board:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+  O           X    BB  X              O +  +\\n+  O           X    BB  X              O +  +\\n+  O           X    BB  X                +  +\\n+  O                BB  X                +  +\\n+  O                BB  X                +  +\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   +  +\\n+  X                BB  O                +  +\\n+  X                BB  O                +  +\\n+  X           O    BB  O                +  +\\n+  X           O    BB  O              X +  +\\n+  X           O    BB  O              X +  +\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBoard with stones on bar and home:\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[Board=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+  O           X    BX  X           X    + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   + 7+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB  O                + O+\\n+  X  O             BB  O                + O+\\n+  X  O        O    BB  O        O       + O+\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBoard with most stones borne off:\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[BoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+                   BB  X           X    + X+\\n+                   BB              X    + X+\\n+                   BB                   + X+\\n+                   BB                   + X+\\n+                   BB                   + X+\\n+                   BB                   +12+\\n+===================BB===================+==+\\n+                   BB                   +13+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB  O                + O+\\n+                   BB  O                + O+\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:t\u003eTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \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\u003eNote that the test suite will compare your chartacter array against the correct array, but will also \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efprintf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e your array so that you can check visually that it looks correct.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/46006\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53850\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":892,"title":"Solve Rubik's Cube - Up to Two Face Moves","description":"A standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice.  The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 54\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\r\n\r\n  Output: mov (A row vector of one or two of values {1:18})\r\n   mov: is a vector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order. \r\n* Minimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\r\n* \r\nVerifications will be by executing your move vector against the provided rubik and checking number of moves.\r\n\r\nThe function rubik_rot(mov,r) is available for usage\r\n\r\n\r\nThis is the next incremental solution step: Move optimization.\r\n\r\nAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e ","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: 1062.82px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 447.983px 531.417px; transform-origin: 447.983px 531.417px; vertical-align: baseline; \"\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: 340.283px 7.91667px; transform-origin: 340.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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: 316.733px 7.91667px; transform-origin: 316.733px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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: 352.917px 7.91667px; transform-origin: 352.917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 134.917px; 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 67.4667px; text-align: center; transform-origin: 384px 67.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 246.917px; 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 123.467px; text-align: center; transform-origin: 384px 123.467px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 113.917px; 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 56.9667px; text-align: center; transform-origin: 384px 56.9667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; 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: 444.983px 71.5167px; transform-origin: 444.983px 71.5167px; 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: 444.983px 10.2167px; transform-origin: 444.983px 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: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eInput: (rubik)\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; \"\u003erubik: row vector \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 38.5px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 38.5px 7.91667px; \"\u003eof size 54\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 323.4px 7.91667px; transform-origin: 323.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 219.45px 7.91667px; transform-origin: 219.45px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eOutput: mov (A row vector of one or two of values {1:18})\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 419.65px 7.91667px; transform-origin: 419.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 42.35px 7.91667px; transform-origin: 42.35px 7.91667px; \"\u003e mov: is a \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 377.3px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 377.3px 7.91667px; \"\u003evector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cul style=\"block-size: 102.167px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 51.0833px; transform-origin: 391px 51.0833px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 29.1833px 7.91667px; transform-origin: 29.1833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.4333px; text-align: left; transform-origin: 363px 20.4333px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 361.283px 7.91667px; transform-origin: 361.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 281.6px 7.91667px; transform-origin: 281.6px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMinimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 339.217px 7.91667px; transform-origin: 339.217px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eVerifications will be by executing your move vector against the provided rubik and checking number of moves.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 157.033px 7.91667px; transform-origin: 157.033px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function rubik_rot(mov,r) is available for usage\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: 188.65px 7.91667px; transform-origin: 188.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the next incremental solution step: Move optimization.\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: 367.617px 7.91667px; transform-origin: 367.617px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 40.8667px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 20.4333px; transform-origin: 391px 20.4333px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://kociemba.org/cube.htm\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCube Theory: 20-moves Any Cube\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mov_vec = rubik_solve(r)\r\n% Single/Dual Rubik's Cube Move Solving Challenge\r\n% Available function to check/determine solution : rubik_rot(mov,r)\r\n% out=rubik_rot(mov,r) returns a moved cube array of size 54\r\n% Solved Cube vector\r\n%[00000000111111111222222222333333333444444444555555555]; % with spaces\r\n\r\n  mov_vec=[1 2]; % mov is a single or two value row vector {1-18}\r\nend","test_suite":"%%\r\n% Load function rubik_rot.m\r\ntic\r\nfname='https://sites.google.com/site/razapor/matlab_cody/rubik_rot.m?attredirects=0\u0026d=1';\r\nurlwrite(fname,'rubik_rot.m');\r\n%urlwrite('http://tinyurl.com/matlab-rubik-rot','rubik_rot.m') ; %dead tinyurl\r\nrehash path\r\ntoc\r\n\r\n\r\n%%\r\n% For mov=1 solution is 7. Need U' to solve U in 1 move\r\n% mov=1; % U  answer should be 7\r\n% Solved Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nr1=rubik_rot(1,r); % Create Challenge Cube\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),1), [sprintf('Exp_moves=1 Exp Mov=7  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=7  moves=[%i %i]\\n',mov_vec(:)))\r\n\r\n%%\r\n% For mov=14 the solution is 14. Need F2 to solve F2 in 1 move\r\n% Solved Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nr1=rubik_rot(14,r); % Create Challenge Cube\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),1), [sprintf('Exp_moves=1 Exp Mov=14  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=14  move=[%i]\\n',mov_vec(:))) \r\n\r\n\r\n%%\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\n\r\nr1=rubik_rot(2,r); % Create Challenge Cube, First Twist\r\nr1=rubik_rot(9,r1); % Create Challenge Cube, Second Twist\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[3 8]  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[3 8]  moves=[%i %i]\\n',mov_vec(:)))\r\n\r\n%%\r\n% Anti-Hard code solution Test Case #1\r\n\r\ncmov=[7:12 1:6 13:18]; % Complementary Move\r\n\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nmove_map=[  2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ];\r\n\r\nmovt1=randi(18); \r\nmovt2=move_map(movt1,randi(15));% Avoid complementary moves\r\n\r\n\r\nr1=rubik_rot(movt1,r); % Create Challenge Cube: First Turn\r\nr1=rubik_rot(movt2,r1); % Create Challenge Cube: Second Turn\r\n\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[%i %i]  moves=[',cmov(movt2),cmov(movt1))  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[%i %i]  moves=[%i %i]\\n',cmov(movt2),cmov(movt1),mov_vec(:)))\r\n\r\n%%\r\n% Anti-Hard code solution Test Case #2\r\n\r\ncmov=[7:12 1:6 13:18]; % Complementary Move\r\n\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nmove_map=[  2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ];\r\n\r\nmov2t1=randi(18); \r\nmov2t2=move_map(mov2t1,randi(15));% Avoid complementary moves\r\n\r\n\r\nr1=rubik_rot(mov2t1,r); % Create Challenge Cube: First Turn\r\nr1=rubik_rot(mov2t2,r1); % Create Challenge Cube: Second Turn\r\n\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[%i %i]  moves=[',cmov(mov2t2),cmov(mov2t1))  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[%i %i]  moves=[%i %i]\\n',cmov(mov2t2),cmov(mov2t1),mov_vec(:)))\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":6,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2020-09-29T16:49:36.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2012-08-09T16:34:10.000Z","updated_at":"2020-09-29T16:50:43.000Z","published_at":"2012-08-09T20:21:27.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\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId2\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 54\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\\n\\nOutput: mov (A row vector of one or two of values {1:18})\\n mov: is a vector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMinimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided rubik and checking number of moves.\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\u003eThe function rubik_rot(mov,r) is available for usage\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\u003eThis is the next incremental solution step: Move optimization.\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\u003eAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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.gif\",\"relationshipId\":\"rId1\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.gif\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhbABsAPf/AJJ3Uu7u7omXaMytTFZ0bQhwrQiV0JmZmgG062mXiJGPWOPk5FlcW6jVhilvsy2QrqmwZXi4qPLpRlW3yM/Pz1bH1/3nNFSmtAuGuGpzalGaqAbD6vPz89nZ2ipPawmn2HvEtmanpobVyGikmWWId+fPSnmXeHOpl3mkh9flTyuIyHRuV4jY1YfJqApPkmWclXa7tU54hHvIxomndq2srS9ti//qKoPMuPyRKP+2KsqRR6jVeXSdgzKz0P/XKoW6mInUuKumWprWmZi5d4zFmYe0i4W7ppinZg5ZpejoO5PMmIPOxrPZeKWXVsnYWPq7MViIh1qWmRRommm2uoOqhpbWptuTOprIh7zOWHiyndnGQ7raZ//3KdjMOsvjZWDL16TMesfWYuK2S7irWHuHZluBd9nbRv3yNf/LKbecVXPO0+V7L5SrdLa4XPndNCVZiPqtNJujWpW4hv+sK6aSZOrZOtayPWKNgnXU2LbGY7iHR2iBajB7wLCMKFdnX8zcSqnFbZ3He76jTJdiQxweIKyESf3IMevr547UrWuRfMvFSJ+2abmXSKCFVkqFlkZWY2fCyqmcm6u0XP379vPu6hs1UvXz7nCtpMbNWGygjFWLk724Sn+geLmNUem7PGWss2tXN5DPooqgbHWKdJKbpV6UjJ3Si7DVarDhiDOFoO/v9NzgV6ykTmyxrnqTbePj3WtcTKibTHx/WUeFjMF2Q+jEQS2ivu709O7l41+eo3uEiuLd246wdx9epeOmPPr39N/f4N/k5dzMT7LKc5HZtMG5uGrS28nEwv/5Hs7N04KukdfU0szT02LS4Ofr7efn5//RIHSfkAk+hKKjp32wjI3Cjb/jcvGhKra6w2GLkN6gQPf390mRouTf4d/jPse8xfDdLYLQ0Y/SnB2BpNPPzf////v7+///+v/7+/v3+/Pv8Pv/+vv////7/+vn6ff7+/f799/j35Cwgfv7/6O+fJC+k9PS1secW8i8W+bZXDxERJGxb8TGykDD3B/B5AAAACH5BAEAAP8ALAAAAABsAGwAQAj/AP8JNLdNXYCDCBMqXMiwocOHECNKPKhum8CLAp+V28iRIzCNHUOW21YuGIMBAHQ88bXCExofjAp1OqOFjiE0tRpdm5OjkDaeenTwtNIJzhw4nZ4o1TOglo5BtHDgsNLoibZBg3DQGsSvHDqRHAMs6BhgI41d6v6BBLvAXcdz5zqqygCgyRkJsuoIS9Oolg8fsQS9jLVCKR0FbiycaSJMMasBFix0wSdhQCMATwz1HPBSUBofbmo1sVGnUeEnaAoBMDSIBkd+j0AJEgMgqJgm6jYeoHBILdiNC9Zy3JZh05E2ijKQqSOhSR3FsYTZOBNkkwUuivxosVEiThw7dRgI/ztzhpV1G1rGSLAgIYgZb0nitEmSRFIc+H+OhGElYEWTTeCMkY8WyjURBH0KBCFAGwqwJ0wTZZWzW29rdfAMMB1gCEwyyxxCgz6SLELPDGQs4sUiojiRAiYCYPFHCgIMs4UXR/AygyKKHOHEH2HsIYAFNsQxShcSMCCANUwswgYTpzDBBhhXyKGcAKLssYcoAriSgSj0NCCKF7LsQUYekuwzhCROzCCPKFu0KYCKKcSRm4S8+SbSIaMQwAk9JpiwBz1MMCHPEA2gMoQoYOwAhgmBmCKECURQMQQbTzbACw8tUJGHKIHsgIqPW1gjCgGnDLNHBmwM4WSip4gyxA47yP8zCidUFEGFKX746YopShBAhRBCKLNHEVX8YIIpyO7hignK8DDnhHaWQ0AGezBLDQo8EBGKEtkqEQoPifBQRBHZikNEIi3cgMIe2orDQxZAZLEHD94SkQAMCdDDyQ8tEFMGFeKE8sMo1QhRxCg/8NDsKIkok8geKFCTRcQniJBJKNSMMAK/QKBAwA1ARJBAKKGcQEALQABxwrN1rpWJyka0kEkC+lSiDwP6EFAGCX4QkEA0ZTxCwgkkMEDCHjwncgfPBCQSDQlljOD00FlkAQUU6CbyAgwREEBCBGC/8MIdRiSSCdhKV22yxgn4nAjTZWTCMwkE+OFHIgmQ8EjPifj/wTKFHC3BwiVQjBAODJmA8EIrI8AwwidTJBBCNn7c4fgJmVxSiuMwOE6A4SxE8AIIIhPwwiUglAICCyyM0IoIIkRwyRIiLDHCDSK0HsESMrxQ+AulZAODDOG8sAQIlxAQhQwstFLK6YqHMIIMUCw+BQF/R9vKBTFoUsEXF4QQwgP95KIBN/48kIstb2QQ10a6RAFDLqVA8sknuXyihhpRxABDODKIAiTUgAcNTGEKkIBCDDSQC010Lwr9i4IGLuCIXHyhAhfQwP6m8AIZ5OIBjtgf/6DwCfDFwBZfyMUsbFEDUuBiHhzJ3lr8sYEHPGADNYzBBzZggDcYQArZmNNv/8oxCWyk4gHG0EANJtCMC9hQAxPgRg/60Y9U7HADNSgABjBQgBikAgPjqAEGPoCAcdgChxh4gD/88YEsknEcCPhAAaRgCwRsUQpdxEUMgdERc+imTofgCC6m0bMMZOAAyxiiIjkADD9KSAoGGGMBIvmBcRjAAHLEQCTfAMkPRBIBoBwHFwvgAgeoQAV4VIEBVPCGApwSkr3gwxvegIRHUAIsAWhkDP/YmwiB5RC+VKRIOOCWkJjDD9LgQy/m6AA+KNMFkyyAKVWgTGc6QAoYOGUvkMBNJPTCAeD0gAt60QtpuAAJHkjk+8CijmJuhCR06s1A1AEMCkxDF4ZkgD73yf/PfvrznwANqEAHStCBGlIX06AAMNRhjn9UpCPwLMdHhNkRfsBiDbQwhB5ooQOY6GEOcxgEAHxgCE/ohCc+AYpQckAUoyBlJVuJilZkaoVBrOGmWOnKNsyxzjvxsRzmcOQhGJqRIU5UmLoohB0EkAZtNMICaRCDDxrxCFkwQhB18QFOCnGNa+hgBQAoBCNqwxNt6MClSVFKITjjA89YACUAgEMO4LDWQmgFFscoxzvAYolAhoWX0RLJAvwqEgowIB8KaFAQMiALVjQhCUHIh2KCsAJB+GAAabCBGxrRCEHI4gzRcQxk0NOGyLTnPWeIgwDo4BnLhqYJQLKAc2xQixX/jAEZtdWHLPChhSakgQ5jcA6OmgBPaAknJMDsyDIyAIhFQAATxyHDEfLABFH84Q9e4NIRJKEA65xhE9ZtgwCaAA4ubMIPmMhAiFyxiCMo4LF3gcB74jOf+sSBPix6zyoEYAYJ4GUFEDiOACDwB0zEQQJdgMAKFEAlMhS3ZUPMpQl2pSw2WIMNZOASLziRqECYQB6cWIQA8uAEGvGiATsYgh/y4A0nCAAMQ4BAHADhJAWwIQP7GAYbTtGkGQQCxa5qABN4IQpYDYETTADEDB6RAXrIgQCA2MKlZrCDBgwhA5yohyk4DKsZyJAj6TjAIxKhhHpYiVZFMIESgFUrYBUB/wUC89MVkGWCH4RCHCggARWYsI9otEAJVSDAqxpgAiOgQEnUaIEJFkEFTphADlTQVhXERTIqUEEJRaDbm6tggkT8gBg8oEIibjAxQKOgDC1ARAvotWYqfHkjeCMBCajxg1PzwAiIyIQRTqCMUSgDERiLxsQSZgSQZSIL0agCCk4AsgjcgQdVsBcIYkcAI4QCESgYQQKIUI2KnYAKiQaCEcoQLmrwYGgRAEECQJaFMoDgBkvIxAk6yDjcJaAMtVtCAlpwghMk4NXliMAI7jA7EcCAADConR9GVwY/UO0OZQBb27Jwgxvs7GylmN0N7p2JjpchCxG4QSYSbrEswA4Gs/9bwhKYTbsXZIF2l0hAFjDnswRc4g7TvsEdEpCJFyTgdqVDXfJeALY7ADwcLJAe0l+QDTWEIxxluAAepuCHVoQgin54hPDKML8RlEIGMggBFC7BulZEoRViuwPzWLA1pIfgdSyAwSeQHo4QCI4FuWjF0y9xCRnA4AUxaMUSikc8GMTgBW6HwgXUAIIYfAISuYhBDFxDEMCu5QvNmKATH8ANKqaiBj0Y4zgegQ14BGAb23gH6n9BCkc44gK5gPwFLgA5DXyvArPg/BSiMIX95eICX/jCBC5QgeJrABLBn2DwNVGDB3zgA6mgYj8cYcUaXoAbH7BFDB6AACk8Yhe/AMb/MtTBgfJnj7Bk3CIoMfAGTbqAAJag6EY4sIBfRAKMN2zjONZYyUj2APsIsAGWBEqfFEpkZEcGsEYP0H62wEWg9AE+REbYZAAF4AEMEH8doQ5jwRGOBC3BFBIL4AzyJxL05EgbEQmT5AIYYAsqgAQFUACZpErSdErV5ExS4Ewq8E2ndE3S5AC9kE1I4AJ84AAu4AH64E4iIRYZCFiVFxLq4AzitwDAcAjb8Azu8AwBcAjPcAjA5A5eeAhT2AHJ4A5T+AzOcCG/kAy0xAcuUErKhATgxE3b5AJv0IZt6E29cE7ehId2GIQuIA3SQArmgAvPsABVuAAhuA0hCIbM0A0//6UbkUABASAQ2/CBI3iJmJiJmjiCAdBQF3FcHdEWI9gB+gALSYEGIvUXaaAD19AJ+JAGhuADOXENcpVSPSEUc9BSR5FWaNAJALAGMyUVa9AIOoBTWGEP5cABkxBhG7gRjjR+DVUhYvERC9ABy4CI7kBP7oCNiLgA8eAHAyAIsLASQdAEYmAIm8UKNoAdNoETOlGLP5EDQTEURbGLSvEEaxWLKBEVa1AIcvUEABAVtAAK0+AMjNSN9IeIwGAPg+UOB/FHkwiKHIGFIdFT5UADsGAHrCABjdAEbsAFTQAAjTAAndAInWAFVNEJdkAYjWEDsVAC6zgG+FAHcOULT4AUcP+gVmzlGaBRBwpAB9rQE5mhB4NwD7DgGiLxDAdwMxmgC6QAcCLhkENEAbIwBrIADql1Em5QBwBAB3ZgUgOgj0EwBtrwBLZlA7JVAkBiHkCSHkAiARDQBkGAVWIADW31GbJIB+uxGGnACE/ACGIgCPewArrgDLogC7IgCLVgAY3gCT4ADYIAlSBIWB3BARmgBZIgAGNglRCAGGjZBGpJHYpgAWPQCGPwliugBV2wYM9hA2yJHpJgWu4BH3EgCUkAl2QQB03ACgrwHKCVGK7ZBmMQBPqQmj6pAGfABWnpBuAQmZZnVMcVAIepAG0gAQIgC1xwBpiwAuaxCbLQGFzAlt//xQZHoAhu4JFBsJKPEAtmUB02QFtjkATsMZv0RR/2gV8CkALeIAH34Q1moAAMsGKyEAdcIAwCIAAS4A1xgpXmJZkdsYXokA7lcAwZkAeLcCUQAAjSlQJ/gAVvkgIwEmXZlQF1YF4pkgJ5kBeKUZUSsAJ7sAg8BgjyQA9YIgt5YAaplQf0IZf08Qf96QS5qWD6sCBOkAH3kQKS4AdsAAjW8CYvsggOyhGvEEjToCyucip5gF2LQAZtQCZkACcxMiNHQGVgkJsp4AWY4CoCkFoNwAmKsAkMYGFKwmNMMANgAAZt+iqxUmQ7wCd0OgP6BAZVsgMXtgeBwARDIABeYA2L/5ArM7BhUboR2MAAJ8YzcuAqgwIrG5YoizJnqNBpgJACYypk+4AtbbBfgYAKvOAHYLAFTOAHizAMZEAG+8BjW3AEicIEnCAHKLZhhXJl8nAFDPAII1INKOAKnCAEVMAGbdpopjBnJgAGPSaZHKALBFAE9WA3c7YH8iAHM2AlJsAJezAKhEJoc0ZodiYEJCAKTGApnABoD3OnO8AJCbAPooICJnAKF/orRTAvJsADGUACKFAPVIACa1YNWWcre6AEVKAM0SAHQkANAksy1fBonIAtSoAsKABwJEAEPGMC9WAs1YBpe3BpDFsPQmAK5OItoZAAPFANn2pnk1Y1QzAEPP9AsQmQADRWaNhGBkUQMHvwro2WAURQBe5CLFVABSTgJzywB/WgbKh2bSQQDUBwA7z2A2eTCS3QAt9SD5wALgCHAsogayiAAolAADzAA37yA1VQBcqQBYiAbexiLpgCMrJ2ZzxwAilzAomwLfbid1RQZ9d2ti0gDkXgbwWDAplADaFAN2k7L8AWDQgHMi57AiwgcyoDBcx2A2WjuCKXLkAQDQCHM4SgD6ZbugSAM/pwB9FwAndQN9GQCIkAAiDQbkaQMvditYkAL8SQBSEwBZmgBAkAArRDbnHLAxEgAwnwtuxWbSlzNiIABPJGOxFwNiNgO9MmAlCQCyxQdycgOn//R7tdkziXUAYABzJAcwkigGwn8G6pmwFAcwcnkAWyVjWZQADfCwIk0HEnEDcRsGt3YL8+I29lIHPqFg1GYATIZgQSlwVGcMDytjSYc29VYwQEp8Bec2w5GwGuWwbz224/57oAtzojcAJLEAHVAzIhUAYyIAKt4AilMDQDRzr3dgMRkAWmkztedwkvIGu4I3LECwJRAwOpcwdpVwZi0zZbAwJG3AoR8DyCozg2/AKm0wrhaztlkA270woEcAlEHDVWVwoA1wqfAAUhkDswAAXLUzzZ8AnGQD/h8AlRsHCtIMStwAJLUAaq0zriEwKlUArhIAKpwzxLoMbiozNerG1W/9wK2QA8I6DHUwACraC+h2M8ZBwDUUDCMDAFk3MJh6MJUBAO21MKVucH33B0gzMCITB7ufB0DiQDU/AAtqAJE2AL48AA59ABj1AGIQADLAAF2cA8XqcBfjc9ABQFFxAFuVAGs6M73QsDIeB0dXd3I3AJVlcGMdB7kLDGLPDHuaAGuTAF4XABsxAC48wNynx9uuAWJAFw35NBFdAMVNcDFdAPNdB5uVAD4yAFBwBUHUEKmiACEkRAmqAJkIAHnwBFDBQFIsR7vgd8wkd8F3QByFcB3ADRsBcOkMANoNcP/sANfvcAqXABxjABNaABX5AKLFQDNHAO3QAPuxRP0ZIKn//nCAFoAA+gARhQRqmAAAXwBh1wDsvIgebAAeUAG45gQsBXAY4ABcUXRVNkz82HP25c0sTXDOADCZAwBZrgCM5nQ6D0fxXQAwUAejRE0zgkBc6HBNlgCZPwC2BIEkEFcB/gD6kQA5MERh+gSW9AevJ3C+rwDSrtCJd0Aa3Q0zkU1dUngAZAgDttgKFURzWkRlwER6EkSmWkRT3kAgxwSxyhCiLIgYBFWC8oBWJkAOPwBh7wlJgYAB0Qf5GgD9jEQyq4AT1gSc/3BjWwQ5rk2KBURmRUQ+NQ2pOkAmDk0y/oSQXwTaTkPkn4iOVwfkPEkJuoDh1ggrogBR8gBVIgg2//8HwxSIHT5IPgRE6nhErNNISuhAHedN5vEEtE6ALf9xu5tIQybYkcIYqaWIIhMQ3Q9IMGEEt8MEenJN40eINDKOA56Eqy9Abg5ACuJIcFEISVkFcRBt0P1htCJFj4TVH0BxYU4AFIMIQO7kzb5IMe0ErUlN4D7oNByIff5AAvnofmJA15hYG/wQFrMSfmAC0C8VCbGORCPuQjuFy6UAwLhRH/YA7qcCHL8OQUEOVSPuVUXuVWfuVYnuVavuVZ/uQfURFKvg1DZYJEXuZmrolM3olKbg4SeeZu/uYUZQ5qLhCEFVEbsYWXqAugwFGp0RJuwAgfZQVZVVIn1RPxOI8s/1WPL/UEnrACMkULNAUANoUDWBEJXrENFkkWGxhRimgR0ULm5SCKoA4WBwALYZUZAGBZMKEDeqAFJdCOswiPKkWPaHWPjHAPhQDpMtWPcEALGFVTdHAL5jDUuNSM5RAhx/AMFlEh25iQHcCQH5FLUqiQC7ALHDANoFALmPEEndASscgIK1AC7HgTsW7oKIWLurjo+MhWTZAVOMDrT/AU7z4IdOAMC3CQwLAA9JTvC9kWwREh07AMETlEC9DhHYENK2AICiALOdAJwsAKdiCLtiUByFAT5F7oeuALOSCP6K7oafUETPEXgjAGgkALVuCPRwEAv4gDoJABimQJwhEhxv81RBSpSM6wAnbQBPhwD50wBlwQVXYAALBQCFagDYUgC47pCQDQCT2vAGMgDPgAVvdgVjqw8eq+Vp2RWTYgCCsQlHQV72ugB7BABhsOUckwhRsRqaEuHHAREgdQF1pgASsQCwUKC4wAGmkwAJ6QBkv/BI3ABhAADpHxkutoHutYAj9ZCL7w8Vh/l6DRBUEgAT5RCJ5QUisgBjqQAXbuDJHAACovCIzQB6Cg9sCAhOXQU9OAmPhQ8QqgBWngBrOhioIQi3ZABp2ABtoAAImRlo5xHlrQBuSxCrLQCDbJFFn/F6LxkXWwAp2QA2jACMTfB36gCqHOAKAgBmnAF2IgBvf/AABqP1i/YQ66wAqKoADcsQcr4AY57x90kAYrcPeXFQRbfw90IAtagAyguZa+f5rzCRDeJORbAcCTjQFpfLip1cTCwyZu8HVqVALcvUb6/MRqosBGnTSwGjVJA0BduXIHKBz69wzlS5gL3MGEqSuWtwxB6pARsGKABS5NhNngMsaoHTtp3HDZtMKGLEFjSlg4E+SnDS1tHkqAYMZbkjh5zLTJIEuLmxIOIdYB2sTsGVmwgpRQtGJMnTOsliLDdzLlypY0YarzS5OGLEVx2tCRpSBfEHAQhVmwEWTTGQkKPH4k47HRIzeUWW2irAXC1iBewbb52iaIN0wKZEEYIywi/xdksSbLehSrxBhFY850CbKijWtZllCqZOlSMMpn7szR5MdgU5wUefwI45KvCTiirCbnJX1GUWcbaRUpOANghQVkVkuPQa1acZIkkuJ8xSRAwplVFAgiDsbGaAwCWSRgyo82zJAgDraY8ou5wJ4rJ4AADJOFDTJSwEIWCPERIIMjjoAgAwUUOWOMy87Y5Ags5mJFghLSaIIMBhBUQBhwFMHnDAskSC2F1fDTD7/+zEhilTjMSOGMOB4RAAIyNuniiDb2SyIFBbqoow5WJgTMueficWmbcn7RRYAt9mjjiDziyMAJb8IQwIk//hBgGC/yyICVM1wU5Y8UyHjvjDpkAf+TxCG2YEKUPUSRJB8IvioyPy0VEcCrFPY7Ax994jgijDhkScHDKQU4QoAwnHACAjGbewlNc7axtQNgLLFVFzKwEIUTV45YhJ4jnEihPyzyFACQLbw4woQ4zBMFz1Uy2MSGMxTYY8VHFnF0CHmY2AKQUVyZUgFJvDEDgibHIqMNAUakRxQ/UEzh2UqxcIUML7bYQgBMCIVAub9kRUmdbTjgwFZgdpmEklEyAGQGMPw4wosUJDkiBW+cAJjQPZs9ghcwjggCgjyxEIATfLiIQ55oFchgByYWYeMUJhqguIEdOJEnEJ05ASMQejg5BWc24mBgBldEEYWJIQRgA4wrWHX/wotg44Bgj1grLDMAfkaZYQ8BZhCAnjzymIGMSGcwIQNR8ug0D5Fn2AGVtY21EwxONgliGGKDyIAMJgC5+WiKwehZDlMakGcGnulx5RRHM3jEhB32YMMaQPbghOchRBnGFU5GAQMVVHjpmkzBApiGDDmuyIANQOjxvIHUOdlhBzBMuMIUKjJYBOMjqGgAahJEScFjoDkEYwswhBeFDHqGOIXmGQKhmZMhdmiAF4p3CEQAcEfRhxM5qDABkH2KKGKGnE3YwxRThDBB+x1mWN3CZfbw4wpO7GEPJhgCKuTBi93tQ2i88x39TKCMGTiLZN9DQRaOsAoBXMF7ewAEE6xB/7otHCED8MPZDK7QgAagb3fgM8Xa9oAKVzxiDzOYgRASMYorCEEZnOAENYjgu9+ZAAyA4MUeCEYh1qHkFwegAgpM4AdXyOFzTBiGKLIHhhlwggkMDET9TPCDUBRhD937Hg9C8YN4KY4JrtjDKbwwgzLswxoC8AMPpzeDIQCCdLwI4B5ySAT1EUAJeyiCElBAgh8oQQgkSEQozmgCVFwBBRkoQjWAt79Z+cEPVBDCKPzQADmYgABUIEIVqFBIcRTBBChAHyd+ZwoTGCEUQuBBBhS3DxQQQRxG2AMYUMiJLJjgUUU4wRFOMUBO6NCRoeBBEapQhR0KQQhUIAQhqUEFZf/wABE8qAcxs4ACJSiBCHvggRGIwYNwKoEKmEwJCXjACSqMwgQkqIc0eVANRZ5SmkUwYxWIQIBkNuCLoagCCk7AAzAswoyhUAJAt2iCFkSAhtQwZRRVyQkTMJSZRQiFOLJJhUTsgQSkrAIJlBGKbZIgAkA4AQqq8IMEJKAFMzWBEkxBBBKwUxmJIIAfUEANE4zCfTwY5Q/qMYpEKFKVuiRCOVFQDU6AsaAnuAEVRIECR1YjGiHgBCpiiYgfZIAaSihoMpUgPx78oApp/QEVeMADZaCAByaYqkxbkAUSZAEIQFAGCU4AAiPI1JF7SMAJWMrORNQjESaoBxH6CsYfEsH/kcr4gRFQQE6GEiERIABCC/bwA3GIgwd6BcJiO0qEBMhgBDT8QQuIkYhGKuEHJEhmJ5VRhUTogwF7CCkBqIGIFpAgATdYQgJgqtosALcMCRDBDSJgRhRkYrg3uMEJ2MkDaiTCuD+QK3B/wFsqhIKyLQArCbBahQQY4QZAyEQi1MoDwwIhC34ALWpBIIJJShYR0ShDNKpQhCxEIBE6NEI0qMED1xIjrj+IBgnuQF0gkCATSxBBerMwgktQFQgRIMAIiCvTzuZ0OWN6iR+iQYAynIC7ichCNhNxA2IAIQGJQAQxfpAJEYAgESRowV4TAIITKEMZGr7wCxL5YwrfAYzM/4zAJXJ5giXcYMYtgHFMs3CCMtyBwjAYbhZeUAriyrgMMGBBCEYg3xe8YAlrTkAmoHwJdmaiDGVgwCMIcec76+POj/BDnv3AAH3wmc5leCsB7hCBE/ghvXd9AQwyQYRo3FcEpeAxMVBwCRYImLSTlikxohEBEYjgyqEGwR0aLYNSgOAGl3hECGDQijmTAApl8MMdCKCPQGvkEexcr5t/DGQjkIAAjygDCRos3GjwNxPLVql0CZCALBghE9HIAk8JsGz+nuAEEbjDCDKB18JmIQF+1fYdTuBm4QY4AXe48onbnAg/GFvHnz7BHpabBbxKNwEE0HYCysDO5i6XwhEQ+P8SbO2HYoc7E3dw8wn8Om2/qvoOyx3BuiMAAm4DNgspPjeKM/GCiafZ3wl4wQgMHYEIxJS6Ao7AlZ8N7URsm9spRvTDHa7tE9zhiCRGyY8vMQIKg5y4NyhDBFggAj/w++cSvvgd2gyCH0dgBFmOgHOhDIJMvDzrhy51Ji5+ggSgPAKlCDAISkHyEdh6qyC/Lwug/XNDG4EFFR9BKeoOgxG8oAw/Tzs7wzH3E1wiBFPwsNkfDIJcXCACDChD2kcAAhCU4QU3EMEdStHoEYAaBHonubjbnom2Y1gGMvg55Dcv6RcYPdMhGL3JL9+KO5CZBaXIxgtaEYJLLKEVUNAyDF7/AIVLXKIVpQD4pKEgAxa0AsMjCEcuLhEFY4SAAOGAwSMIEAEZ6H0JeC+DpEtRBtZLncJmv0SaCfCCS3B5BMiHQe7XPAIYwEAG2chGLnIx61YsYfPIZ0EU6h6CRmMBGZg1EGABGCCAENC9MWuFKPADdsoFGQiBEPg7GCiDKWCBcCgDTVADNdCE+NOACSCAGDCzUpBAERiBvCO8VhDAF4iBF4C8F5CBv4NADLQ7yGuFXJA/35M/GYiCC2SBnwuHcAABTciFF/iEbEC+cPg9CLy9VtCAKXiBELiAKYCCEIgBbCgHNCkYr/k7MwuHT5iFGGSBKYgBSMCDKJiFT7iACYgB/32YBl2IAitMPgIgs3CAAigowFZ4gXBQLQLIhfx7wb9DPyGEAdYTwkNcwhWcu/qLglyIAjUQwhj8hFwohQu8QyhQAzzQACiAhAu4gEeIBlrxu7mLgQv4ggvIhSUIAQ2AQm74AFuAggkYhxqgAZSYhkfAQdWKggkMgU/wRP8Twh6EBDUoQ03wRSgIwPb7u3AYgVZohU+AgmzQgAvghlzgwCmARBlohRi4RjwAxE+8gCmEwln4xBpghnKYjnJgJw3oAW44xS+YAE3ghh7oB01whHqMAQ0Yh0c4BpjoBgsEATM0hjL8BE2cAkfghikYRg6MgjPcRDacgGqcAIrkhgmAhP8voMYvQEVvhAEoeMd+4IYznIIa0IAvqABNmIUKgIRUmIVUiIFXoIR0eImdM5hy2Mhc0ICVhIJZ6IcKmIAa6IEeeAAMkIIY6AbB6IAYoERHmIJvdIQLUINP4IYKqAANMMVwQMMp4MDEq8oJ0MmTBMGqpMYKQEUJTAUM4IZ+6Ad/0AAY4AYEeIBffIBxuAANwIAH8ABdKAdVAIZJMId2KIea9BpIsMoYwAAE+ACLJMoHeAADQAAXyIBXeAVgOARgWABgAIZXIIdsiAGJ1IBc+IQKuABH3MgJoEd3HEEZ+EZ4lMiqtMqybAZqvIAHqIFU2IAN+IBUWEtbqAFb8IcNeAD/RzCADbCFWUAAA/CAA7CEZegACsCVzBxMMvkABBiHB8DND6iBcUAABHiDB/gAFyCFc7AQdkiTMqiBKTCGGuAGY0DF9YxHtfTJVPgAA3iAGPBNu7wASFhDTXiAVKDFBwBODNjOxOQGW8CADxiHD/CHD5ACW9gAA3ABDIjQYiiH8aQE1tlCJHoJ3LSF7yzKVODOAqgBo0RKC3kJddgFUigAW7gAvNzPB0DOB9CEteyH+cRNx+ROAxiHx0QAxESADZhQf/CHxgROA6gB6qzOHphQBcUADEiFGvCASICJAAAGmNBQwDiElxgHKK2Bx9zRCTWASjiAE6WJW1gAXIiB3nzM/wfIhhjdAH+ogQLogQqYTyBNhR41gB+tziQdB1vgTlvgBgwogEHlTgSQggJ4TAd4Az11gUqYhnR8iQBYAJhQRwrRUpRQAT3lUQx4gxrAABfwgyQq0wCwh3XYhRqozQ8I0hrATgXV06AEznH4UT01VAXlTiE1gDfoBQNQgQEVUUalT2lwUiTwgAqlCWew0lkZMZbA1HJwhAJwASQogALwgH4czzIVjL5UjkPQB0KlT2o1AH/gUepEVELlUSD9gD390QZ9gwkN116dVQdQASlQVweogV6I1mOliUkdDGb9B2dFCUrQ0nOghG0wB3XMVpjggAVQR3J4BCcd1E2dzw/4AP9CVQGLndYCkAI/MNc3KIB5dQAH4AMVcIAC0NROJVkVeAMkGNk3kAJpINPnUAXW6ZoMsZAFcAaFfQ4OAIaExYVHgFVNjdACqNiLVQGQJVk+kAI+4IOibFp6LQCSNdmi7AUkwACkdYGmRQJpeNQTndSEtdkTjYeA3VmU6NmELQdc+FQkqFcDQAI+uNqLNYCkVYGlbVoH6AWVlYJ5LVkXENm89Vu9LQAkqIQMQIevVdaD+debfY4FKFuzRVua6AAPaFkpMAC+5QMH8AAHMACL7Vs+6IWRDV2ozVwkcAHRzdtpRYJekFau1QVstZB+XVYuLAzBuEyz5dcOSFuU0IVKcNn/N2ja0EUC4n0D0GVapz1Zu3UBaWBd1BXZXmheq21eadCFSfjL50CTKrWVdcRSltjCSA0Ad3gGzFwGzHSHbXiGAFDf9T0Ed1jf6LDMZ7AHfsDMBVgA8u0AS9AFaRhZ1G3aXkjd05XWXnhZ1n0D1yXeAH7e1kXdAZaGR7jfzNwGd7Dfnr3fDmCG+23cZaCQfzjY3A1hER5hEjbbZcgAGlgGdfgHFk7fDtgFyC1hGZ7hGQYGGsgABsiAaaCAZ9gGFm5hdQCGZSgGGpiGSDiAIz4AJV5iJm5iJ35iKI5iKZ5iKm7iSIiEaaCBYqAAYAgAH/7hH0ZYwsAQDDkEMj5jNE5jETVeYzZuYzd+YzdGmIMF44AAADs=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44288,"title":"Throwing Dice - Will You Be Eaten By The Dragon?","description":"You and a dragon have agreed to let dice rolls determine whether it eats you or not.\r\nThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\r\nThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\r\nWhat are your chances of survival?","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: 132px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 66px; transform-origin: 407px 66px; vertical-align: baseline; \"\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: 263.5px 8px; transform-origin: 263.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou and a dragon have agreed to let dice rolls determine whether it eats you or not.\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: 373.5px 8px; transform-origin: 373.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\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: 251.5px 8px; transform-origin: 251.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\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: 111.5px 8px; transform-origin: 111.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat are your chances of survival?\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function p = survival(x,y)\r\n  p = x/y;\r\nend","test_suite":"%%\r\nx = 6;\r\ny = 3;\r\np_correct = 2/3;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 15;\r\ny = 5;\r\np_correct = 3/5;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 30;\r\ny = 6;\r\np_correct = 35/60;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 21;\r\ny = 7;\r\np_correct = 4/7;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 54;\r\ny = 9;\r\np_correct = 5/9;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = randi(100);\r\ny = 1;\r\nassert(abs(survival(x,y)-y)\u003c1e-6)\r\n%%\r\nx = randi([10 100],1,10);\r\ny = 5;\r\nout=arrayfun(@(a) survival(a,y), x);\r\nassert(isequal(unique(round(out,1)),0.6))\r\n","published":true,"deleted":false,"likes_count":11,"comments_count":13,"created_by":13840,"edited_by":223089,"edited_at":"2023-03-21T14:10:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":172,"test_suite_updated_at":"2023-03-21T14:10:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2017-08-24T09:19:28.000Z","updated_at":"2026-04-02T14:01:43.000Z","published_at":"2017-08-24T10:04:09.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eYou and a dragon have agreed to let dice rolls determine whether it eats you or not.\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\u003eThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\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\u003eThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\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\u003eWhat are your chances of survival?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1238,"title":"PACMAT - Ghosts Random; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m PACMAT_Ghosts_001.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4 Alfonso PACMAT Random Ghost Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4)\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts will get brighter.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\"\u003ePACMAT_Ghosts_001.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\"\u003eAlfonso PACMAT Random Ghost Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will get brighter.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n %if curdir==0,continue;end % bug 020213\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0 % bug fix 020213\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir\u003e0 bug fix 020213\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  gmap=map;\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % Random Ghost move  gmap avoids tunnel \r\n   gmov=intersect(find(gmap(gidx+mapdelta)\u003c10),find(gmap(gidx+mapdelta)\u003e-1)); \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    gmov=gmov(randi(length(gmov)));\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end\r\n  end\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T18:27:37.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-01T04:44:13.000Z","updated_at":"2026-02-07T15:48:13.000Z","published_at":"2013-02-01T06:15:30.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_001.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso PACMAT Random Ghost Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will get brighter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1241,"title":"PACMAT  - Ghosts maximize unique locations; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m PACMAT_Ghosts_002.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4) Quite an impressive solution\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts with LOS Tracking.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\"\u003ePACMAT_Ghosts_002.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4) Quite an impressive solution\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts with LOS Tracking.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n% if curdir==0,continue;end % Inf loop error\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n   gmapT=gmap;\r\n   ptrg=find(map\u003e2); % Find all ghosts\r\n   gmapT(ptrg)=Inf; % Rule out moving onto a ghost\r\n\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap/gmapT avoids tunnel,other ghosts, Walls\r\n \r\n   gmap(gidx)=gmap(gidx)+1;\r\n   ghost_adj=gmapT(gidx+mapdelta);\r\n   if min(ghost_adj)\u003cInf\r\n    if rand\u003c0.5 % Push ghosts away from each other\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'first');\r\n    else\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'last');\r\n    end\r\n   else\r\n    gmov=[];\r\n   end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T05:09:50.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-02T00:36:11.000Z","updated_at":"2026-02-07T15:49:54.000Z","published_at":"2013-02-02T01:21:05.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_002.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Quite an impressive solution\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts with LOS Tracking.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"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,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2085,"title":"Sudoku Solver - Standard 9x9","description":"Solve a Standard 9x9 \u003chttp://en.wikipedia.org/wiki/Sudoku Sudoku\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner. \u003chttp://www.free-sudoku.com/sudoku.php?dchoix=evil Sudoku practice site\u003e.\r\n\r\n*Input:* m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\r\n\r\n*Output:* mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\r\n\r\n*Scoring:* Time (msec) to solve the Hard Sudoku\r\n\r\n*Example:*\r\n\r\n  m         mout\r\n  390701506 398721546\r\n  042890701 542896731\r\n  106540890 176543892\r\n  820600150 829674153\r\n  400138009 457138269\r\n  031002087 631952487\r\n  065087304 965287314\r\n  703065920 713465928\r\n  204309075 284319675\r\n\r\n*Sudoku Variations:*\r\n\r\nFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\r\n\r\n*Algorithm Spoiler:*\r\nSudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.","description_html":"\u003cp\u003eSolve a Standard 9x9 \u003ca href = \"http://en.wikipedia.org/wiki/Sudoku\"\u003eSudoku\u003c/a\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner. \u003ca href = \"http://www.free-sudoku.com/sudoku.php?dchoix=evil\"\u003eSudoku practice site\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Time (msec) to solve the Hard Sudoku\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003em         mout\r\n390701506 398721546\r\n042890701 542896731\r\n106540890 176543892\r\n820600150 829674153\r\n400138009 457138269\r\n031002087 631952487\r\n065087304 965287314\r\n703065920 713465928\r\n204309075 284319675\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eSudoku Variations:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eAlgorithm Spoiler:\u003c/b\u003e\r\nSudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.\u003c/p\u003e","function_template":"function mout=sudoku_solver(m)\r\n% m is a 9x9 Sudoku array with 0 for unknown values\r\n% create mout a consistent sudoku array\r\n  mout=m;\r\nend","test_suite":"assignin('caller','score',500);\r\n%%\r\n% Test 1\r\nmstr=['012300007'; '040600010'; '078900020'; '000000040'; '100000002'; '060000000'; '080001230'; '090004060'; '300007890']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n%%\r\n% Test 2\r\nmstr=['000004500'; '000003600'; '432008700'; '867000000'; '000000000'; '000000417'; '001900854'; '006400000'; '003700000']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n%%\r\n% Test 3\r\nmstr=['120034000'; '000000056'; '000200000'; '007800002'; '600000001'; '500006300'; '000008000'; '340000000'; '000560078']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n\r\n%%\r\n% Timed Test on a Hard Sudoku\r\n% Non-Valid answer creates a Max score but not a fail\r\n% Hard Sudoku\r\nmstr=['005700009'; '030090010'; '100005300'; '600004700'; '040010050'; '002500001'; '004600002'; '080020040'; '200008600']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntime0=cputime;\r\n mout=sudoku_solver(m)\r\netime=(cputime-time0)*1000 % msec\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\n% Not Asserting for Valid answer\r\nif ~valid,etime=500;end\r\nif ~valid2,etime=500;end\r\nassignin('caller','score',min(500,floor(etime)));","published":true,"deleted":false,"likes_count":8,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":51,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-02T00:31:17.000Z","updated_at":"2025-12-15T20:03:47.000Z","published_at":"2014-01-02T01:30:54.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSolve a Standard 9x9\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Sudoku\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSudoku\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.free-sudoku.com/sudoku.php?dchoix=evil\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSudoku practice site\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\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 m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time (msec) to solve the Hard Sudoku\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[m         mout\\n390701506 398721546\\n042890701 542896731\\n106540890 176543892\\n820600150 829674153\\n400138009 457138269\\n031002087 631952487\\n065087304 965287314\\n703065920 713465928\\n204309075 284319675]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSudoku Variations:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Spoiler:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Sudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":821,"title":"Pentago: find winning move","description":"\u003chttp://en.wikipedia.org/wiki/Pentago Pentago\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW).  During a turn, a player places a marble anywhere on the board and _then_ rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\r\n\r\nFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\r\n\r\n*Input:*\r\n\r\n* _board_ - 6x6 matrix of filled with 0-2\r\n\r\n*Output:*\r\n\r\n* _pos_ - 1x2 vector with row and column of winning move (if any).\r\n* _rot_ - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\r\n\r\n  rot = [-1 0\r\n          0 0]   \r\n\r\nmeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\r\n\r\n  rot = [0 0\r\n         0 1]\r\n\r\nmeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\r\n\r\n*Example*\r\n\r\n  board = 0 0 0 0 2 0\r\n          1 1 1 2 1 0\r\n          0 0 0 0 0 0\r\n          0 2 0 2 0 0\r\n          0 1 0 0 0 0\r\n          0 0 0 0 0 0\r\n\r\nshould return\r\n\r\n  pos = [3 5]\r\n  rot = [0 1\r\n         0 0]\r\n\r\nbecause placing a marble at (3,5) yields\r\n\r\n  0 0 0 0 2 0\r\n  1 1 1 2 1 0\r\n  0 0 0 0 1 0\r\n  0 2 0 2 0 0\r\n  0 1 0 0 0 0\r\n  0 0 0 0 0 0\r\n\r\nand then rotating the top-right block CW yields\r\n\r\n\r\n  0 0 0 0 2 0\r\n  1 1 1 1 1 2\r\n  0 0 0 0 0 0\r\n  0 2 0 2 0 0\r\n  0 1 0 0 0 0\r\n  0 0 0 0 0 0\r\n\r\nwhich gives Player 1 the win with 5 in a row (see 2nd row).","description_html":"\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/Pentago\"\u003ePentago\u003c/a\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW).  During a turn, a player places a marble anywhere on the board and \u003ci\u003ethen\u003c/i\u003e rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\u003c/p\u003e\u003cp\u003eFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ci\u003eboard\u003c/i\u003e - 6x6 matrix of filled with 0-2\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ci\u003epos\u003c/i\u003e - 1x2 vector with row and column of winning move (if any).\u003c/li\u003e\u003cli\u003e\u003ci\u003erot\u003c/i\u003e - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\u003c/li\u003e\u003c/ul\u003e\u003cpre class=\"language-matlab\"\u003erot = [-1 0\r\n        0 0]   \r\n\u003c/pre\u003e\u003cp\u003emeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003erot = [0 0\r\n       0 1]\r\n\u003c/pre\u003e\u003cp\u003emeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eboard = 0 0 0 0 2 0\r\n        1 1 1 2 1 0\r\n        0 0 0 0 0 0\r\n        0 2 0 2 0 0\r\n        0 1 0 0 0 0\r\n        0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003eshould return\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003epos = [3 5]\r\nrot = [0 1\r\n       0 0]\r\n\u003c/pre\u003e\u003cp\u003ebecause placing a marble at (3,5) yields\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e0 0 0 0 2 0\r\n1 1 1 2 1 0\r\n0 0 0 0 1 0\r\n0 2 0 2 0 0\r\n0 1 0 0 0 0\r\n0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003eand then rotating the top-right block CW yields\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e0 0 0 0 2 0\r\n1 1 1 1 1 2\r\n0 0 0 0 0 0\r\n0 2 0 2 0 0\r\n0 1 0 0 0 0\r\n0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003ewhich gives Player 1 the win with 5 in a row (see 2nd row).\u003c/p\u003e","function_template":"function [pos rot] = pentago_win(board)\r\n  pos = [];\r\n  rot = [];\r\nend","test_suite":"%%\r\nboard =[0 0 0 0 2 1\r\n        1 2 2 2 1 0\r\n        0 0 0 1 0 0\r\n        0 2 1 2 0 0\r\n        0 0 0 0 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [5 2];\r\nrot_correct = [];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[0 0 0 0 1 0\r\n        1 2 2 2 1 0\r\n        0 0 0 1 1 0\r\n        0 2 2 2 0 0\r\n        0 2 0 1 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [5 5];\r\nrot_correct = [0 0;0 1];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[0 0 1 1 1 2\r\n        2 2 0 2 2 0\r\n        0 0 1 0 1 0\r\n        0 2 0 2 0 0\r\n        0 0 0 1 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [2 3];\r\nrot_correct = [-1 0;0 0];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[1 0 2 1 1 2\r\n        2 0 0 2 2 0\r\n        0 0 1 0 1 0\r\n        1 2 0 2 0 0\r\n        0 1 2 1 0 0\r\n        0 0 1 2 0 0];\r\npos_correct = [];\r\nrot_correct = [];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[1 0 2 1 2 0\r\n        2 0 0 2 1 0\r\n        0 0 1 1 2 0\r\n        2 2 0 2 0 0\r\n        0 1 2 1 0 0\r\n        0 0 1 2 0 1];\r\npos_correct = [1 6];\r\nrot_correct = [0 0;-1 0];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":35,"test_suite_updated_at":"2012-07-09T21:39:10.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-07-09T20:36:50.000Z","updated_at":"2026-02-15T07:32:20.000Z","published_at":"2012-07-09T21:39:10.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Pentago\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePentago\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW). During a turn, a player places a marble anywhere on the board and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ethen\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eboard\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 6x6 matrix of filled with 0-2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 1x2 vector with row and column of winning move (if any).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003erot\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\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[rot = [-1 0\\n        0 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\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[rot = [0 0\\n       0 1]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[board = 0 0 0 0 2 0\\n        1 1 1 2 1 0\\n        0 0 0 0 0 0\\n        0 2 0 2 0 0\\n        0 1 0 0 0 0\\n        0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eshould return\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[pos = [3 5]\\nrot = [0 1\\n       0 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebecause placing a marble at (3,5) yields\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[0 0 0 0 2 0\\n1 1 1 2 1 0\\n0 0 0 0 1 0\\n0 2 0 2 0 0\\n0 1 0 0 0 0\\n0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand then rotating the top-right block CW yields\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[0 0 0 0 2 0\\n1 1 1 1 1 2\\n0 0 0 0 0 0\\n0 2 0 2 0 0\\n0 1 0 0 0 0\\n0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich gives Player 1 the win with 5 in a row (see 2nd row).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1260,"title":"RISK board game battle simulation","description":"Given two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game. \r\n\r\nIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For example:\r\n\r\nAttacker has 10 units\r\nDefender has 10 units\r\n\r\nAttacker rolls [6 3 2]\r\nDefender rolls [4 3]\r\n\r\nThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\r\n\r\nThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\r\n\r\nThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\r\n\r\nThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker. \r\n\r\nExample:\r\nAttacker has 3 units,\r\nDefender has 1 units.\r\n\r\nAttacker rolls 2 die (3 - 1),\r\nDefender rolls 1 die.","description_html":"\u003cp\u003eGiven two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game.\u003c/p\u003e\u003cp\u003eIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For example:\u003c/p\u003e\u003cp\u003eAttacker has 10 units\r\nDefender has 10 units\u003c/p\u003e\u003cp\u003eAttacker rolls [6 3 2]\r\nDefender rolls [4 3]\u003c/p\u003e\u003cp\u003eThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\u003c/p\u003e\u003cp\u003eThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\u003c/p\u003e\u003cp\u003eThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\u003c/p\u003e\u003cp\u003eThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker.\u003c/p\u003e\u003cp\u003eExample:\r\nAttacker has 3 units,\r\nDefender has 1 units.\u003c/p\u003e\u003cp\u003eAttacker rolls 2 die (3 - 1),\r\nDefender rolls 1 die.\u003c/p\u003e","function_template":"function y = risk_prob(a, d)\r\n  y = 0.000;\r\nend","test_suite":"%%\r\na = 3;\r\nd = 0;\r\ny_correct = 1.000;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.01)\r\n\r\n%%\r\na = 1;\r\nd = 5;\r\ny_correct = 0.000;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.01)\r\n\r\n%%\r\na = 5;\r\nd = 3;\r\ny_correct = 0.642;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 4;\r\nd = 6;\r\ny_correct = 0.134;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 10;\r\nd = 10;\r\ny_correct = 0.480;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 7;\r\nd = 8;\r\ny_correct = 0.329;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 8;\r\nd = 7;\r\ny_correct = 0.5355;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 20;\r\nd = 10;\r\ny_correct = 0.965;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 4;\r\nd = 2;\r\ny_correct = 0.656;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 6;\r\nd = 4;\r\ny_correct = 0.638;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 2;\r\nd = 1;\r\ny_correct = 0.417;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 2;\r\nd = 2;\r\ny_correct = 0.104;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":6,"created_by":10338,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":42,"test_suite_updated_at":"2013-02-12T00:28:08.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-10T23:10:17.000Z","updated_at":"2026-02-15T07:37:57.000Z","published_at":"2013-02-10T23:10:17.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game.\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\u003eIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For 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:t\u003eAttacker has 10 units Defender has 10 units\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\u003eAttacker rolls [6 3 2] Defender rolls [4 3]\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\u003eThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\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\u003eThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\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\u003eThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\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\u003eThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker.\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\u003eExample: Attacker has 3 units, Defender has 1 units.\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\u003eAttacker rolls 2 die (3 - 1), Defender rolls 1 die.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":45270,"title":"Game of life - 02 ","description":"refer to \u003chttps://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003e\r\n\r\n\r\nrefer to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003e\r\n\r\n\r\ngiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\r\n\r\n* Compared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\r\n* toroidal board is no longer applicable.\r\n\r\n\r\n\r\n\r\n\r\ni implemented the following assertion process (though its not a gd one)  - \r\n\r\n* place the initial set in a 100 by 100 board from the starting location (50,50).\r\n* so if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\r\n\r\nu need to find the state after nth stage. ","description_html":"\u003cp\u003erefer to \u003ca href = \"https://en.wikipedia.org/wiki/Conway's_Game_of_Life\"\u003ehttps://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003c/a\u003e\u003c/p\u003e\u003cp\u003erefer to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\"\u003ehttps://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003c/a\u003e\u003c/p\u003e\u003cp\u003egiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\u003c/p\u003e\u003cul\u003e\u003cli\u003eCompared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\u003c/li\u003e\u003cli\u003etoroidal board is no longer applicable.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ei implemented the following assertion process (though its not a gd one)  -\u003c/p\u003e\u003cul\u003e\u003cli\u003eplace the initial set in a 100 by 100 board from the starting location (50,50).\u003c/li\u003e\u003cli\u003eso if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eu need to find the state after nth stage.\u003c/p\u003e","function_template":"function B=gameoflife_4(x,n)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = [1 0;1 1];\r\nn=30;\r\nr=[50;51;50;51];\r\nc=[50;50;51;51];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [1,0;1,1;0,1];\r\nn=10;\r\nr=[51;50;52;50;52;51];\r\nc=[49;50;50;51;51;52];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [0,1,0;0,0,1;1,1,1];\r\nn=100;\r\nr=[77;75;77;76;77];\r\nc=[75;76;76;77;77];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [1 0 0 1 1;0 1 1 0 0;0 1 0 0 0;1 1 0 0 1; 0 1 1 1 0];\r\nn=30;\r\nr=[54,55,53,56,54,55]';\r\nc=[52,52,53,53,54,54]';\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx=[1,1,1,1,1;1,1,0 0 0;1,0 0 0 1; 1 1 1 0 0; 0 0 1 1 1];\r\nn=15;\r\nr=[45\r\n46\r\n47\r\n53\r\n54\r\n55\r\n44\r\n48\r\n51\r\n52\r\n54\r\n55\r\n44\r\n49\r\n50\r\n45\r\n46\r\n49\r\n50\r\n56\r\n47\r\n48\r\n51\r\n56\r\n52\r\n55];\r\nc=[50\r\n50\r\n50\r\n50\r\n50\r\n50\r\n51\r\n51\r\n51\r\n51\r\n51\r\n51\r\n52\r\n52\r\n52\r\n53\r\n53\r\n53\r\n53\r\n53\r\n54\r\n54\r\n54\r\n54\r\n55\r\n55]\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-01-18T20:36:02.000Z","updated_at":"2024-12-11T18:49:03.000Z","published_at":"2020-01-18T21:04:22.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003erefer to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Conway's_Game_of_Life\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003erefer to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003egiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003etoroidal board is no longer applicable.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ei implemented the following assertion process (though its not a gd one) -\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eplace the initial set in a 100 by 100 board from the starting location (50,50).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eso if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eu need to find the state after nth stage.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1244,"title":"PACMAT - G03 Ghosts use minimum path to PACMAT; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT.  This is similar to the actual game. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m PACMAT_Ghosts_003.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4 Nearest Dot Algorithm\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\r\n\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT.  This is similar to the actual game.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m\"\u003ePACMAT_Ghosts_003.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4\"\u003eNearest Dot Algorithm\u003c/a\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n % gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n    gmov=[];\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found      \r\n     for gmovidx=1:4\r\n      if map(gidx+mapdelta(gmovidx))\u003e2,continue;end % avoid ghost jumping\r\n      gmov=gmovidx;\r\n      if gmap(gidx+mapdelta(gmovidx))==gmap(gidx)-1,break;end % valid\r\n      gmov=[];\r\n     end\r\n    end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\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":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T02:27:38.000Z","updated_at":"2026-02-10T13:38:31.000Z","published_at":"2013-02-03T02:46:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT. This is similar to the actual game.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_003.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eNearest Dot Algorithm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":54149,"title":"Determine Poker Hand Winner","description":"Determine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\nwhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. ","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 165.875px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 82.9375px; transform-origin: 407px 82.9375px; vertical-align: baseline; \"\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eDetermine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 40.875px; 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 20.4375px; transform-origin: 404px 20.4375px; 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.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand.Properties.VariableNames={\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e'value'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e'suit'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e};\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function winner = determineWinner(hand1,hand2)\r\n  winner=1;\r\nend","test_suite":"%%\r\ncardValue=repmat(1:13,1,4);\r\ncardSuit=repelem(1:4,13);\r\ncards=5:13;\r\nrng(1);\r\nfor k=1:1000\r\n    r=cards(randi(9));\r\n    r1=randperm(52,2*r);\r\n    hand1{k}=table(cardValue(r1(1:r))',cardSuit(r1(1:r))');\r\n    hand2{k}=table(cardValue(r1(r+1:end))',cardSuit(r1(r+1:end))');\r\n    hand1{k}.Properties.VariableNames={'value','suit'};\r\n    hand2{k}.Properties.VariableNames={'value','suit'};\r\n    winner(k)=determineWinner(hand1{k},hand2{k});\r\nend\r\ntw=find(winner==2);\r\nto=find(winner==1);\r\ntz=find(winner==0);\r\ntw=tw(100:120);\r\nto=to(100:120);\r\nr=randi(1000,1,500);\r\ntw_correct=[177,183,184,185,188,190,191,193,196,197,198,200,201,202,204,205,207,211,212,213,215];\r\nto_correct=[223,226,227,229,230,232,233,235,237,238,240,244,245,247,249,250,251,253,254,257,262];\r\ncorrect=[2     1     2     2     1     2     1     1     2     2];\r\nassert(isequal(correct,winner(r(randi(500,1,10)))));\r\nassert(isequal(sum(winner),1529));\r\nassert(isempty(tz));\r\nassert(isequal(to,to_correct));\r\nassert(isequal(tw,tw_correct));\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":11,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2022-03-15T18:41:24.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-03-07T19:02:11.000Z","updated_at":"2022-03-17T18:07:02.000Z","published_at":"2022-03-07T19:02:11.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eDetermine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\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[hand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\\nhand.Properties.VariableNames={'value','suit'};]]\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:t\u003ewhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"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":59132,"title":"Snakes and Ladders: Average Number of Turns","description":"In this problem, you will play a single-player variant of the classic game Snakes and Ladders. The rules are as follows:\r\nThe player begins on the \"zero\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\r\nEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\r\nIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\r\nIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\r\nThe game ends when the player arrives at the final square.\r\nYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\r\nSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\r\nThere will not be a ladder leading to the final position.\r\nReturn n, the expected number of turns for a player to reach the final square.\r\nAfter having solved this problem, try Problem 59137 Snakes and Ladders: Variable Die.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 440.327px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.989px 220.156px; transform-origin: 406.996px 220.163px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this problem, you will play a single-player variant of the classic game \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Snakes_and_ladders\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSnakes and Ladders\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. The rules are as follows:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 183.963px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 390.994px 91.9744px; transform-origin: 390.994px 91.9815px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe player begins on the \"zero\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.321px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 30.6534px; text-align: left; transform-origin: 362.997px 30.6605px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe game ends when the player arrives at the final square.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 63.0256px; 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: 383.991px 31.5057px; text-align: left; transform-origin: 383.999px 31.5128px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 61.321px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 390.994px 30.6534px; transform-origin: 390.994px 30.6605px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThere will not be a ladder leading to the final position.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eReturn n, the expected number of turns for a player to reach the final square.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eAfter having solved this problem, try \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/59137-snakes-and-ladders-variable-die\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 59137\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eSnakes and Ladders: Variable Die\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function n = snakesNladders(board)\r\n  n = numel(board);\r\nend","test_suite":"%%\r\nfiletext = fileread('snakesNladders.m');\r\nassert(isempty(strfind(filetext,'regexp')))\r\nassert(isempty(strfind(filetext,'assign')))\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'!')))\r\n\r\n%%\r\nboard = [1 2 3 7 5 6 7 2 9];\r\nassert(abs(snakesNladders(board)-8.6)\u003c1e-3)\r\n\r\n%%\r\nboard = [1 2 3 4 5 6 7 8 9 23 11 8 13 14 15 4 69 18 19 32 21 60 23 7 25 26 41 59 6 30 31 32 33 34 35 36 66 38 39 40 41 42 43 9 67 62 47 48 49 50 51 35 53 68 2 56 57 58 59 60 13 62 3 64 65 66 67 68 69 70 71 51 73];\r\nassert(abs(snakesNladders(board)-28.8383)\u003c1e-3)\r\n\r\n%%\r\nboard = [35 2 3 4 14 6 7 8 3 10 7 12 19 14 10 16 17 18 19 17 21 22 31 24 25 26 32 8 29 34 31 32 24 34 35 36];\r\nassert(abs(snakesNladders(board)-14.3318)\u003c1e-3)","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":15521,"edited_by":15521,"edited_at":"2023-11-21T09:39:41.000Z","deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2023-11-21T09:39:41.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-11-03T19:49:40.000Z","updated_at":"2025-12-10T21:42:55.000Z","published_at":"2023-11-03T19:49:40.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eIn this problem, you will play a single-player variant of the classic game \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Snakes_and_ladders\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSnakes and Ladders\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The rules are as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe player begins on the \\\"zero\\\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game ends when the player arrives at the final square.\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\u003eYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere will not be a ladder leading to the final position.\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\u003eReturn n, the expected number of turns for a player to reach the final square.\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\u003eAfter having solved this problem, try \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/59137-snakes-and-ladders-variable-die\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 59137\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSnakes and Ladders: Variable Die\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\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":59137,"title":"Snakes and Ladders: Variable Die","description":"This problem is a sequal to Problem 59132 Snakes and Ladders: Average Number of Turns.\r\nInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 72.017px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.989px 36.0085px; transform-origin: 406.996px 36.0085px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThis problem is a sequal to \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/59132-snakes-and-ladders-average-number-of-moves\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 59132\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eSnakes and Ladders: Average Number of Turns\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42.017px; 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: 383.991px 21.0085px; text-align: left; transform-origin: 383.999px 21.0085px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function n = snakesNladders(board,d)\r\n  n = numel(board) + d;\r\nend","test_suite":"%%\r\nfiletext = fileread('snakesNladders.m');\r\nassert(isempty(strfind(filetext,'regexp')))\r\nassert(isempty(strfind(filetext,'assign')))\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'!')))\r\n\r\n%%\r\nboard = [1 2 3 7 5 6 7 2 9];\r\nassert(abs(snakesNladders(board,8)-9)\u003c1e-3)\r\n\r\n%%\r\nboard = [1 2 3 4 5 6 7 8 9 23 11 8 13 14 15 4 69 18 19 32 21 60 23 7 25 26 41 59 6 30 31 32 33 34 35 36 66 38 39 40 41 42 43 9 67 62 47 48 49 50 51 35 53 68 2 56 57 58 59 60 13 62 3 64 65 66 67 68 69 70 71 51 73];\r\nassert(abs(snakesNladders(board,3)-47.0345)\u003c1e-3)\r\n\r\n%%\r\nboard = [35 2 3 4 14 6 7 8 3 10 7 12 19 14 10 16 17 18 19 17 21 22 31 24 25 26 32 8 29 34 31 32 24 34 35 36];\r\nassert(abs(snakesNladders(board,4)-17.0807)\u003c1e-3)","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":15521,"edited_by":15521,"edited_at":"2023-11-03T19:55:30.000Z","deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-11-03T19:49:44.000Z","updated_at":"2023-11-03T19:55:30.000Z","published_at":"2023-11-03T19:49:44.000Z","restored_at":null,"restored_by":null,"spam":null,"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 problem is a sequal to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/59132-snakes-and-ladders-average-number-of-moves\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 59132\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSnakes and Ladders: Average Number of Turns\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=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"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\"}]}"},{"id":937,"title":"Rubik's Mini Cube: Solve Randomized Cube in 11 Moves or Less; Score is by Time (msec)","description":"The Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\r\n\r\nAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\r\n\r\nThe Performance metric is cumulative Time to Solve 500 cubes (msec).\r\n\r\nA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/minicube2.png\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 24\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\r\n  Output: move_vec (Numeric of moves to solve)\r\n   move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order. \r\n* Scoring is Time in msec to solve 500 cubes\r\n* Cube Moves X, Y, and Z do not constitute a move but are needed in the vector \r\n* A string to numeric value function is provided in the template\r\n* Verifications will be by executing your move vector against the provided Rubik and counting number of face moves.\r\n\r\nThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\r\n\r\n\r\nThe Challenge \u003chttp://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html Challenge 931 Rubik's Mini-Cube\u003e contains a 3D Mini-Cube Viewer for program development.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e \r\n* \u003chttp://peter.stillhq.com/jasmine/rubikscubesolution.html General Cube Info and Middle Layer\u003e\r\n* \u003chttp://www.speedcubing.com/final_layer_print.html SpeedCube Bottom Sequences\u003e\r\n* The site \u003chttp://www.speedcubing.com/CubeSolver/MiniCubeSolver.html MiniCube Solver\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u003c 497 usec, independent of moves on an i5/16GB machine.\r\n\r\n\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\r\n\r\nComing Soon: Matlab Tetris\r\n","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: 1316.98px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 658.5px; transform-origin: 407px 658.5px; vertical-align: baseline; \"\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: 294.65px 7.91667px; transform-origin: 294.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\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: 377.2px 7.91667px; transform-origin: 377.2px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\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: 221.45px 7.91667px; transform-origin: 221.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Performance metric is cumulative Time to Solve 500 cubes (msec).\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: 355.467px 7.91667px; transform-origin: 355.467px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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: 316.733px 7.91667px; transform-origin: 316.733px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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: 380.533px 7.91667px; transform-origin: 380.533px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 138.917px; 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 69.4667px; text-align: center; transform-origin: 384px 69.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 242.917px; 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 121.467px; text-align: center; transform-origin: 384px 121.467px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 113.917px; 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 56.9667px; text-align: center; transform-origin: 384px 56.9667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; 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 71.5167px; transform-origin: 404px 71.5167px; 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: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eInput: (rubik)\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; \"\u003erubik: row vector \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 38.5px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 38.5px 7.91667px; \"\u003eof size 24\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: 304.15px 7.91667px; transform-origin: 304.15px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eOutput: move_vec (Numeric of moves to solve)\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: 284.9px 7.91667px; transform-origin: 284.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 84.7px 7.91667px; transform-origin: 84.7px 7.91667px; \"\u003e move_vec:values 1:27 \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(14, 0, 255); border-block-start-color: rgb(14, 0, 255); border-bottom-color: rgb(14, 0, 255); border-inline-end-color: rgb(14, 0, 255); border-inline-start-color: rgb(14, 0, 255); border-left-color: rgb(14, 0, 255); border-right-color: rgb(14, 0, 255); border-top-color: rgb(14, 0, 255); caret-color: rgb(14, 0, 255); color: rgb(14, 0, 255); column-rule-color: rgb(14, 0, 255); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(14, 0, 255); perspective-origin: 15.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(14, 0, 255); text-emphasis-color: rgb(14, 0, 255); transform-origin: 15.4px 7.91667px; \"\u003efor \u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 127.05px 7.91667px; transform-origin: 127.05px 7.91667px; \"\u003eUFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(196, 0, 0); border-block-start-color: rgb(196, 0, 0); border-bottom-color: rgb(196, 0, 0); border-inline-end-color: rgb(196, 0, 0); border-inline-start-color: rgb(196, 0, 0); border-left-color: rgb(196, 0, 0); border-right-color: rgb(196, 0, 0); border-top-color: rgb(196, 0, 0); caret-color: rgb(196, 0, 0); color: rgb(196, 0, 0); column-rule-color: rgb(196, 0, 0); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(196, 0, 0); perspective-origin: 57.75px 7.91667px; text-decoration: none; text-decoration-color: rgb(196, 0, 0); text-emphasis-color: rgb(196, 0, 0); transform-origin: 57.75px 7.91667px; \"\u003eXYZX'Y'Z'X2Y2Z2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 61.3px; transform-origin: 391px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 29.1833px 7.91667px; transform-origin: 29.1833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 327.667px 7.91667px; transform-origin: 327.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 134.333px 7.91667px; transform-origin: 134.333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eScoring is Time in msec to solve 500 cubes\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 242.583px 7.91667px; transform-origin: 242.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 187.1px 7.91667px; transform-origin: 187.1px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA string to numeric value function is provided in the template\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 355.933px 7.91667px; transform-origin: 355.933px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 374.067px 7.91667px; transform-origin: 374.067px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\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: 45.5333px 7.91667px; transform-origin: 45.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge\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\u003ca target='_blank' href = \"http://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eChallenge 931 Rubik's Mini-Cube\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: 183.883px 7.91667px; transform-origin: 183.883px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e contains a 3D Mini-Cube Viewer for program development.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 61.3px; transform-origin: 391px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://kociemba.org/cube.htm\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCube Theory: 20-moves Any Cube\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://peter.stillhq.com/jasmine/rubikscubesolution.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eGeneral Cube Info and Middle Layer\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://www.speedcubing.com/final_layer_print.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpeedCube Bottom Sequences\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.4333px; text-align: left; transform-origin: 363px 20.4333px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 24.9px 7.91667px; transform-origin: 24.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe site\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 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\u003ca target='_blank' href = \"http://www.speedcubing.com/CubeSolver/MiniCubeSolver.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eMiniCube Solver\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 276.2px 7.91667px; transform-origin: 276.2px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u0026lt; 497 usec, independent of moves on an i5/16GB machine.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 218.883px 7.91667px; transform-origin: 218.883px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\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: 85.9667px 7.91667px; transform-origin: 85.9667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eComing Soon: Matlab Tetris\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function solve_vec = rubik_solve_mini(r)\r\n% Expect Numeric representation of moves (1:27):\r\n% 1:27 are ufdlbr upfpdplpbprp u2f2d2l2b2r2 xyzxpypzpx2y2z2\r\n solve_vec=[]; \r\n\r\n% One path is to use Challenge 931's, Rubik's Mini Cube, initial Cube re-orientation provided in the template, followed by a solving algorithm that needs only RDB type moves\r\n% Loading an external data file is one method. First solve is not timed.\r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\nzcnt=500;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\nasolve=199;\r\nmix=40;\r\n\r\ntic\r\n\r\nfor cube_check=1:zcnt %zcnt\u003c100 %500\r\n %zcnt=zcnt+1;\r\n  r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]);\r\n for i=1:length(mov)  % Ignoring Move Undos since mix=40\r\n   r=r(vf(mov(i),:));\r\n end\r\n\r\n r_reset=r; % Used in assert\r\n\r\n solve_vec=rubik_solve_mini(r);\r\n\r\n for i=1:length(solve_vec) \r\n  r=r(vf(solve_vec(i),:));\r\n end\r\n\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; %   \r\n   lsolve=length(solve_vec);\r\n   if lsolve\u003e11, Pass=0;end % Length Rqmt\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n %  fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   Pass=0;\r\n   r_fail=r_reset;\r\n  % fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n  % fprintf('%i ',r); % Current ending data\r\n  % fprintf('\\n')\r\n  % fprintf('%i ',r_reset); % Starting Cube\r\n  end\r\n\r\nend % while of cubes\r\ntoc\r\n\r\nassert(isequal(Pass,1),sprintf('Max Len=%i \\n',max_solve)); % Length Exception\r\nassert(isequal(Pass,1),sprintf('%i ',r_fail)); % Output Non-Solved Cube Start\r\n\r\n%if Pass\r\n% feval(@assignin,'caller','score',min(100,floor(asolve)));\r\n%end\r\n\r\nfprintf('Moves: Avg %i   Min %i   Max %i\\n',asolve,min_solve,max_solve)\r\n\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\n for jrand=1:40  % Ignoring Move Undos since mix=40\r\n   r=r(vf(randi(18),:));\r\n end\r\n\r\n q=500;\r\n ra=zeros(q,24);\r\n for i=1:q\r\n  for jrand=1:10  % Ignoring Move Undos since base mix=40\r\n    r=r(vf(randi(18),:));\r\n  end\r\n % add 10 new moves to prior vector\r\n  ra(i,:)=r;\r\n end\r\n\r\n% The Time Trail section does not check accuracy, that is done above\r\nt0=clock;\r\nfor i=1:q\r\n solve_vec=rubik_solve_mini(ra(q,:));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n%assert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\nfeval(@assignin,'caller','score',min(2000,floor(dt)));\r\n%   Performance Score","published":true,"deleted":false,"likes_count":5,"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":"2012-09-09T17:48:25.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-09T06:26:08.000Z","updated_at":"2025-11-17T16:25:58.000Z","published_at":"2012-09-09T16:33:58.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\u003eThe Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\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\u003eAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\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\u003eThe Performance metric is cumulative Time to Solve 500 cubes (msec).\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\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId2\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 24\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\\n\\nOutput: move_vec (Numeric of moves to solve)\\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eScoring is Time in msec to solve 500 cubes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA string to numeric value function is provided in the template\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\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\u003eThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\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\u003eThe Challenge\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge 931 Rubik's Mini-Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e contains a 3D Mini-Cube Viewer for program development.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGeneral Cube Info and Middle Layer\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/final_layer_print.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeedCube Bottom Sequences\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe site\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/CubeSolver/MiniCubeSolver.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMiniCube Solver\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u0026lt; 497 usec, independent of moves on an i5/16GB machine.\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\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\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\u003eComing Soon: Matlab Tetris\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.gif\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;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":1254,"title":"PACMAT 06 - Optimized Ghosts, Equal Speed, Inf Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m PACMAT_Interactive.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4 14 Lives Interactive\u003e (MP4)  Best Score seen is 9 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 500 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\"\u003ePACMAT_Interactive.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\"\u003e14 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 9 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 500 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function  [newdir]=PACMAT_solver(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=PACMAT_solver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  %if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 500*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"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":"2013-02-08T04:11:21.000Z","updated_at":"2025-12-03T08:52:46.000Z","published_at":"2013-02-08T04:48:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e14 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 9 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 500 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1255,"title":"PACMAT 07 - Optimized Ghosts, PAC 2X Ghost Speed, 4 Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m PACMAT_Interactive2X.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4 PAC2X 1 Life Interactive\u003e (MP4)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4 Alfonso 398\u003e (MP4)\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves and 4 Lives\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\"\u003ePACMAT_Interactive2X.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\"\u003ePAC2X 1 Life Interactive\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\"\u003eAlfonso 398\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\nmv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 ];\r\nend\r\nmv(1);\r\nmv(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',5000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003c4 \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2 % PAC Speed Multiplier\r\n  if lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n movepac=movepac+1;\r\n [curdir]=PACMAT_2Xsolver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2x\r\nif lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves and lives\u003c4\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 5000,score )) );\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"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":"2013-02-09T03:33:37.000Z","updated_at":"2025-12-03T15:28:58.000Z","published_at":"2013-02-09T04:11:24.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive2X.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePAC2X 1 Life Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso 398\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzfW9Yl0ySFYkRw4J+bPHNZX/CWXX/ADwh/X/Gn+Lv9dbf7h/nWRcX0c+nWlqLK2ie337p4wfMm3HPzknHHQYA4r38zzDFUsXKEJNJf5HqY3F1oV5RjKyRqDxbc/8APCL9f8aP+Esuf+eEX5H/ABrK02+j0+4aWSytrsGNk2XAJUEj7wwRyO1UjXB/auM/nZy/XcR/Mzov+Etuv+eEP5H/ABo/4Sy5/wCeEP6/41l6lfR39wsqWVtaBY1Ty7YEKcD7xyTye/NEd9HHpU1l9itnkkkVxcsD5qAfwqc4wfoaSzXG/wA7H9dr/wA5qDxZdf8APCL9f8aP+Esuf+eEX6/41jWNwtnfQ3DW0NysbhjDOCUfHZsEHH4io5pBJM8gRYwzEhF6L7D2p/2rjP52L67iP52bv/CW3P8Azwi/I/40f8Jbdf8APCL8j/jWXd30dzZWkC2VtC1urK00YO+bJzl8nGR04ApdPv47GO6V7G1uvPhMSmdSTET/ABrgjDD3yKX9q4y3xsPrtf8AnNP/AISy6/54xfr/AI0HxZdf88Iv1/xrngefX61a1K8S/v5bqO0gtFkIxBbgiNOMcAkn3696f9q4z+dh9dxH87Nf/hLbn/nhF+R/xoHiy5/54Rfr/jWV9uj/ALH+wfYbbf53nfasHzcYxsznG3v0zml0u9j07UIrqSytrxUzmC5BMbZBHIBB4znr1FL+1cZvzsPrtf8AnNT/AISy5/54Rfr/AI0f8JZc/wDPCL9f8a54n5qtXd2tzHbIlrBAYYhGWiBBlIJO5sk/NzjjAwBT/tXGfzsPruI/mNf/AIS26/54Rfkf8aB4tuSQPIi/I/41l2d9HaW13C9lbXBuI9iyTAloec7kwRg/UGqQ+8PrTWa4y/xsf13Efzs9NjbdGjnqygn8aytb1eXTDCI0RvMz97NacH+pi/3F/lXN+LvvWv0avr8zr1KWBdSDs9D38bUnDDOcXroQjxZc/wDPCL8j/jR/wltz/wA8IvyP+NZWmXsen3onksra8AVl8m5BKHIxngg5HXr1qlXx/wDauM/nZ8/9dxH8x0R8WXP/ADwh/X/Gj/hLLn/nhD+R/wAaytRvo7+WJ0sra1EcSxlbcEByP4jkn5j36Cltr6ODTry1aytpXuNm2eQHzIdpz8hBxz0OQaX9q4y3xsPrtf8AnNQeLLn/AJ4Rfkf8aD4suf8AnhF+R/xrFs51t72Gd4I51jdXMUoJR8HOGweh+oovJ1ub2adYIoFkcuIogQiZOdq5OcD6mn/auM252H12v/MbX/CW3P8Azwi/I/40DxZc/wDPCH9f8ay7m+SfTrO1Wytont9+6eMHzJtxyN5Jxx0GAOKNNvo7C5aWSytrsGNk2XAJUZH3hgjkdu1L+1cZb42H13Efzmp/wltz/wA8IvyP+NB8WXP/ADwi/I/41ztXdRvo7+5WZLK2tAsap5dspCnA+8ck8nvz1p/2rjP52H13EfzGr/wllz/zwh/X/Gj/AISy5/54Q/r/AI1lpfRppU1kbK2d5JFcXLA+amP4VOcYP0NRWNytnew3DW0NysbhjDMCUfHZsEHH40f2rjf52P67iP5zZ/4Sy5/54Q/kf8aP+Etuv+feL8j/AI1hTSebM8iosasxYInRc9h7VZu76O5srO3SytoGt1ZWmiBDzZOcvk4JHTgDij+1cZ/OxfXcR/Man/CWXX/PvD+v+NH/AAlt1/zwi/I/41l2N9HaR3SPZW1yZ4jGGmUkxE/xJgjDfXIqlmj+1cZf42H13Efzs6IeLLokDyIvyP8AjXVId8aPz8yg8fSvP7+8S/1KS6jtILRZCCIbcEInGOAST29a7+H/AI94v9xf5V9DkGLrYhz9tK9rHq5XXqVXLndzmPFv+ut/9w/zrIuBpw06za3kuWvTv+0rIqiNefl2EHJ465Awa1/F3+vtv9w/zrIuNOe20+zvWntnS637Y0mDSJtOPnUcrntnqK8DOLfXZ37/AKHmY/8A3mQ3TLP7ffR2+/Zvz82M9Bmt4+ER2vD/AN+//r1leHf+Q3B9G/ka7qvWyXLsNiaDnVjdp+fkd2XYSlWpOU1d3OZ/4RBf+fw/9+//AK9H/CIL/wA/h/79/wD166aiva/sPBfyfi/8z0P7Nw38v4s5hvCQVSfthOAT/q//AK9cwwwxHpXpkn+rf/dP8q80f7xHvXzme4KjhXD2Kte/6Hk5nhqdBx9mrXLl0unfYrM2kly10Vb7UsqqEVs8bCDkjHqBzRpdiNRvVtzJs3A84zRdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kNRf7rfyryMFCNSvCEtU3+pw0IKVWMZbNmj/wAIgv8Az+H/AL9//Xo/4RBf+fw/9+//AK9dNRX3X9h4L+T8X/mfS/2bhv5fxZzP/CIL/wA/h/79/wD16P8AhEF/5/D/AN+//r101FL+w8D/ACfi/wDMX9m4b+X8zmv+ERGP+Pw/9+//AK9Ymq2H9nXhg8zfwGzjHWvQK4vxT/yGD/uL/KvIznLsNhsOp0o2d+7ODMcHRo0lKCs7lKyXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9a+WjbmPEPS4P9RF/uL/Kua8Xfetfo1dLB/qIv9xf5VzXi771r9Gr7rN/+Rc/l+aPp8f8A7o/kYumJp7XoXVJLiO12tlrZVZ8444JAxnFUqu6Zp0mqXotY57aElWbfczCNBgZ6nv8A1qlXwatc+YOisvDQvLOK4+1bfMGcbM/1qf8A4RFf+fw/9+//AK9a+h/8gW2/3T/M1oV93hcnwc6EJyhq0urPpqGX4edOMnHVrzOY/wCEQX/n8P8A37/+vR/wiC/8/h/79/8A166aiuj+w8F/J+L/AMzT+zcN/L+LOZ/4RFf+fw/9+/8A69RXfhgWtnLcfa92xd2CmM/rXV1T1fnRrv8A3P61z4rJ8HCjKUYapd2Z1svw8acpKOqXmeedDV3Ul09LlRpsly8PlqWNwqq2/HzABSRjPTvVLvV3UtPfTLlYHntpi0aybreYSKMjOCR39R2r4V7nzJY0fSf7VeRTL5ewZztzmtT/AIRFf+fw/wDfv/69M8Jf665/3B/Oupr67KcrwuIwqqVI3fqz38DgqNWipzV2cz/wiC/8/h/79/8A16P+EQX/AJ/D/wB+/wD69dNRXqf2Hgv5Pxf+Z1/2bhv5fxZyF/4cFhZSXAud+zsUxnnHrWD/ABV3fiD/AJAdx9F/9CFcGetfLZ3haWGrqFJWVjxcxowo1VGCsrFzUFsV1KRdNeeS0yPLa4ULJjHcKSOue9d/B/x7xf7i/wAq4C/sW03UZLR5oJmjIzJbyiRDxnhhwa7+D/j3i/3F/lXfwxbmn6I6sn+KfyOY8Xf662/3D/OsB7aaKKOZ4nWOTOxipAbHXB71v+Lv9dbf7h/nWLPqV5c2VtZT3Mslra7vIiZsrHuOW2jtk15Ocf77P1/Q4cw/3mRa8O/8hu3/AOBf+gmu6z715irFTx1pTIx/iP5105bm/wBSpOnyXu77muEzD6tBx5b3PTc+9GfevMvMb+8fzo8xv7x/OvQ/1n/6d/j/AMA6/wC2v7n4/wDAPS5D+7fn+E15o/3z9aN7/wB4/nSV5OZ5l9ecXy2t5nDjMZ9ZadrWJZLeaKOOSSJ1jkGUZlIDfQ960vDQ/wCJzH/ut/KqVxqV5d2lta3FzLLBaqVgjY5EYJyQPTJqsCRyDiuDDVXRqRqNbO5y0p+zqKfY9Nz70Z968y8xv7x/OjzG/vH86+l/1n/6d/j/AMA9j+2n/J+P/APTc+9GfevMvMb+8fzo8xv7x/Oj/Wf/AKd/j/wA/tp/yfj/AMA9Nz71xnin/kL/APAF/lWL5jf3j+dISScnk1wZjnP1ykqfJbW+5y4vMPrEOTlsSR280ySPHE7rGMuVUkKPU+lRr94fWrVrqV5ZQXMFrcSxRXKeXOiNgSL1wfUVUrw1ueaelwn/AEaLn+Bf5Vzfi771r9G/pXNB2/vH86QsT1JNe9jM6+sYf2HJbbr/AMA9PEZj7Wl7Llt8ySC3muZPLgieSTBO1FJOB14FRd6t2Go3mlXQurC5ltpwpUSRtg4IwR+VVK8HW55h6Bov/IGtf90/zNXyRnrXmXmOBjcaN7f3j+dfTUOIvZU40/Z3srb/APAPZp5tyQUeS9vP/gHpufejPvXmXmN/eP50eY394/nWv+s//Tv8f+AX/bX9z8f+Aem5HrVPVv8AkD3X+5/WvPt7f3j+dG9iPvGs63EXtacoeztdW3/4BFTN+eDjyb+Y3HNSzW81s4SaN42IDAOpBweh5qGrd/qV5qk6zX1zLcSqixh5GyQo4A+gr5jU8Y3PCP8Arbn/AHB/Oupzx1rzEOR0JFLvb+8fzr38Bnf1SiqXJe3n/wAA9TC5l7Cmoct/mem596M+9eZeY394/nR5jf3j+ddn+s//AE7/AB/4B0f21/c/H/gHd6//AMgS457D+YrgzS727kmkzXiZljvrtVVOW2ljzcXifrM1O1iWSGW3n8qaN45FPKOMEfhXo0P/AB7xf7i/yrz69v7vU797y+uJLi5kILyyHLNgY5P0Fegw/wDHvF/uL/KvX4a3qX8v1PQyf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/AHD/ADrIuF05dPtDbS3LXp3/AGlXVRGvPy7CDk8dcgYNeVnC/wBtn6/ocOYf7zINNvo7C5aWSytrsGNk8u4BKjI+8MEcjt2qkTVvTbP7ffR2+/ZvzzjPQVvHwguf+P0/9+//AK9ZYbLsRiYudKN1tuRRwlatHmgrow9Rvo7+5WZLK2tAI1Ty7dSFOBjcck8nvzRHfRx6TNZGytneSRXFywJlTH8KnOMH6Gtv/hEB/wA/p/79/wD16P8AhEF/5/T/AN+//r1v/YeN25PxX+Zr/Z2J/l/I5+xuVs76G4a3huVjYMYZgSj47Ngg4/EVHNIsszyKioGYsEXovsPaujbwiqqT9sPAz/q//r1zLDaSK5cTgq2Fa9rG1zCth6lCyqK1y5d30dzZWlullbQtbqytNECHmyc5fJIJHTgCnafqEdhHdB7C1ujPEYlM6sTET/GuCPmHvkU27TTlsrQ2kly10Vb7SsqqEVs8bCDkjHqBSaXY/wBo3q25k2ZBOcZ6Vz06TqtQitWzOMXKXKt2Ux1q3qV5Hf38t1HaQWiyYIgtwRGnGOAST79a3R4QH/P4f+/f/wBeudvLf7NdywZ3bGK59a6sTl9fDJSqxtfzNa2Fq0UnUVrk/wBuj/sf7B9itvM8/wA37XtPm4xjZnONvfpnPejS76PTtQjupLK2vFTdmC5BMbZBHIBB469eoo26b/Y+7zLn+0/Pxs2L5Xlbeuc53Z7YxioLS3+03cUOdvmMFz9a44x5vdXUwSbdkQ556Vau7tLmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBW7/wAIgP8An8P/AH7/APr0v/CIL/z+n/v3/wDXr1f7Exu/J+K/zO3+zsT/AC/kYlnfx2ltdwtZW1wbiPYskwJaHnO5MEYP1zVaGRY5kkZFcKwJRujY7H2rpP8AhEF/5/T/AN+//r0f8Igv/P6f+/f/ANej+xMb/J+K/wAw/s3E/wAv5GBqF2l7fzXKWsFqsjbhDACET2AJJx+NPe9jfS47P7Jbq6SNIbkA+awIA2k5xtGM9O9bn/CIL/z+n/v3/wDXo/4RBf8An9P/AH7/APr0v7Exv8n4r/MP7OxP8v5GHpl9Hp96LiSytrwBWXybkEocjGeCDkdevWqVdT/wiC/8/p/79/8A16P+EQX/AJ/T/wB+/wD69P8AsTG/yfiv8w/s7E/y/kYmo30d/JE6WVtaiOJYytuCA5H8RyT8x79BRbXyW+nXdq1lbTPcbNs7g+ZDtOfkIOOehyDxW3/wiA/5/T/37/8Ar1S1XQBptqJ/tHmZbbjbisquUYqlTcpwtFea/wAyZ4GvTi5yjZL0MuznW3vYZ2ginWNw5ilBKPg5w2CDg/UUXk63V3NOkEUCyOWEUQIRMnOFyScD6mizFu13CLtpVti4EpiALhc87QeCcep60Xi2y3cwtGla2DkRNKAHK543AHAOPQmvP6nGTXN9HcadaWq2VtE9vv3ToD5k245G8k446DAHFGm30en3LSyWVteAoybLgEqMj7wwRyO3ar2laANStDP9o8vDbcbc/wCetT3nhdbWyluPtZby13Y2Yz+td0crxEqPtVH3d9zqjg67h7RR0Ocq7qV9Hf3Kyx2VtZhY1Ty7dSFOBjcck8nvzVLHNXdSXT1uFGmyXMkPlruNwqq2/HzYCk8Z6d64XucoqX0a6XNZfY7Z3kkVxcsD5qAfwqc4wfoaisblbS+huHt4blY3DGGYEo+OzYIOPxFXNH0j+1WlUy+XsGc7c5rU/wCEQH/P7/5D/wDr130MrxNeHPTjdPzR1UsHXqx5oRujm5pFlmeRUVAzEhE6L7D2qzd38dzZWdulnbwG3VlaaIEPNk5y+TgkdOAOK2/+EQH/AD+n/v3/APXo/wCEQX/n9P8A37/+vW39iY1/Y/Ff5mn9nYn+X8jEsr6O0iukaytrkzxGMNMCTET/ABJgj5vrkVS9K6DUPDa2NlJcfaS+zHylMZ5x61gY+b2rixGFq4aXLVVmc9ajUoy5aisy3qF5Hf6lJdR2kFokhBEFuCETjHAJJ7Z69676H/j3i/3F/lXA6gtiuoyLpsk8lmCPLa4VVkI9wCR1z3rvof8Aj3i/3F/lX0HDHxTt2R6mT/FP5HM+Lh/pFv8A7p/nWPcaa9tptnetPbOt1v2xxzK0ibTj51HK57Z6itjxd/x8W3+6f51gPbzRwxyvE6xyZ2OVIDY64PevJzi/12fr+hw5h/vMi3otxFa6rDNM+xFzlsZxwa6z/hINL/5+h/3yf8K4iGCa5k2QxPI+NxCKWOO54qLNVgs2rYOm6dNK2+v/AA48NjqmHi4wS1O8/wCEg0v/AJ+h/wB8t/hR/wAJBpn/AD9D/vlv8K4eaCa2cJNG8bEAgOpBIPQ80CCZoWnETmJSFMm07QfQnpXb/rJif5V+P+Z0f2vX7L+vmdu+vaYysouRkgj7p/wrhG5YntmpIo5J5FjjRpHY4CqMkn0ApjKysVYbSDgg9q87HZjUxri6iWnY5MTi54izmti3dadJaWVndNPbOt0rMqRyhnTBxhwOVP17Vc8M/wDIZj/3W/lWXJbzRRxySRuscgJRmUgNj0PetPwz/wAhmP8A3W/lWeXf71Tv3X5k4X+PD1R24rz3V/8AkLXX/XQ/zr0IV57q/wDyFrr/AK6H+dfS8S/woep7Gc/BEP7Of+x/7T8+22ef5Hk+cPNzjO7Z129t3TNN0+VYdQgkc4VZASfQZqL7PN9m+0eU/k7tvmbTt3dcZ9fakggmuZRHBE8kh6KilifwFfIQlyS5ux4EXZ3O4/4SDS/+fof98H/Cj/hINL/5+h/3y3+FcFUskMkKoZI2QOu5CRjcPUeor3v9Y8V/Kvx/zPU/tev2X9fM7j/hINL/AOfof98t/hR/wkGmHj7UP++D/hXERwTTK7xxu6xjc5VchR6n0qMfeH1priPFfyr8f8w/tev2X9fM9NUhlDDkEZBqtd6hbWJQXEnllx8vyk5qaD/j2i/3F/lXN+Lvv2v0b+lfSY/Fzw+EdaK10PYxVeVKh7SK1NX/AISDS/8An6H/AHy3+FH/AAkGmf8AP0P++W/wrh4YJrmTy4I3kfBO1FJPvwKir5v/AFkxP8q/H/M8f+16/Zf18zvv7f0zH/H0P++W/wAKytf1SyvNNEUE29/MBwFI4x71zk0E1syiaN4yw3AOpGQehGe1CQTSQySrE7Rx43uFJC56ZPasMRntevSdOSVn/Xczq5nVqwcJJWY6zt2vLyG1V4o2lcIHlcKi5OMsTwB70Xlu1neTWzPFI0TlC8Th1bBxlSOCPeoo45JZFjjVndjhVUZJJ7AUSxyRStHIjI6nBVhgg+hFeL1POOx8Lf8AIJb/AK6n+Qq/q/8AyB7v/rn/AFqh4W/5BDf9dT/IVf1f/kD3f/XP+tfeYX/kVf8AbrPp6H+4fJnnh61d1LT30y5WCSe2mLRrJut5hIoyM4JHQ+o6iqXepZoJrdwk0TxsQGAdSDg9DzXwb3PmDY8OX1vYvO1xJsDKAOCc810H/CQaZ/z9D/vhv8K4gW8zQtOsTmJTgvtO0H0JpsUck0qxxI0jscKqjJJ9hXsYTOq+FpKlBJpdzvoZjVowUI2sdz/wkGl/8/Q/75b/AAo/4SDS/wDn6H/fLf4VwjKyMVYYIJBB7VI9vNFHHJJG6xyDKMykBvoe9dP+smK7L8f8zb+16/Zf18zqdX1exutKmhhn3O2MDafWuR71LHBLOrmKJ3WNdzlVJ2j1PoKhrysbjamMqe0qJJrTQ4sTiZ4iXNLcu6hYtpmpSWjzQTNGQDJbyiRDxnhhwa7+D/j3i/3F/lXnMkElvP5U0bRyKRlHGCPwNejQf8e8X+4v8q93hj4p+iPSyf4p/I5jxd/x8W/+4f51izX95cWdvaTXMr29vu8mJnJSPccttHQZPpXd3en218ym4i3lRgckYqt/YGmY/wCPUf8AfTf41ePyPEYjESqxas/67F4rLatWtKcWrM4uzvrzTpjNZ3M1vIyFC8TlSVPBGR2NV67z/hH9L/59R/303+NH/CP6X/z6j/vpv8a5P9W8V3X4/wCRz/2RX7r+vkcZeX15qMyzXtxLcSqgQPK5YhRwBk9hQl/eR2ElitzKtpK4d4Q52Mw6EjoSK7P+wNM/59R/323+NH9gaZ/z6j/vtv8AGl/q3idrx/H/ACD+yK3df18jibW5uLK5jubWaSGeIhkkjbaykdCCOaZJI0sjSSMXdiWZickk9Sa7htB0xVZhbDIBI+Y/41wrcMR2zXn47LqmCcfaNO/Y5MThJ4eym9yxPfXdzbW9tPcyyw24Kwxu5KxgnJCjoAT6Ve8M/wDIZi/3W/lVW7vo7mys4EsraFrdWVpowd82TnL5OMjpwBVrw1/yGYv91v5Vnl3+9U/X9ScL/Hh6o7ivPdX/AOQtdf8AXQ/zr0GqEui6fPI0klvl2OSdx619nm+Aq4yEY02tO59Dj8LPERSg9jift95/Z39n/aZvsfmed5G8+Xvxjdt6Zxxn0osr28027S6sriW2uEzslhcoy5GDgjnoSK7P+wNM/wCfUf8AfTf40f2Bpn/PqP8Avtv8a8D/AFbxO14/j/keX/ZFbuv6+RwVWZ7y5ulhS4uJJVgjEUQdifLTJIUZ6DJPHvXaf8I/pef+PUf99t/jXMa/aQ2WomKBNibQcZz2965MblFbCU/aVGreRz4jAVKEeadinb393aQzw291NFFcJsmSNyokXrhgOo+tVl+8PrTaVfvD615a3OJHpkH+oi/3F/lXNeLvvWv0aulg/wCPeL/cX+Vc14u+9a/Rv6V91m//ACLn8vzR9PmH+6P5GDZX95p1yLiyupbaYAqJIXKNgjBGR6iqxpKUda+EPmC3eX15fvG93cy3DRxrGhlcsVQdFGew9KIb+7t7S4tIbmWO2udvnRK5CSbTldw6HB9a6fS9GsLjTIJZYNzupJO488mrf9gaZ/z6j/vpv8a9ylw/iKlOM01Z6/1oenDK604qaa1OIt55rS5juIJHimiYOkiHDKw5BBHQii4nmu7mS4nkeWaVi7yOcszHkkk9TXb/ANgaZ/z6j/vtv8aP7A0z/n1H/fbf41p/q3it7r8f8iv7Ir91/XyK/hb/AJBLY/56n+Qq9q//ACBrvP8Ac/rU9tawWcfl26bEznGSeag1f/kD3ef7n9a+ijQlQy9057qLPWVN0sI4S3SZ553qze395qMyzXtzNcSqgQPK5YhRwBk9hVbuau6lfR39wsqWVtaBY1Ty7cEKSB945J5Pfmvz17nyg1b+8jsZLFLmVbSVw7whzsZh0JHQkVHbXU9lcx3NrNJDPEwaOSNtrKR0II6Vr+HbG2vnnW4j3hQCOSMc+1b/APYGmf8APqP++m/xr18JktbFUvawaSfc76GXVa0OeLVmcNJJJNI0kjF5HJZmY5JJ6k1NPf3lzbW9vPcyyQ26lYY3clYwTkhQemT6V2f9gaX/AM+o/wC+m/xpP7A0v/n1H/fTf410/wCrmJ7r8f8AI2/siv3X9fI422v7yyjnS1uZYUuE8qYRuVEiHqrY6j2NVa73/hH9L/59R/303+NH/CP6X/z6j/vpv8af+rmKvuvx/wAg/sev3X9fI4y6vbrULxrq9uJbi4kI3yysWZscck8npXoUP/HvF/uL/KqI0HTQf+PUf99H/GtALtAUdAMCvYyfLKuCcue2ttj0MBgqmHcuZ7i0UUV756gUUUUAFFFFADZP9W/+6f5V5m/3j9a9Mk/1b/7p/lXmb/eP1r5Hiben8/0PBzneHzLt2unCxs2tJLlroq32pZVUIrZ42EHJGPUDmrPhn/kMxf7rfyqtdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kMxf7rfyrwMtt9ap27r8zzML/Hh6o7esC78Ti1u5IDa7vLYrnf6fhXQA8V57q//IWuv+uh/nX12eYythqcZUna7PezLEVKMYum7XNv/hLx/wA+Z/7+f/Wo/wCEvX/nzP8A38/+tXK0V85/bWO/n/Bf5Hj/ANpYn+b8EdUPF65/48z/AN/P/rVi6rqH9o3nniPZwBjOelUKK58RmOJxEOSrK6+RlVxdatHlm7oSlBwQaSiuE5jqU8WhI1T7GTtAGfM/+tWZrGr/ANq+UfJ8vywf4s5rKorvrZlia1P2VSV4+iOqpjK1SHJKV0JRRRXAcp0dl4mFlZRW/wBm3eWMZ34z+lT/APCXr/z6H/v5/wDWrl6QivThm+MhFRjOyXkjsjj8RFKKlovQ6n/hLx/z5n/v5/8AWo/4S8f8+Z/7+f8A1q5Wiq/trHfz/giv7SxP834I9E0zUP7StGnCeWN23Gc+n+NGr/8AIGu/9z+tUPCv/IJb/rqf5Cr+r/8AIHu/+uf9a+rp1Z1ctdSbu3FnuQnKpg3OTu2jzzuau6kunpcKNNkuZIfLXcbhVVt+PmwFJ4z0ql3q7qWnvplysDz20xaNZN1vMJFGRnBI7+o7V+fvc+VNnwj/AK65/wBwfzrqa5bwj/rrn/cH866mvv8AIf8Aco/P8z6nLP8AdkFFFFeyegFFFFABRRRQAUUUUAFFFFABRRRQA2T/AFb/AO6f5V5m/wB9vrXpkn+rf/dP8q80k++31r5Hib4qfz/Q8HOd4fMfJbzRRpJJE6xyAlGZSA30PetPw1/yGY/91v5VRnv7u5tre3nuZZIbcFYY3clYwTkhR2yfSr3hr/kMx/7rfyrwMu/3qnfuvzPMwv8AHh6nbivPdX/5C11/10P869CFee6v/wAha6/66H+dfTcS/wAOHqexnPwRKNOAJOBSVd0of8TS1/66r/OvkYR5pKPc8GKu0ipsb+6fyo2N/dNdnqeq3FpqMdrbwxuz4xu45NMutS1WygM0trAEBxkHP9a76+GwlGp7KdWz/wAP/BPQ+oK0mm2o7+7t+JxxUjqDSdK2L/Xpr+1MDxRqpOcqDmseuOtCnGVqcrr0scFRRi7Rd0JRRRWJA4Ak8DNO8th1U/lUtldNZ3STooLKcgN0rbTxTdSMEW3hyeBwf8a7MPRo1NJyafpf9TanGk1ecrfI57Y390/lQUYDJBArpZfEV7GuWtoAM9s/41NrUxuPDkEzABncEgdO9ddXLIQjL3neKvZxt+pqqNKcZSpzvby/4JyNFFFeQch2vhb/AJBDf9dT/IVf1f8A5A93/wBc/wCtUPC3/IJb/rqf5Cr+r/8AIHu/9z+tfeYX/kVf9us+no/7j8meed6lmt5rdwk0TxsQGAdSDg9DzUR61Zvb+81GZZr25luJVQIHlcsQo4Ayewr4PqfMG54R/wBdc/7g/nXVVyvhH/XXP+4P511Vff5D/uUfn+Z9Tln+7IKKKK9k9AKKKKACiiigDhf+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJor8y+vYr/AJ+P72fG/Wa387+81v8AhI9U/wCfgf8AfC/4Uf8ACR6p/wA/A/74X/Csmij69iv+fj+9h9Zrfzv7zW/4SPVP+fgf98L/AIUf8JHqn/PwP++F/wAKyaKPr2K/5+P72H1mt/O/vNceItTwVNxwevyD/Cstmyee9NorKrXqVf4km7dzOdSc/idy9d30dxZWlutlbwtbqytNGCHmyc5fJIJHTgCorS8lspxNA21wMZxmrF9/ZP8AZ9h9h+1fbdjfbfO2+Xuz8vl45xjrnvWdWNOTjrHRoSbTujWHiTU/+fgf98L/AIVnTTPPK0kh3MxyT71FRW1XEVaqSqSb9WVOrOfxSuFXdJ/5Ctr/ANdV/mKpdqu6T/yFbX/rqv8AMUqH8WPqKn8aNrWZEi8TWzu21F2kk+mam12/tLjTGjiuEkbcOAaz/FR/4mi/9cxWHmrzWip42U3umevLMqmHVahFJqe42iiiuc8UKKKKAFqW3bZMpPAB5NQ0orSlUdOamumomrqxo3k0bwgK4Jz0Fa+of8inafUf1rmB1FdPqP8AyKdp9R/WvdeOnjpVqs1Z8vQ68HFRp1Euxy1FFFfPHKaFpq95ZQmK3l2ITnG0H+dSTa7qE8DwyTZRhhhtHNZlFdCxVdR5FN29TVVqijyqTsFXdSvo7+5WWOytrQLGqeXbqQpwPvHJPJ781SrQ1f8Asr7Wn9ji6+zeUm77Vt3eZj5sbeMZ6d65nuZEVnqN1YMxtpNhcc8A5/Orf/CR6n/z8D/vhf8ACsmjNdNPFV6ceWE2l6msa9SKtGTSNX/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmir+vYr/n4/vZX1mt/O/vNb/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmij69iv8An4/vYfWa387+81v+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJozR9exX/Px/ew+s1v5395rf8ACOan/wA8B/32v+NH/COan/zwH/fa/wCNd1RX1f8Aq3hf5pfh/ke5/Y9Hu/6+Rwv/AAjmp/8APAf99r/jR/wjmp/88B/32v8AjXdUUf6t4X+aX4f5B/Y9Hu/6+Rwv/COan/zwH/fa/wCNH/COan/z7j/vtf8AGu6oo/1bwv8ANL8P8g/sej3f9fI4X/hHtTwSbfoM/fH+NZZGDg9a9Nk/1b/7p/lXmTn5z9a8POMup4JwVNvXuebmGEhhnFRd7l680uazsbK7klgeO8VmRY5Qzrg4O4Dlfx61BaWk17OIYF3OQSBnFNkgmijjkkidI5ASjMpAb6HvWn4Z/wCQ1H/ut/KvMwlJVa0acno3Y46MFUqRg+pGPDmp/wDPuP8Avtf8azpont5njkGHQkEe9emV57q//IWuv+uh/nXr5vldLBwjKm279zux+Chh4pxd7lHtV3Sf+Qra/wDXVf5iqParuk/8hW2/66r/ADrxqH8WPqefT+NG/qMMdz4vsIJk3RySRqynuC3Ire8ZeHdJ07w9JcWlkkUolRQwLHAOc9TXNa/PLa69Dcwj95EFdSRkZByKj1XxZq+sWJtLvyzEWDELFg5FRnFCvPMOeDtFPU7q84RqVFJatnPUU7Y390/lRsb+6fypcrPOsNop2xv7p/KjY390/lT5WFhDWv4atobzxHYW9wgeGSZQynoRnpWVsYfwn8qs2N3Pp19DdwKPNhYOu5cjIqKkJuLUd2RVhKUJKO7R6H498O6TpegJPY2KQSmcKWBJ4wTjk/SuZ1H/AJFO0/3h/WotZ8Xavr1ktpe+WYlcP8kW05AI/rUuo8eE7TI7j+tdOR0atHC1Y1nd2/VDyWhXoYWpCu7yt69TlqKKK5yjQtdIvb2IyW8W9AcZ3Ac1JNoWoQQPNJBhEGSdwrofCv8AyCX/AOup/kKv6vxo11/uf1r6Wjk9CeC+sNu9rnsU8vpyw3tW3e1zzyr2q6XLpV0tvNNBI7RrJmCQSKAwyBkd/aqPepZoJrdwk0TxMQGAdSDg9DzXzXU8cms9Oub9mFvHvKDJ5AxVr/hHNT/54D/vsf41o+Ef9fc/7g/nXU9q+ny3JqGKw6qzbTf9dj2cHl1OtSU5N3OF/wCEc1P/AJ9x/wB9r/jR/wAI5qf/ADwH/fa/413VFd/+reF/ml+H+R1f2PR7v+vkcL/wjmp/88B/32v+NH/COan/AM8B/wB9r/jXdUUf6t4X+aX4f5B/Y9Hu/wCvkcL/AMI5qf8AzwH/AH2v+NH/AAjmp/8APAf99r/jXdUUf6t4X+aX4f5B/Y9Hu/6+QUUUV9EesFFFFABRRRQA2T/Vv/un+VeZv94/WvTJP9W/+6f5V5m/3j9a+R4m+Kn8/wBDwc53h8y1c6jeXdpbWtxcySwWoKwRs2VjBOSB6ZNXfDX/ACGYv91v5VBfaoL3TrC0+xWkP2NGXzYY9rzZOcyH+IjoPQVP4a/5DMX+638q8DLdMTT06r8zzML/AB4eqO3Fee6v/wAha6/66H+dehCvPdX/AOQtdf8AXQ/zr6biX+FD1PYzn4IlKpradra4jmHJRgwB9qgpa+QTaaaPATad0dF/wllz/wA8IfyP+NJ/wllx/wA+8X5H/Gudort/tPF/zs6frtf+Y6L/AISy4/54Q/kf8aP+EsuP+eEP5H/Gudoo/tLFfzsX1yv/ADHRf8JZcf8APCH8j/jR/wAJZcf88IfyP+Nc7RzR/aWK/nYfXK/8x0X/AAllx/zwh/I/40f8JZcf88IfyP8AjXO0Uf2li/52H1yv/MdF/wAJZcf88IfyP+NVdR12fUbcQPGiKG3fKDWQKO9RPH4mpFwlJ2YpYqtJcspaMSiiiuM5ztfC3/IIb/rqf5Cr+r/8ge7/ANz+tUPC3/IIb/rqf5Cr+r/8ge7/ANz+tfeYX/kVf9us+nof7h8meed6tX+o3mqTrPfXMtxKqLGHkbJCjgD6CqvetDV9T/ta7ScWVpabYkj8u1i2KdoxuI9T3Pc18G99j5g1fCP+uuf9wfzrqq5Xwj/rrn/cH866qvv8h/3KPz/M+pyz/dkFFFFeyegFFFFABRRRQAUVWvNQtbBlFxLsLDI4JzVc6/pZ/wCXof8AfLf4VyzxuHg3GU0n6oxliKUW1KST9TRorN/t/TP+fof98N/hR/b+mf8AP0P++W/wqfr+F/5+L70L61Q/nX3mlRWb/b+mf8/Q/wC+W/wpf7f0z/n6H/fLf4UfX8L/AM/F96D61Q/nX3mhIP3T/wC6f5V5m/3j9a7pte0xkYfaRkggfKf8K4V+WJHrXy/ENenVdP2ck7X2+R4ubVYVHHkdy5drpwsrQ2kly10Vb7UsqqEVs8bCDkjHqBzVrw1/yGov91v5VVu9OktLK0umntnF0rMqRShnTBxhwOVP16iptCuYbTU0lnfYmDk4z2rxcBKMcRCTeif6nnYZqNaLeyZ3lee6v/yFrr/ro3867Aa/ph/5eh/3yf8ACuN1GVZ9RnljO5HckH1Ga+g4gxFKtTh7OSdn0Z6ua1qc4x5JXKdT2cH2m7igzt8xgufTNQVb06VYb+CRzhFkBJ9BmvmaSTmr7HiwSckmb3/CIL/z+H/v3/8AXo/4RBf+fw/9+/8A69av9v6X/wA/Q/74b/Cj+39L/wCfof8AfLf4V9isHk/df+Bf8E+h+r5f3X3/APBMr/hEF/5/D/37/wDr0f8ACIL/AM/h/wC/f/161f7f0v8A5+h/3y3+FH9v6YT/AMfQ/wC+W/wp/U8n7r/wL/gh9Wy/uvv/AOCZX/CIL/z+H/v3/wDXo/4RBf8An8P/AH7/APr10wbcoK8gjINV7vULax2faZNm/pwT/Kt55Tl0I88o2Xq/8zWWAwkVeSsvVmD/AMIgv/P4f+/f/wBej/hEF/5/D/37/wDr1q/2/pf/AD9D/vlv8KP7f0v/AJ+h/wB8t/hWH1PJ+6/8C/4Jl9Xy/uvv/wCCZf8AwiC/8/h/79//AF6o6roA020E4uPM+bbjbj+tdF/b+mf8/Q/75b/CsvX9Vs7vThFBNvfeDjaRxg1y43C5ZGhJ0muZba/8ExxNDBRpSdNq/qcpRRRXyZ4R2vhb/kEt/wBdT/IVf1f/AJA13/uf1rF0DVLOzsGinm2Nv3Y2k8YFW9R1qwuNOuIo59zsmFG019rhsVQWW8jmk7PqfRUa9JYPlclexxfc1d1JdPS4UabLcyQ+Wu43Cqrb8fNgKTxnpVKrupae+mXKwPPbTFo1k3W8wkUAjOCR0PqO1fFO1z542PCP+uuf9wfzrqq47w5e21jJO1xJsDKAOCc810H9v6YTxdD/AL5b/CvtslxdCng4xnNJ67s+iy6vShQSlJJmjRWb/b+mf8/Q/wC+W/wo/t/TP+fof98t/hXrfX8L/wA/F96O/wCtUP5195pUVm/2/pn/AD9D/vlv8KX+39M/5+h/3y3+FH1/C/8APxfeg+tUP5195o0VnDXtMJwLoZ/3G/wrRUhlDA5BGRWlPE0qt/ZyTt2ZcKsKnwO5yni7/XW3+4f51gvbTRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+lfA5x/vs/X9D5bMP95kRQ281y5SCN5GALEIpJx3PFRVZs7+706YzWVzLbyshQvE5UlTwRkdjVavNOMlmt5rZwk0bxsQCA6kEg9DzQtvM0DTiJzEpCtIFO0E9iakvb+81GYTXt1NcSqgQPK5YhRwBk9hQl/dx2MlilzKtpK4d4A52Mw6EjoSKWoEMUUk0ixxo0jscKqjJJ9AKRlZWKsMEEgg9qktrqeyuY7m1mkhniYMkkbFWUjuCOQaZJI8sjSSOzyMSzMTkknqTT1AdJbzRRpJJE6xyAlGZSA30Pelitppw7Qwu4RdzlFJ2j1OOgp89/d3Nvb289zLLDbgrDG7krGCckKO2T6U601G8sFnW0upoBcRmKYROVEiHqrY6j2pa2AqYqWaGS3laGaN45F6q4wR9QaiBqxeXl1f3b3V7PLcXEhy8srFmbtyT1pgM+zzeR9o8p/J3bfM2nbu64z0z7UQQTXMoigieSQ9ERSxP4CpPt13/AGf/AGf9qm+x+b532fedm/GN23pnHGetFlfXmm3aXVjcy21ymdksLFGXIwcEc9CRS1sBWxUskEkao0kbIHXcpIxuHqPUVFVi4vLm7WFJ55JVgjEcQdiRGmSdq56Dk8e9MBkdvNMkjxxu6xjLlVJCj1PpUa/eH1qxb393aQzw29zNFFcLsmSNyokXrhgOo+tV1+8PrTW4I9Lg/wCPeL/cX+Vc14v+9a/Rv6V0sH+oi/3F/lXNeLvvWv0avus3/wCRc/l+aPp8w/3R/I52GCa5k8uCJ5JME7UUk4HXgVFVmyv7zTrkXFjdTW04BUSQuUbBGCMj1FVq+EPmCWa3mtmUTRPGWUMA6kZB6EZ7UJbzSwyTJG7Rx43uFJC56ZPapLu+vL943u7mW4aNFjRpXLFUHRRnoB6UsN/eW9pcWkN1LHbXO3zolchZNpyu4dDg+vSlrYCCONpZFjjRndjhVUZJPoKJI3ikaORGR1OCrDBB9Kdb3E1pcx3NvI8U0TB0kQ4ZGHIII6EGi4uJru5kubiR5ZpWLvI5yzMeSST1NPUAe3mjhjmeN1jkzscqQGx1we9ENvNcOUgieRgCSEUk4HU8VLNf3lxaW9pNcyyW1vu8mJnJWPccnaOgyfTrSWd/eadM01lczW8rIULxOVJU8EZHY0tbAVqlmt5rZwk0TxsQGAdSCQeh5qKrN7f3mozLLe3MtxKqCMPK5YhRwBk9hTAjFvM0DTrG5iUhS+07QfQmmxRSTyLHGjSOxwqqMkn0AqZL+8SwksUupVtJXDvAHOxmHQkdCRTLW6nsrmO5tZpIZ4mDJJGxVlYdCCOho1AjZWRirqVIOCD2p8lvNFFHJJE6xyAlGZSA2OuD3pskkksjSSOzyMSzMxyST1Jqee/u7m2t7ee5lkht1Kwxu5KxgnJCg9Mn0o16ARRW80yu0cbuIxucqCdo9T6CosVatr+8sknS2uZYUuEMcyxuVEiHqrY6j2NVc0eoE0kMlvP5U0bxyKRlHGCPwr0aD/j3i/3F/lXnl1e3Wo3r3V7cS3FxIQXllcszduSetehwf8e8X+4v8q+n4a3qX8v1Payf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/cP86yLhdOXT7Q20ty16d/2lXVRGvPy7CDk8dcgYNeVnC/22fr+hw5h/vMiTRLeG61WKGdN6NnK568Gus/sDTP+fYf99N/jXG6befYL+O4Kb9mflzjORit7/hLl/59D/38/wDrV35TXwNOk1iUnK/VX0OrA1cLCm1WSvfsaf8AYGmf8+o/77P+NH9gaZ/z6j/vs/41mf8ACXL/AM+Z/wC/n/1q0tJ1gaq8iiHy9gz97Oa9qjWyqtNU6cU2/wC7/wAA9CnUwVSShFK78v8AgA2g6Yqs32YcAkfOf8a4V+HI7Zr0uT/VP/un+VeaP98/WvI4hoU6TpqnFK99vkcGbUoU3HkVrly6vo7mys7dbK2ha3VlaaIEPNk5y+SQSOnAFTaFbQ3WppDOm9CCSM46CobpNOWytGtJLlroq32lZVUIrZ42EHJGPUCjTL7+zr1bjy9+3IxnFeFg3TjVi5/Cnr955tFxVSLnsdf/AGBpf/PqP++j/jR/YGl/8+o/76P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArV9f9cyfsv8AwH/gHvfWMv7L7v8AgGp/YGl/8+o/76P+NH9gaX/z6j/vs/41l/8ACXr/AM+Z/wC/n/1qP+EvX/nzP/fz/wCtR9cyfsv/AAH/AIAfWcv7L7v+Aan/AAj+mf8APsP++j/jXMa/aQWWomKBNibAcZzWp/wly4/48z/38/8ArViarqH9o3v2jy/L+ULjOeleZmuIwFSglh0lK/RWOPHVcLOnailf0Es76O0truJrK2uDcR7FkmBLQ853JgjB+oNUh94fWrlmumtbXZvZLlJxGDbCFVKs+ejknIGPTJqkDgg185G1zyD0yH/URf7i/wAq5rxd9+1+jUsfi0JGq/YydoAz5n/1qzdY1caqYj5Pl+Xn+LPWvrMxzLDVsG6VOWunRnu4vGUamG5IvXQraZex6fei4ksra9UKy+TcglDkYzwQcjr1qlV3TV09r0DVJLmO12tlrZVZ8444JAxnFUjXyelzwjstL0bT7jTIJ5YNzsCSdx9at/2Bpn/PqP8Avs/41iWPiUWdlFb/AGXdsGN2/Gf0qx/wlw/58z/38/8ArV9hh8XlSoxU0rpa+7/wD36VfAqnFSSv6Gn/AGBpf/PqP++j/jR/YGl/8+o/77P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArVt9cyfsv/Af+AafWcv7L7v+Aan9gaZ/z6j/AL7P+NVtR0XT4NOnlSDa6JkHcaqf8Jev/Pmf+/n/ANaobvxOLqzmtxabfMXbnfnH6VjiMXlTpSUErtae7/wDOrXwLg1FK/oc73q5qV9Hf3CypZW1oFjVPLtwQpwMbjknk9+apDk1d1JdOW4UaZJcyQeWu43CKrb8fNgKTxnpXx73PANHw5Y299JOtxHvCqCOSMc+1dB/YGmDpaj/AL7P+NY/hH/XXP8AuD+ddSzbVJ64BNfa5NhcPPBqc4J77o+jy+hSlh1KUU2Zv9gaX/z6j/vs/wCNH9gaX/z6j/vs/wCNZh8XAEj7Gf8Av5/9ak/4S8f8+Z/7+f8A1qf1zJ+y/wDAf+AH1jL+y+7/AIBNq+j2Ftpk0sUGx1xg7ie4rkc8+tb9/wCIxfWUlv8AZim/HO/OOc+lYHevnc2qYapWTwy923RW1PJx06M6idHaxc1C8jv9Rkuo7SC0SQgiC3BCJxjgEk9s9e9d9D/x7xf7i/yrgdQWxXUZF02S4kswR5bXCqshHuASOue9d9D/AMe8X+4v8q9Thj4p27I7cn+KfyOZ8XD/AEi2/wB0/wA6x7jTXttNs71p7Z0ut+2OOZWkTacfOo5XPbPUVseLVJmt8An5D/Oud2P/AHT+VeVm8W8bO3f9Dix6/wBpkWtN0+TU7loI57aErG0m64mEakAZwCep9B3qkRzS7WHUGkrzbNbnEXdS0+TTLlYJJ7aYtGsm63mEigEZwSOh9R2rZ8If625/3R/Ouemt5rZwk8TxsRkB1IOD0PNdD4Q/1tz/ALo/nXpZN/vlP+uh2Zf/ALzE6eT/AFb/AO6f5V5m/wB4/WvTJP8AVv8A7p/lXmb/AHj9a9fiben8/wBDvzneHzLl3p0lpZWd009tIt0rMqRShnTBxhwOVP16il0/TJNRW6eOe1i+zQtMwnmWPeB/CufvN7Dmq8kE0UUckkTpHIMozKQG+h71CATwOa+Us2tGeIAFW9SsJNMv5bOSaCZ4yMyW8okRsjPDDg1W2N/cP5U08GqaYy7/AGc/9j/2l59t5fn+R5PnDzc7c7tnXb23dM0aZp76pqEdpHPbQNJnElzKI4xgE8seB0/Oq5t5vs/2jyn8ndt8zadu7rjPTNRUrN3sxAeuKt3dk9pHbO8sEguIRMBFKHKDJG1sfdbjoecEVW2N/cP5UbH/ALh/KnysLFuz06S9trudJ7aMWsfmMs0wRn5xhAfvH2HNUqdsb+6fyo2N/cP5U1FjsIDXv/g3wb4O8b+C0lHh2fT5lzGZ/MfLPjl0YnDDPbGAeK8C2N/cP5V3f/C2/Fq6HHpcMtvAqLsE0NuEfb2Ax8o+oANeZmeFxVenGOHfLJPe7X/Dlwst0c0/h6ZfEd3oou7JZbaSSMzSThIm2Z6MeOccetY1PKyeh/Km7G/un8q9GMJpa6kWLmoadJp0sUck9tMZYlmBt5hIFDdiR0Ydx1FFvpz3OnXl6s9siWuzdHJKFkfccfIp5bHfHQVU2P8A3T+VIQR1BFPllYLE9nbteXsNqkkUbSuEDysERcnGSTwB70Xds1neTWzSRSNE5QvEwdGwcZUjgj3qKON5ZFjjRndjhVUZJPoBRLG8UjRyIyOpwVYYIPoRS6iLVxp0ltptnetPbOt1v2xxyhpE2nHzqOVz2z1FGnafJqdy0Ec9tCVjaTdcTCNSAM4BPU+g71TCk9AaUqwGSpFHLKw7Dau6lp76ZcrBJPbTFo1k3W8wkUAjOCR39R1FUhUs1vNbOEmieNiAwDqQcHoeaBHQ+Ef9dc/7g/nXTyf6t/8AdNcx4R/11z/uD+ddPJ/q3/3TX3eTf8i9fM+ny7/dV8zzNvvH61cu9Ne0sbO6ae2dbpWZUimVnTBxh1HKn61Tb7x+tSvbzRRxyPFIkcgJRmUgNjrg96+FlufMMnsdOkv4rqRJ7aIW0RlYTTBC4HZAfvN7DmqWOaUZPAFLsb+4fyoSYFu/sW0zUpLOSaCZoyAZLeUSIeM8MODXfwf8e8X+4v8AKvNlVtw+U9fSvSYf+PeL/cX+VfT8NJqU7+R7WT/FP5DzRj2rB8Q6nd2EsK28mwMuT8oPf3rE/wCEi1P/AJ+B/wB8L/hXp4nOsPQqulOLbXodtbMaNKbhJO6Os1cf8Si64/grz01pTa7fzwvDJNlHGGG0c1m55r5nNsbTxdVTpqySPGx2JhiJqUFZFu8vrzUZ1mvbmW4lVAgeVyxCgYAyewrb8I/625/3R/OsfUr5L+5WWOytrQCNU8u3BCnA+8ck8nv2plnqNzYMzW8mwsMHgGuXL68cPXjVktEY4aqqVZTlsj0KT/Vv/un+VeZv94/WtX/hItTwR9o6jB+Qf4VlFsnNd+b5jSxrg6aenc6cwxcMS4uCtYsz313c21vbz3MskNupWGN3JWME5IUdgT6Ve8Nf8hmP/db+VVbu+jubKzgSytoWt1ZWmjB3zZOcvk4yOnAFWvDX/IZj/wB1v5VwZcv9qp6dV+ZzYX+ND1R2+PavPdX/AOQtdf8AXRv516EK891f/kLXX/XRv519LxKkqULdz184XuRGfb7v+zv7P+1TfY/M87yN52b8Y3bemccZ9Kk0n/kJ2v8A11X+Yo+3R/2P9g+xW3mef5v2vB83GMbM5xt79M571VileCVJIzhkIYH0Ir5KlJRmpNbM8KLtJNnpePajA9K4X/hI9T/5+B/3wv8AhR/wkep/8/A/74H+FfYriHCfyv7l/mfQLNqH8rO6x7UY9q4X/hI9T/5+B/3wP8KUeI9TLAfaB1/uD/Cn/rDhP5X9y/zD+1qH8r/A7nHtRj2pkR3QRk9SoJ/EVjeItSurAwC3k2bwc8A5r1sTiaeHo+2kro761aFKn7SS0NzHtRj2rhf+Ej1P/n4H/fA/wo/4SPU/+fgf98D/AAryf9YsJ/K/w/zOD+1qH8r/AAO5x7VjeKAP7JH/AF1H8jXP/wDCRan/AM9x/wB8D/CorvWL29hEU8u6MHONoHNcmNzvDV6EqcYtN+hjicyo1KThFO7KlvPNaXMdxBI8U0TB0kQ4ZWHIII6Gi5nmu7mS4uJHlmlYu8jnLMx5JJPU0+znW2vYZ3gjnWN1cxSglHwc4bB6H6ii8nW5vZp0gigWR2cRRAhEyc4XJJwPqa+V6nhnWeFh/wASlv8Arqf5Cr2rj/iUXX/XOqPhb/kEN/11P8hV/V/+QPd/9c/6193hUv7K/wC3WfTUUvqPyPPO9Wb2/vNRmWa9uZbiVUCB5XLEKOAMnsKrd6u6lfR39wsqWVtaBY1Ty7cEKcD7xyTye/NfCPc+ZNnwl/r7n/dH866eT/VP/umvPbPUbmwZjbybCwweAatnxDqeCPtAweD8g/wr6XL84oYbCqjJNvX+tz2MLmFOjR9nJO5lN95vrVme+u7m2t7ee5lkht1Kwxu5KxgnJCg9AT6VVzkk1eur6O5sbO3SytoGt1ZWmiBDzZOcvk4JHTgDivmnueOWvDX/ACGov91v5V2+OelecWl3NZTCaF9rjgHGetXT4i1PtcD/AL4H+FfQ5XmtDCUXTqRbd76HrYHHUqFNxmm3c7rHtRmuHXxFqe4ZuBj/AHF/wrtojuhjJ6lQT+VfRYHMqOLcvZRasevhcZDENqCtY5fxb/rbf/cP86yLkacNPtGt5Llr07/tKyKojXn5dhByeOuQMGtfxd/r7b/cP86yLjTnttPs71p7Z0ut+2NJg0ibTj51HK57Z6ivjs5t9dn6/ofPY/8A3mQacunvcsNSkuEh8tipt1Vm34+UEEjjPXvVHvU9ray3dwsMKb3boM4q8fDmp/8APAf99r/jXHSw1aouanFteSOeFGpNXjG5BqQ01blV0yS5kg8tSxuFVW34+YDBPGeneiNdP/suZpJLkagJFESKq+UU7ljnIP0GKn/4RzU/+fcf99r/AI0f8I5qf/PuP++1/wAa0+oYr+SX3Mv6tW/kf3FOxFo19CL5pktCw81oVDOF77QSBn6kVFN5fnv5JYxbjsLjnHbPvWj/AMI5qf8Az7j/AL7X/Gj/AIRzU/8An3H/AH2v+NH1DFf8+39zD6tW/kf3EF2unCytDaSXDXRVvtSyqoRWzxsIOSMeoFWvDX/IZj/3W/lTT4d1P/n3H/fa/wCNaWiaPe2WppNPDtQAgncPSuvAYLEQxMHKDsmuj7m+GoVVWi3F2v2OorzzV/8AkLXX/XRv516GOa47UNC1Ge/uJY4Mo7lgdw6Zr6DiGjUq04KnFuz6HqZrTnOMeVXM3Gm/2Pu8y5/tPz8bNi+V5W3rnOd2e2MYo0xdPbUIxqktylnz5jWyK0g4OMAkDrjv0qx/wjmp/wDPuP8Avtf8aP8AhHNT/wCfcf8Afa/418p9QxX8kvuZ4n1at/I/uMvv7VbuhYrHbfZHndzEDOJVACyZOQuDyuMcnB61ZHh3U/8An3H/AH2v+NUrqzmspvKnTY+M4zmoqYatTXNOLS9CJ0akFeUWiayXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9axjbmM0elwf6iL/cX+Vc14u+9a/Rq6WH/AFEX+4v8q5rxd961+jV91m//ACLn8vzR9Pj/APdH8jF0xNPa9C6pJcpa7Wy1sqs+cccEgYziqVXdM06TVL0Wsc9tCSrNvuZhGgwM9T3/AK1Sr4PS58wXtQXT1ki/s6S5eMxKZTcKqkSfxAYJ+X0PWi3GnHTrs3Mlyt6Nn2ZY0Uxtz828k5HHTANSQaHf3MKzRQ5jYcHcP8ak/wCEc1P/AJ9x/wB9j/GuqOBxMopqDa9DZYeq1dRf3FGzFs13ELt5Vti6+a0QBcLnnaDwTj1IFF4LdbuYWjytbB28ppQA5XPGQOAcehIq7/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjT+oYn+R/cx/Vq38j+43/C3/ACCW/wCup/kKv6v/AMga7/65/wBag0K0ms7BoZ12vv3dQeMCreowyXGmzxRjLsmFFfa4anNZbyNa2Z9FShJYPla1secd6u6kunLcL/ZslzJD5a7jcIqtvx82ApIxnp3qx/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjXxTwGKv/Df3M+d+rVv5H9xXjXT/AOzJmkkuRqAkAiRVXyinfJzkH8KjsRaNewi+eVLUuPNaFQzhe+0EgZ+pFXP+Ec1P/n3H/fa/40f8I5qf/PuP++1/xo+oYr/n3L7mH1at/I/uM+by/Pk8ksYtx2FxyR2z71Zu105bKzNpJctdFW+1LKqhFbPGwg5Ix6gVP/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjR9QxX8j+5h9WrfyP7iCyXTTFdfbpLlJBETbCFFYNJ2D5IwvuMmqX8VaE+iX9tC00sOI16ncDis/HP8AjWNSjUpStUTT8zOdOUHaSsXNQWxXUZF0153tMjy2uFVZCPcKSOue9d/B/wAe8X+4v8q4C/sW03UZLR5oJmjIBkt5RIh4zww4Nd/B/wAe8X+4v8q+k4YtzT9Eevk/xT+Ry/i7/XW3+4f51gvbzRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+leTnH++z9f0OHMP95kW/Dv8AyG4P+BfyNd1n3rzFWKnI60pd/wC8fzrpy3OPqVJ0+S+t9zXB5h9Wg48t7npufejPvXmXmN/eP50eY394/nXof6z/APTv8f8AgHX/AGz/AHPx/wCAem596M+9eZeY398/nR5jf3j+dH+s/wD07/H/AIAf21/c/H/gHpufejPvXmXmN/fNHmN/eP50f6z/APTv8f8AgB/bX9z8f+Aem596M+9eZeY398/nR5jf3j+dP/Wf/p3+P/AD+2v7n4/8A9Nz70Z968y8xv7x/OjzH/vH86X+s/8A07/H/gB/bP8Ac/H/AIB6bu964vxT/wAhg/7i/wAqx97f3j+dNJJPJzXBmOc/XKSp8ltb7nLi8w+sQ5OWxJHbzTJI8cTusYy7KpIUep9KjX7w+tWLe/u7SGeG3uZoorhdkyRuVEi9cMB1H1qtXhrc809Mh/49ov8AcX+Vc14u+9a/Rv6VzQdv7xpCxPUk172Mzr6xh/Yclvn/AMA9PEZj7al7Llt8ySC3muZPLgieR8E7UUseOvSoe9WrK/vNOuRcWN1LbTgFRJC5RsEYIyPUVWNeCeYegaJ/yBrb/dP8zV8keteZb2Axkijex/iP519NQ4i9lTjT9neytv8A8A9mnm3JBR5L28/+Aem596M+9eZeY398/nR5jf3z+da/6zf9O/x/4Bf9tf3Px/4B6bn3oz715l5jf3j+dHmN/eP50f6z/wDTv8f+AH9s/wBz8f8AgHpufejPvXmXmN/fP50eY394/nR/rP8A9O/x/wCAH9tf3Px/4B6bn3oz715l5jf3z+dHmN/fNP8A1n/6d/j/AMAP7a/ufj/wD03PvRn3rzLzG/vH86PMb++aP9Zv+nf4/wDAD+2v7n4/8A7vX+dEuOfT+YrgzS729SaTNeHmWO+u1VU5baWPNxeJ+sTU7WJZIZrecxTRvHIpGUcYI/A16NB/x7xf7i/yrzy6vbrUb1rq9uJbi4kILyyuWZu3JPJr0OD/AI94v9xf5V6/DW9T5fqehk/xT+RzPi3Jnt8f3D/Osi5vkn0+ztVsreJrffunjB8ybccjeScHHQYA4rvpraCXBlhSQjgF1BxUP2Cz/wCfWH/vgVtjskqYnESqqSVzTE5bOrWclI4bTb2OwuWlksba7BjZNlwCVGRjIwRyO3aqRHtXo39n2f8Az6w/98Cj+z7P/n1h/wC+BXL/AKuVU/jX4nP/AGTP+ZHDalepf3Kyx2NtaARqnl26kKcDG45J5PfmlivUj0qayNlbvJJIri5YEyoB/CpzjB+hruPsFn/z6w/98Cl+wWf/AD6w/wDfApf6t1NudfiP+yKn8yOAsbhbO+huHtorlY3DGGcEo+OzYIOPxFRzP5szyCNUDMWCL0X2HtXoX9n2f/PrD/3wKP7Ps/8An1h/74FP/Vyrf41+If2RU/mRw93epc2VnbpZW8LW6srTRKQ82TnL5OCR04ApdPv0sI7pXsLW68+JogZ1JMRP8a4I+Ye+RXcf2fZ/8+sP/fApPsFn/wA+sP8A3wKn/Vup8POvxH/ZFT+ZHnIHtVvUrtb+/luo7SC0WTBEFuCI04xwCSffr3ru/wCz7P8A59Yf++BR/Z9n/wA+sP8A3wKr/Vyr/OvxJ/smf8yOG+3L/Y/2D7Dbb/P877XtPm4xjZnONvfpnPejS71NOv47mSxt7xUzmC5BMbZBHIBB4znr1Fd1/Z9n/wA+sP8A3wKT7BZ/8+sP/fApf6t1LW51r6j/ALIqfzI85x7Vbu7pbmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBXd/2fZ/8+sP/AHwKP7Ps/wDn1h/74FP/AFcq3+NfiL+yZ/zI4ezvUtLa7heyt7g3EexZJgS0POdyYIwfqDVaF/LmSQosgVgSjdGx2PtXoP8AZ9n/AM+sP/fAo/s+z/59Yf8AvgUf6uVb/GtfUP7Jn/Mjg9Qulvb6a5jtILVZG3CGAEInsASTj8ac92r6ZHZizt1dJWkNyAfMYEAbSc4wMZ6d67r7BZ/8+sP/AHwKX+z7P/n1h/74FL/Vupb41p6j/sip/MjhdMvV069FxJZW94ArL5VyCUORjPBByOvWqWD6V6P/AGfZ/wDPrD/3wKPsFn/z6w/98Cn/AKuVb351+If2RU/mRwuo3qX8sTpY29qI4ljK26kByP4jkn5j36Cltr1LfTry1ayt5XuNm2eRT5kO05+Qg456HIPFdz/Z9l/z6w/98Cj+z7L/AJ9Yf++BS/1bqfDzr8R/2PU/mRwFnMttewzvBFOsbhzFKCUfBzhsEHB+oou5xd3k06W8UAkcuIogQiZOcLkk4H1Nd/8A2fZ/8+sP/fAo/s+z/wCfWH/vgUf6uVd+dfiL+yKn8yOGub1LjTrS1Wyt4nt9+6eMHzJtxz85Jxx0GAOKTTb2OwuWlksba7BRk8u4BKjIxuGCOR25xXdfYLP/AJ9Yf++BR9gs/wDn1h/74FH+rdTbnX4j/sip/MjzjFXdSvVv7hZUsra0Cxqnl2ykKcDG45J5Pfmu5/s+z/59Yf8AvgUf2fZ/8+sP/fAp/wCrlX+dfiT/AGTP+ZHDR3qJpc1kbG3d5JFcXLA+agH8KnOMH6Go7G4Wzvobh7aK5WNwxhnBKPjs2CDj8RXff2fZ/wDPrD/3wKT7BZ/8+sP/AHwKX+rlT+da+o/7IqfzI89mfzJnlCLGGYkInRfYe1Wru9S5srSBbK3ga3VlaaJSHmyc5fJwSOnAHFdx/Z9n/wA+sP8A3wKP7Ps/+fWH/vgU3w5Vv8a09Rf2TP8AmRw9lepaR3SPZW1yZ4jGGmBJiJ/iTBHzfXIqlg+lejf2fZ/8+sP/AHwKPsFn/wA+sP8A3wKFw5Vu/fX4j/sip/MjhdQu1v8AUZLqOzgtFkIxBbqRGnGOAST2z1rvof8Aj3i/3B/KovsFn/z6w/8AfAqwQB8o6DgV6+U5ZPBOXNK97HfgcHKg5Xe5/9k=\"}]}"},{"id":1313,"title":"PACMAT 09 - Awesome Tunnelling Ghosts, Equal Speed, 20 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m PACMAT_Interactive_009a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4 11 Lives Interactive\u003e (MP4)  Best Score seen is 11 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\"\u003ePACMAT_Interactive_009a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\"\u003e11 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 11 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT9_1Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=20;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:1\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT9_1Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 20000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"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":"2013-03-02T19:16:46.000Z","updated_at":"2025-12-03T15:31:49.000Z","published_at":"2013-03-03T03:24:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_009a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e11 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 11 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":1246,"title":"PACMAT 05 - Optimized Ghosts, PACMAT increasing speed, 12 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  PACMAT gets faster as a function of captures. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m PACMAT_Ghosts_005.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4 Alfonso Enhanced\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots\r\n\r\n*Scoring:* \r\n\r\n  score = F(Lives Remaining) + moves\r\n\r\n  F = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]  \r\n\r\n*Note:* Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\r\n\r\n\r\n*Future:* Asteroids\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  PACMAT gets faster as a function of captures.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m\"\u003ePACMAT_Ghosts_005.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4\"\u003eAlfonso Enhanced\u003c/a\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003escore = F(Lives Remaining) + moves\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eF = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]  \r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Asteroids\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% raz 314\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n     'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...        'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Expect \u003c 1000\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=12; % Lives\r\n  speed=[12 8 6 4 3 2 2 2 2 2 2 1]; % Faster as fewer lives remain\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n\r\n for pac2x=1:speed(lives) % G05 Mod\r\n  if ~(lives \u0026\u0026 any(mod(map(:),10)==1)),continue;end % Died or completed\r\n \r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\n\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2X Speed Loop\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n   gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n%\r\n\r\nassert(lives\u003e0,sprintf('Twelve Captures\\n')) % ) Lives allowed\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) \r\n\r\nscore_array=[ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0];\r\nscore=score_array(lives) + movepac;\r\n  \r\nfprintf('Moves %i\\n',movepac)\r\nfprintf('Lives Remaining %i\\n',lives)\r\nfprintf('Score %i\\n',score)\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T22:19:40.000Z","updated_at":"2026-03-30T18:42:31.000Z","published_at":"2013-02-03T23:04:48.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing the Yellow Dots while avoiding the wandering ghosts in 12 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. PACMAT gets faster as a function of captures.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_005.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_005.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_005.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G005_video_ANC4_dbltunnel.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Enhanced\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Alfonso clears at 2X speed with multiple tunnel usages.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\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[score = F(Lives Remaining) + moves\\n\\nF = [ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Speed as function of Lives remaining [12 8 6 4 3 2 2 2 2 2 2 1];\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Asteroids\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzfW9Yl0ySFYkRw4J+bPHNZX/CWXX/ADwh/X/Gn+Lv9dbf7h/nWRcX0c+nWlqLK2ie337p4wfMm3HPzknHHQYA4r38zzDFUsXKEJNJf5HqY3F1oV5RjKyRqDxbc/8APCL9f8aP+Esuf+eEX5H/ABrK02+j0+4aWSytrsGNk2XAJUEj7wwRyO1UjXB/auM/nZy/XcR/Mzov+Etuv+eEP5H/ABo/4Sy5/wCeEP6/41l6lfR39wsqWVtaBY1Ty7YEKcD7xyTye/NEd9HHpU1l9itnkkkVxcsD5qAfwqc4wfoaSzXG/wA7H9dr/wA5qDxZdf8APCL9f8aP+Esuf+eEX6/41jWNwtnfQ3DW0NysbhjDOCUfHZsEHH4io5pBJM8gRYwzEhF6L7D2p/2rjP52L67iP52bv/CW3P8Azwi/I/40f8Jbdf8APCL8j/jWXd30dzZWkC2VtC1urK00YO+bJzl8nGR04ApdPv47GO6V7G1uvPhMSmdSTET/ABrgjDD3yKX9q4y3xsPrtf8AnNP/AISy6/54xfr/AI0HxZdf88Iv1/xrngefX61a1K8S/v5bqO0gtFkIxBbgiNOMcAkn3696f9q4z+dh9dxH87Nf/hLbn/nhF+R/xoHiy5/54Rfr/jWV9uj/ALH+wfYbbf53nfasHzcYxsznG3v0zml0u9j07UIrqSytrxUzmC5BMbZBHIBB4znr1FL+1cZvzsPrtf8AnNT/AISy5/54Rfr/AI0f8JZc/wDPCL9f8a54n5qtXd2tzHbIlrBAYYhGWiBBlIJO5sk/NzjjAwBT/tXGfzsPruI/mNf/AIS26/54Rfkf8aB4tuSQPIi/I/41l2d9HaW13C9lbXBuI9iyTAloec7kwRg/UGqQ+8PrTWa4y/xsf13Efzs9NjbdGjnqygn8aytb1eXTDCI0RvMz97NacH+pi/3F/lXN+LvvWv0avr8zr1KWBdSDs9D38bUnDDOcXroQjxZc/wDPCL8j/jR/wltz/wA8IvyP+NZWmXsen3onksra8AVl8m5BKHIxngg5HXr1qlXx/wDauM/nZ8/9dxH8x0R8WXP/ADwh/X/Gj/hLLn/nhD+R/wAaytRvo7+WJ0sra1EcSxlbcEByP4jkn5j36Cltr6ODTry1aytpXuNm2eQHzIdpz8hBxz0OQaX9q4y3xsPrtf8AnNQeLLn/AJ4Rfkf8aD4suf8AnhF+R/xrFs51t72Gd4I51jdXMUoJR8HOGweh+oovJ1ub2adYIoFkcuIogQiZOdq5OcD6mn/auM252H12v/MbX/CW3P8Azwi/I/40DxZc/wDPCH9f8ay7m+SfTrO1Wytont9+6eMHzJtxyN5Jxx0GAOKNNvo7C5aWSytrsGNk2XAJUZH3hgjkdu1L+1cZb42H13Efzmp/wltz/wA8IvyP+NB8WXP/ADwi/I/41ztXdRvo7+5WZLK2tAsap5dspCnA+8ck8nvz1p/2rjP52H13EfzGr/wllz/zwh/X/Gj/AISy5/54Q/r/AI1lpfRppU1kbK2d5JFcXLA+amP4VOcYP0NRWNytnew3DW0NysbhjDMCUfHZsEHH40f2rjf52P67iP5zZ/4Sy5/54Q/kf8aP+Etuv+feL8j/AI1hTSebM8iosasxYInRc9h7VZu76O5srO3SytoGt1ZWmiBDzZOcvk4JHTgDij+1cZ/OxfXcR/Man/CWXX/PvD+v+NH/AAlt1/zwi/I/41l2N9HaR3SPZW1yZ4jGGmUkxE/xJgjDfXIqlmj+1cZf42H13Efzs6IeLLokDyIvyP8AjXVId8aPz8yg8fSvP7+8S/1KS6jtILRZCCIbcEInGOAST29a7+H/AI94v9xf5V9DkGLrYhz9tK9rHq5XXqVXLndzmPFv+ut/9w/zrIuBpw06za3kuWvTv+0rIqiNefl2EHJ465Awa1/F3+vtv9w/zrIuNOe20+zvWntnS637Y0mDSJtOPnUcrntnqK8DOLfXZ37/AKHmY/8A3mQ3TLP7ffR2+/Zvz82M9Bmt4+ER2vD/AN+//r1leHf+Q3B9G/ka7qvWyXLsNiaDnVjdp+fkd2XYSlWpOU1d3OZ/4RBf+fw/9+//AK9H/CIL/wA/h/79/wD166aiva/sPBfyfi/8z0P7Nw38v4s5hvCQVSfthOAT/q//AK9cwwwxHpXpkn+rf/dP8q80f7xHvXzme4KjhXD2Kte/6Hk5nhqdBx9mrXLl0unfYrM2kly10Vb7UsqqEVs8bCDkjHqBzRpdiNRvVtzJs3A84zRdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kNRf7rfyryMFCNSvCEtU3+pw0IKVWMZbNmj/wAIgv8Az+H/AL9//Xo/4RBf+fw/9+//AK9dNRX3X9h4L+T8X/mfS/2bhv5fxZzP/CIL/wA/h/79/wD16P8AhEF/5/D/AN+//r101FL+w8D/ACfi/wDMX9m4b+X8zmv+ERGP+Pw/9+//AK9Ymq2H9nXhg8zfwGzjHWvQK4vxT/yGD/uL/KvIznLsNhsOp0o2d+7ODMcHRo0lKCs7lKyXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9a+WjbmPEPS4P9RF/uL/Kua8Xfetfo1dLB/qIv9xf5VzXi771r9Gr7rN/+Rc/l+aPp8f8A7o/kYumJp7XoXVJLiO12tlrZVZ8444JAxnFUqu6Zp0mqXotY57aElWbfczCNBgZ6nv8A1qlXwatc+YOisvDQvLOK4+1bfMGcbM/1qf8A4RFf+fw/9+//AK9a+h/8gW2/3T/M1oV93hcnwc6EJyhq0urPpqGX4edOMnHVrzOY/wCEQX/n8P8A37/+vR/wiC/8/h/79/8A166aiuj+w8F/J+L/AMzT+zcN/L+LOZ/4RFf+fw/9+/8A69RXfhgWtnLcfa92xd2CmM/rXV1T1fnRrv8A3P61z4rJ8HCjKUYapd2Z1svw8acpKOqXmeedDV3Ul09LlRpsly8PlqWNwqq2/HzABSRjPTvVLvV3UtPfTLlYHntpi0aybreYSKMjOCR39R2r4V7nzJY0fSf7VeRTL5ewZztzmtT/AIRFf+fw/wDfv/69M8Jf665/3B/Oupr67KcrwuIwqqVI3fqz38DgqNWipzV2cz/wiC/8/h/79/8A16P+EQX/AJ/D/wB+/wD69dNRXqf2Hgv5Pxf+Z1/2bhv5fxZyF/4cFhZSXAud+zsUxnnHrWD/ABV3fiD/AJAdx9F/9CFcGetfLZ3haWGrqFJWVjxcxowo1VGCsrFzUFsV1KRdNeeS0yPLa4ULJjHcKSOue9d/B/x7xf7i/wAq4C/sW03UZLR5oJmjIzJbyiRDxnhhwa7+D/j3i/3F/lXfwxbmn6I6sn+KfyOY8Xf662/3D/OsB7aaKKOZ4nWOTOxipAbHXB71v+Lv9dbf7h/nWLPqV5c2VtZT3Mslra7vIiZsrHuOW2jtk15Ocf77P1/Q4cw/3mRa8O/8hu3/AOBf+gmu6z715irFTx1pTIx/iP5105bm/wBSpOnyXu77muEzD6tBx5b3PTc+9GfevMvMb+8fzo8xv7x/OvQ/1n/6d/j/AMA6/wC2v7n4/wDAPS5D+7fn+E15o/3z9aN7/wB4/nSV5OZ5l9ecXy2t5nDjMZ9ZadrWJZLeaKOOSSJ1jkGUZlIDfQ960vDQ/wCJzH/ut/KqVxqV5d2lta3FzLLBaqVgjY5EYJyQPTJqsCRyDiuDDVXRqRqNbO5y0p+zqKfY9Nz70Z968y8xv7x/OjzG/vH86+l/1n/6d/j/AMA9j+2n/J+P/APTc+9GfevMvMb+8fzo8xv7x/Oj/Wf/AKd/j/wA/tp/yfj/AMA9Nz71xnin/kL/APAF/lWL5jf3j+dISScnk1wZjnP1ykqfJbW+5y4vMPrEOTlsSR280ySPHE7rGMuVUkKPU+lRr94fWrVrqV5ZQXMFrcSxRXKeXOiNgSL1wfUVUrw1ueaelwn/AEaLn+Bf5Vzfi771r9G/pXNB2/vH86QsT1JNe9jM6+sYf2HJbbr/AMA9PEZj7Wl7Llt8ySC3muZPLgieSTBO1FJOB14FRd6t2Go3mlXQurC5ltpwpUSRtg4IwR+VVK8HW55h6Bov/IGtf90/zNXyRnrXmXmOBjcaN7f3j+dfTUOIvZU40/Z3srb/APAPZp5tyQUeS9vP/gHpufejPvXmXmN/eP50eY394/nWv+s//Tv8f+AX/bX9z8f+Aem5HrVPVv8AkD3X+5/WvPt7f3j+dG9iPvGs63EXtacoeztdW3/4BFTN+eDjyb+Y3HNSzW81s4SaN42IDAOpBweh5qGrd/qV5qk6zX1zLcSqixh5GyQo4A+gr5jU8Y3PCP8Arbn/AHB/Oupzx1rzEOR0JFLvb+8fzr38Bnf1SiqXJe3n/wAA9TC5l7Cmoct/mem596M+9eZeY394/nR5jf3j+ddn+s//AE7/AB/4B0f21/c/H/gHd6//AMgS457D+YrgzS727kmkzXiZljvrtVVOW2ljzcXifrM1O1iWSGW3n8qaN45FPKOMEfhXo0P/AB7xf7i/yrz69v7vU797y+uJLi5kILyyHLNgY5P0Fegw/wDHvF/uL/KvX4a3qX8v1PQyf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/AHD/ADrIuF05dPtDbS3LXp3/AGlXVRGvPy7CDk8dcgYNeVnC/wBtn6/ocOYf7zINNvo7C5aWSytrsGNk8u4BKjI+8MEcjt2qkTVvTbP7ffR2+/ZvzzjPQVvHwguf+P0/9+//AK9ZYbLsRiYudKN1tuRRwlatHmgrow9Rvo7+5WZLK2tAI1Ty7dSFOBjcck8nvzRHfRx6TNZGytneSRXFywJlTH8KnOMH6Gtv/hEB/wA/p/79/wD16P8AhEF/5/T/AN+//r1v/YeN25PxX+Zr/Z2J/l/I5+xuVs76G4a3huVjYMYZgSj47Ngg4/EVHNIsszyKioGYsEXovsPaujbwiqqT9sPAz/q//r1zLDaSK5cTgq2Fa9rG1zCth6lCyqK1y5d30dzZWlullbQtbqytNECHmyc5fJIJHTgCnafqEdhHdB7C1ujPEYlM6sTET/GuCPmHvkU27TTlsrQ2kly10Vb7SsqqEVs8bCDkjHqBSaXY/wBo3q25k2ZBOcZ6Vz06TqtQitWzOMXKXKt2Ux1q3qV5Hf38t1HaQWiyYIgtwRGnGOAST79a3R4QH/P4f+/f/wBeudvLf7NdywZ3bGK59a6sTl9fDJSqxtfzNa2Fq0UnUVrk/wBuj/sf7B9itvM8/wA37XtPm4xjZnONvfpnPejS76PTtQjupLK2vFTdmC5BMbZBHIBB469eoo26b/Y+7zLn+0/Pxs2L5Xlbeuc53Z7YxioLS3+03cUOdvmMFz9a44x5vdXUwSbdkQ556Vau7tLmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBW7/wAIgP8An8P/AH7/APr0v/CIL/z+n/v3/wDXr1f7Exu/J+K/zO3+zsT/AC/kYlnfx2ltdwtZW1wbiPYskwJaHnO5MEYP1zVaGRY5kkZFcKwJRujY7H2rpP8AhEF/5/T/AN+//r0f8Igv/P6f+/f/ANej+xMb/J+K/wAw/s3E/wAv5GBqF2l7fzXKWsFqsjbhDACET2AJJx+NPe9jfS47P7Jbq6SNIbkA+awIA2k5xtGM9O9bn/CIL/z+n/v3/wDXo/4RBf8An9P/AH7/APr0v7Exv8n4r/MP7OxP8v5GHpl9Hp96LiSytrwBWXybkEocjGeCDkdevWqVdT/wiC/8/p/79/8A16P+EQX/AJ/T/wB+/wD69P8AsTG/yfiv8w/s7E/y/kYmo30d/JE6WVtaiOJYytuCA5H8RyT8x79BRbXyW+nXdq1lbTPcbNs7g+ZDtOfkIOOehyDxW3/wiA/5/T/37/8Ar1S1XQBptqJ/tHmZbbjbisquUYqlTcpwtFea/wAyZ4GvTi5yjZL0MuznW3vYZ2ginWNw5ilBKPg5w2CDg/UUXk63V3NOkEUCyOWEUQIRMnOFyScD6mizFu13CLtpVti4EpiALhc87QeCcep60Xi2y3cwtGla2DkRNKAHK543AHAOPQmvP6nGTXN9HcadaWq2VtE9vv3ToD5k245G8k446DAHFGm30en3LSyWVteAoybLgEqMj7wwRyO3ar2laANStDP9o8vDbcbc/wCetT3nhdbWyluPtZby13Y2Yz+td0crxEqPtVH3d9zqjg67h7RR0Ocq7qV9Hf3Kyx2VtZhY1Ty7dSFOBjcck8nvzVLHNXdSXT1uFGmyXMkPlruNwqq2/HzYCk8Z6d64XucoqX0a6XNZfY7Z3kkVxcsD5qAfwqc4wfoaisblbS+huHt4blY3DGGYEo+OzYIOPxFXNH0j+1WlUy+XsGc7c5rU/wCEQH/P7/5D/wDr130MrxNeHPTjdPzR1UsHXqx5oRujm5pFlmeRUVAzEhE6L7D2qzd38dzZWdulnbwG3VlaaIEPNk5y+TgkdOAOK2/+EQH/AD+n/v3/APXo/wCEQX/n9P8A37/+vW39iY1/Y/Ff5mn9nYn+X8jEsr6O0iukaytrkzxGMNMCTET/ABJgj5vrkVS9K6DUPDa2NlJcfaS+zHylMZ5x61gY+b2rixGFq4aXLVVmc9ajUoy5aisy3qF5Hf6lJdR2kFokhBEFuCETjHAJJ7Z69676H/j3i/3F/lXA6gtiuoyLpsk8lmCPLa4VVkI9wCR1z3rvof8Aj3i/3F/lX0HDHxTt2R6mT/FP5HM+Lh/pFv8A7p/nWPcaa9tptnetPbOt1v2xxzK0ibTj51HK57Z6itjxd/x8W3+6f51gPbzRwxyvE6xyZ2OVIDY64PevJzi/12fr+hw5h/vMi3otxFa6rDNM+xFzlsZxwa6z/hINL/5+h/3yf8K4iGCa5k2QxPI+NxCKWOO54qLNVgs2rYOm6dNK2+v/AA48NjqmHi4wS1O8/wCEg0v/AJ+h/wB8t/hR/wAJBpn/AD9D/vlv8K4eaCa2cJNG8bEAgOpBIPQ80CCZoWnETmJSFMm07QfQnpXb/rJif5V+P+Z0f2vX7L+vmdu+vaYysouRkgj7p/wrhG5YntmpIo5J5FjjRpHY4CqMkn0ApjKysVYbSDgg9q87HZjUxri6iWnY5MTi54izmti3dadJaWVndNPbOt0rMqRyhnTBxhwOVP17Vc8M/wDIZj/3W/lWXJbzRRxySRuscgJRmUgNj0PetPwz/wAhmP8A3W/lWeXf71Tv3X5k4X+PD1R24rz3V/8AkLXX/XQ/zr0IV57q/wDyFrr/AK6H+dfS8S/woep7Gc/BEP7Of+x/7T8+22ef5Hk+cPNzjO7Z129t3TNN0+VYdQgkc4VZASfQZqL7PN9m+0eU/k7tvmbTt3dcZ9fakggmuZRHBE8kh6KilifwFfIQlyS5ux4EXZ3O4/4SDS/+fof98H/Cj/hINL/5+h/3y3+FcFUskMkKoZI2QOu5CRjcPUeor3v9Y8V/Kvx/zPU/tev2X9fM7j/hINL/AOfof98t/hR/wkGmHj7UP++D/hXERwTTK7xxu6xjc5VchR6n0qMfeH1priPFfyr8f8w/tev2X9fM9NUhlDDkEZBqtd6hbWJQXEnllx8vyk5qaD/j2i/3F/lXN+Lvv2v0b+lfSY/Fzw+EdaK10PYxVeVKh7SK1NX/AISDS/8An6H/AHy3+FH/AAkGmf8AP0P++W/wrh4YJrmTy4I3kfBO1FJPvwKir5v/AFkxP8q/H/M8f+16/Zf18zvv7f0zH/H0P++W/wAKytf1SyvNNEUE29/MBwFI4x71zk0E1syiaN4yw3AOpGQehGe1CQTSQySrE7Rx43uFJC56ZPasMRntevSdOSVn/Xczq5nVqwcJJWY6zt2vLyG1V4o2lcIHlcKi5OMsTwB70Xlu1neTWzPFI0TlC8Th1bBxlSOCPeoo45JZFjjVndjhVUZJJ7AUSxyRStHIjI6nBVhgg+hFeL1POOx8Lf8AIJb/AK6n+Qq/q/8AyB7v/rn/AFqh4W/5BDf9dT/IVf1f/kD3f/XP+tfeYX/kVf8AbrPp6H+4fJnnh61d1LT30y5WCSe2mLRrJut5hIoyM4JHQ+o6iqXepZoJrdwk0TxsQGAdSDg9DzXwb3PmDY8OX1vYvO1xJsDKAOCc810H/CQaZ/z9D/vhv8K4gW8zQtOsTmJTgvtO0H0JpsUck0qxxI0jscKqjJJ9hXsYTOq+FpKlBJpdzvoZjVowUI2sdz/wkGl/8/Q/75b/AAo/4SDS/wDn6H/fLf4VwjKyMVYYIJBB7VI9vNFHHJJG6xyDKMykBvoe9dP+smK7L8f8zb+16/Zf18zqdX1exutKmhhn3O2MDafWuR71LHBLOrmKJ3WNdzlVJ2j1PoKhrysbjamMqe0qJJrTQ4sTiZ4iXNLcu6hYtpmpSWjzQTNGQDJbyiRDxnhhwa7+D/j3i/3F/lXnMkElvP5U0bRyKRlHGCPwNejQf8e8X+4v8q93hj4p+iPSyf4p/I5jxd/x8W/+4f51izX95cWdvaTXMr29vu8mJnJSPccttHQZPpXd3en218ym4i3lRgckYqt/YGmY/wCPUf8AfTf41ePyPEYjESqxas/67F4rLatWtKcWrM4uzvrzTpjNZ3M1vIyFC8TlSVPBGR2NV67z/hH9L/59R/303+NH/CP6X/z6j/vpv8a5P9W8V3X4/wCRz/2RX7r+vkcZeX15qMyzXtxLcSqgQPK5YhRwBk9hQl/eR2ElitzKtpK4d4Q52Mw6EjoSK7P+wNM/59R/323+NH9gaZ/z6j/vtv8AGl/q3idrx/H/ACD+yK3df18jibW5uLK5jubWaSGeIhkkjbaykdCCOaZJI0sjSSMXdiWZickk9Sa7htB0xVZhbDIBI+Y/41wrcMR2zXn47LqmCcfaNO/Y5MThJ4eym9yxPfXdzbW9tPcyyw24Kwxu5KxgnJCjoAT6Ve8M/wDIZi/3W/lVW7vo7mys4EsraFrdWVpowd82TnL5OMjpwBVrw1/yGYv91v5Vnl3+9U/X9ScL/Hh6o7ivPdX/AOQtdf8AXQ/zr0GqEui6fPI0klvl2OSdx619nm+Aq4yEY02tO59Dj8LPERSg9jift95/Z39n/aZvsfmed5G8+Xvxjdt6Zxxn0osr28027S6sriW2uEzslhcoy5GDgjnoSK7P+wNM/wCfUf8AfTf40f2Bpn/PqP8Avtv8a8D/AFbxO14/j/keX/ZFbuv6+RwVWZ7y5ulhS4uJJVgjEUQdifLTJIUZ6DJPHvXaf8I/pef+PUf99t/jXMa/aQ2WomKBNibQcZz2965MblFbCU/aVGreRz4jAVKEeadinb393aQzw291NFFcJsmSNyokXrhgOo+tVl+8PrTaVfvD615a3OJHpkH+oi/3F/lXNeLvvWv0aulg/wCPeL/cX+Vc14u+9a/Rv6V91m//ACLn8vzR9PmH+6P5GDZX95p1yLiyupbaYAqJIXKNgjBGR6iqxpKUda+EPmC3eX15fvG93cy3DRxrGhlcsVQdFGew9KIb+7t7S4tIbmWO2udvnRK5CSbTldw6HB9a6fS9GsLjTIJZYNzupJO488mrf9gaZ/z6j/vpv8a9ylw/iKlOM01Z6/1oenDK604qaa1OIt55rS5juIJHimiYOkiHDKw5BBHQii4nmu7mS4nkeWaVi7yOcszHkkk9TXb/ANgaZ/z6j/vtv8aP7A0z/n1H/fbf41p/q3it7r8f8iv7Ir91/XyK/hb/AJBLY/56n+Qq9q//ACBrvP8Ac/rU9tawWcfl26bEznGSeag1f/kD3ef7n9a+ijQlQy9057qLPWVN0sI4S3SZ553qze395qMyzXtzNcSqgQPK5YhRwBk9hVbuau6lfR39wsqWVtaBY1Ty7cEKSB945J5Pfmvz17nyg1b+8jsZLFLmVbSVw7whzsZh0JHQkVHbXU9lcx3NrNJDPEwaOSNtrKR0II6Vr+HbG2vnnW4j3hQCOSMc+1b/APYGmf8APqP++m/xr18JktbFUvawaSfc76GXVa0OeLVmcNJJJNI0kjF5HJZmY5JJ6k1NPf3lzbW9vPcyyQ26lYY3clYwTkhQemT6V2f9gaX/AM+o/wC+m/xpP7A0v/n1H/fTf410/wCrmJ7r8f8AI2/siv3X9fI422v7yyjnS1uZYUuE8qYRuVEiHqrY6j2NVa73/hH9L/59R/303+NH/CP6X/z6j/vpv8af+rmKvuvx/wAg/sev3X9fI4y6vbrULxrq9uJbi4kI3yysWZscck8npXoUP/HvF/uL/KqI0HTQf+PUf99H/GtALtAUdAMCvYyfLKuCcue2ttj0MBgqmHcuZ7i0UUV756gUUUUAFFFFADZP9W/+6f5V5m/3j9a9Mk/1b/7p/lXmb/eP1r5Hiben8/0PBzneHzLt2unCxs2tJLlroq32pZVUIrZ42EHJGPUDmrPhn/kMxf7rfyqtdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kMxf7rfyrwMtt9ap27r8zzML/Hh6o7esC78Ti1u5IDa7vLYrnf6fhXQA8V57q//IWuv+uh/nX12eYythqcZUna7PezLEVKMYum7XNv/hLx/wA+Z/7+f/Wo/wCEvX/nzP8A38/+tXK0V85/bWO/n/Bf5Hj/ANpYn+b8EdUPF65/48z/AN/P/rVi6rqH9o3nniPZwBjOelUKK58RmOJxEOSrK6+RlVxdatHlm7oSlBwQaSiuE5jqU8WhI1T7GTtAGfM/+tWZrGr/ANq+UfJ8vywf4s5rKorvrZlia1P2VSV4+iOqpjK1SHJKV0JRRRXAcp0dl4mFlZRW/wBm3eWMZ34z+lT/APCXr/z6H/v5/wDWrl6QivThm+MhFRjOyXkjsjj8RFKKlovQ6n/hLx/z5n/v5/8AWo/4S8f8+Z/7+f8A1q5Wiq/trHfz/giv7SxP834I9E0zUP7StGnCeWN23Gc+n+NGr/8AIGu/9z+tUPCv/IJb/rqf5Cr+r/8AIHu/+uf9a+rp1Z1ctdSbu3FnuQnKpg3OTu2jzzuau6kunpcKNNkuZIfLXcbhVVt+PmwFJ4z0ql3q7qWnvplysDz20xaNZN1vMJFGRnBI7+o7V+fvc+VNnwj/AK65/wBwfzrqa5bwj/rrn/cH866mvv8AIf8Aco/P8z6nLP8AdkFFFFeyegFFFFABRRRQAUUUUAFFFFABRRRQA2T/AFb/AO6f5V5m/wB9vrXpkn+rf/dP8q80k++31r5Hib4qfz/Q8HOd4fMfJbzRRpJJE6xyAlGZSA30PetPw1/yGY/91v5VRnv7u5tre3nuZZIbcFYY3clYwTkhR2yfSr3hr/kMx/7rfyrwMu/3qnfuvzPMwv8AHh6nbivPdX/5C11/10P869CFee6v/wAha6/66H+dfTcS/wAOHqexnPwRKNOAJOBSVd0of8TS1/66r/OvkYR5pKPc8GKu0ipsb+6fyo2N/dNdnqeq3FpqMdrbwxuz4xu45NMutS1WygM0trAEBxkHP9a76+GwlGp7KdWz/wAP/BPQ+oK0mm2o7+7t+JxxUjqDSdK2L/Xpr+1MDxRqpOcqDmseuOtCnGVqcrr0scFRRi7Rd0JRRRWJA4Ak8DNO8th1U/lUtldNZ3STooLKcgN0rbTxTdSMEW3hyeBwf8a7MPRo1NJyafpf9TanGk1ecrfI57Y390/lQUYDJBArpZfEV7GuWtoAM9s/41NrUxuPDkEzABncEgdO9ddXLIQjL3neKvZxt+pqqNKcZSpzvby/4JyNFFFeQch2vhb/AJBDf9dT/IVf1f8A5A93/wBc/wCtUPC3/IJb/rqf5Cr+r/8AIHu/9z+tfeYX/kVf9us+no/7j8meed6lmt5rdwk0TxsQGAdSDg9DzUR61Zvb+81GZZr25luJVQIHlcsQo4Ayewr4PqfMG54R/wBdc/7g/nXVVyvhH/XXP+4P511Vff5D/uUfn+Z9Tln+7IKKKK9k9AKKKKACiiigDhf+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJor8y+vYr/AJ+P72fG/Wa387+81v8AhI9U/wCfgf8AfC/4Uf8ACR6p/wA/A/74X/Csmij69iv+fj+9h9Zrfzv7zW/4SPVP+fgf98L/AIUf8JHqn/PwP++F/wAKyaKPr2K/5+P72H1mt/O/vNceItTwVNxwevyD/Cstmyee9NorKrXqVf4km7dzOdSc/idy9d30dxZWlutlbwtbqytNGCHmyc5fJIJHTgCorS8lspxNA21wMZxmrF9/ZP8AZ9h9h+1fbdjfbfO2+Xuz8vl45xjrnvWdWNOTjrHRoSbTujWHiTU/+fgf98L/AIVnTTPPK0kh3MxyT71FRW1XEVaqSqSb9WVOrOfxSuFXdJ/5Ctr/ANdV/mKpdqu6T/yFbX/rqv8AMUqH8WPqKn8aNrWZEi8TWzu21F2kk+mam12/tLjTGjiuEkbcOAaz/FR/4mi/9cxWHmrzWip42U3umevLMqmHVahFJqe42iiiuc8UKKKKAFqW3bZMpPAB5NQ0orSlUdOamumomrqxo3k0bwgK4Jz0Fa+of8inafUf1rmB1FdPqP8AyKdp9R/WvdeOnjpVqs1Z8vQ68HFRp1Euxy1FFFfPHKaFpq95ZQmK3l2ITnG0H+dSTa7qE8DwyTZRhhhtHNZlFdCxVdR5FN29TVVqijyqTsFXdSvo7+5WWOytrQLGqeXbqQpwPvHJPJ781SrQ1f8Asr7Wn9ji6+zeUm77Vt3eZj5sbeMZ6d65nuZEVnqN1YMxtpNhcc8A5/Orf/CR6n/z8D/vhf8ACsmjNdNPFV6ceWE2l6msa9SKtGTSNX/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmir+vYr/n4/vZX1mt/O/vNb/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmij69iv8An4/vYfWa387+81v+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJozR9exX/Px/ew+s1v5395rf8ACOan/wA8B/32v+NH/COan/zwH/fa/wCNd1RX1f8Aq3hf5pfh/ke5/Y9Hu/6+Rwv/AAjmp/8APAf99r/jR/wjmp/88B/32v8AjXdUUf6t4X+aX4f5B/Y9Hu/6+Rwv/COan/zwH/fa/wCNH/COan/z7j/vtf8AGu6oo/1bwv8ANL8P8g/sej3f9fI4X/hHtTwSbfoM/fH+NZZGDg9a9Nk/1b/7p/lXmTn5z9a8POMup4JwVNvXuebmGEhhnFRd7l680uazsbK7klgeO8VmRY5Qzrg4O4Dlfx61BaWk17OIYF3OQSBnFNkgmijjkkidI5ASjMpAb6HvWn4Z/wCQ1H/ut/KvMwlJVa0acno3Y46MFUqRg+pGPDmp/wDPuP8Avtf8azpont5njkGHQkEe9emV57q//IWuv+uh/nXr5vldLBwjKm279zux+Chh4pxd7lHtV3Sf+Qra/wDXVf5iqParuk/8hW2/66r/ADrxqH8WPqefT+NG/qMMdz4vsIJk3RySRqynuC3Ire8ZeHdJ07w9JcWlkkUolRQwLHAOc9TXNa/PLa69Dcwj95EFdSRkZByKj1XxZq+sWJtLvyzEWDELFg5FRnFCvPMOeDtFPU7q84RqVFJatnPUU7Y390/lRsb+6fypcrPOsNop2xv7p/KjY390/lT5WFhDWv4atobzxHYW9wgeGSZQynoRnpWVsYfwn8qs2N3Pp19DdwKPNhYOu5cjIqKkJuLUd2RVhKUJKO7R6H498O6TpegJPY2KQSmcKWBJ4wTjk/SuZ1H/AJFO0/3h/WotZ8Xavr1ktpe+WYlcP8kW05AI/rUuo8eE7TI7j+tdOR0atHC1Y1nd2/VDyWhXoYWpCu7yt69TlqKKK5yjQtdIvb2IyW8W9AcZ3Ac1JNoWoQQPNJBhEGSdwrofCv8AyCX/AOup/kKv6vxo11/uf1r6Wjk9CeC+sNu9rnsU8vpyw3tW3e1zzyr2q6XLpV0tvNNBI7RrJmCQSKAwyBkd/aqPepZoJrdwk0TxMQGAdSDg9DzXzXU8cms9Oub9mFvHvKDJ5AxVr/hHNT/54D/vsf41o+Ef9fc/7g/nXU9q+ny3JqGKw6qzbTf9dj2cHl1OtSU5N3OF/wCEc1P/AJ9x/wB9r/jR/wAI5qf/ADwH/fa/413VFd/+reF/ml+H+R1f2PR7v+vkcL/wjmp/88B/32v+NH/COan/AM8B/wB9r/jXdUUf6t4X+aX4f5B/Y9Hu/wCvkcL/AMI5qf8AzwH/AH2v+NH/AAjmp/8APAf99r/jXdUUf6t4X+aX4f5B/Y9Hu/6+QUUUV9EesFFFFABRRRQA2T/Vv/un+VeZv94/WvTJP9W/+6f5V5m/3j9a+R4m+Kn8/wBDwc53h8y1c6jeXdpbWtxcySwWoKwRs2VjBOSB6ZNXfDX/ACGYv91v5VBfaoL3TrC0+xWkP2NGXzYY9rzZOcyH+IjoPQVP4a/5DMX+638q8DLdMTT06r8zzML/AB4eqO3Fee6v/wAha6/66H+dehCvPdX/AOQtdf8AXQ/zr6biX+FD1PYzn4IlKpradra4jmHJRgwB9qgpa+QTaaaPATad0dF/wllz/wA8IfyP+NJ/wllx/wA+8X5H/Gudort/tPF/zs6frtf+Y6L/AISy4/54Q/kf8aP+EsuP+eEP5H/Gudoo/tLFfzsX1yv/ADHRf8JZcf8APCH8j/jR/wAJZcf88IfyP+Nc7RzR/aWK/nYfXK/8x0X/AAllx/zwh/I/40f8JZcf88IfyP8AjXO0Uf2li/52H1yv/MdF/wAJZcf88IfyP+NVdR12fUbcQPGiKG3fKDWQKO9RPH4mpFwlJ2YpYqtJcspaMSiiiuM5ztfC3/IIb/rqf5Cr+r/8ge7/ANz+tUPC3/IIb/rqf5Cr+r/8ge7/ANz+tfeYX/kVf9us+nof7h8meed6tX+o3mqTrPfXMtxKqLGHkbJCjgD6CqvetDV9T/ta7ScWVpabYkj8u1i2KdoxuI9T3Pc18G99j5g1fCP+uuf9wfzrqq5Xwj/rrn/cH866qvv8h/3KPz/M+pyz/dkFFFFeyegFFFFABRRRQAUVWvNQtbBlFxLsLDI4JzVc6/pZ/wCXof8AfLf4VyzxuHg3GU0n6oxliKUW1KST9TRorN/t/TP+fof98N/hR/b+mf8AP0P++W/wqfr+F/5+L70L61Q/nX3mlRWb/b+mf8/Q/wC+W/wpf7f0z/n6H/fLf4UfX8L/AM/F96D61Q/nX3mhIP3T/wC6f5V5m/3j9a7pte0xkYfaRkggfKf8K4V+WJHrXy/ENenVdP2ck7X2+R4ubVYVHHkdy5drpwsrQ2kly10Vb7UsqqEVs8bCDkjHqBzVrw1/yGov91v5VVu9OktLK0umntnF0rMqRShnTBxhwOVP16iptCuYbTU0lnfYmDk4z2rxcBKMcRCTeif6nnYZqNaLeyZ3lee6v/yFrr/ro3867Aa/ph/5eh/3yf8ACuN1GVZ9RnljO5HckH1Ga+g4gxFKtTh7OSdn0Z6ua1qc4x5JXKdT2cH2m7igzt8xgufTNQVb06VYb+CRzhFkBJ9BmvmaSTmr7HiwSckmb3/CIL/z+H/v3/8AXo/4RBf+fw/9+/8A69av9v6X/wA/Q/74b/Cj+39L/wCfof8AfLf4V9isHk/df+Bf8E+h+r5f3X3/APBMr/hEF/5/D/37/wDr0f8ACIL/AM/h/wC/f/161f7f0v8A5+h/3y3+FH9v6YT/AMfQ/wC+W/wp/U8n7r/wL/gh9Wy/uvv/AOCZX/CIL/z+H/v3/wDXo/4RBf8An8P/AH7/APr10wbcoK8gjINV7vULax2faZNm/pwT/Kt55Tl0I88o2Xq/8zWWAwkVeSsvVmD/AMIgv/P4f+/f/wBej/hEF/5/D/37/wDr1q/2/pf/AD9D/vlv8KP7f0v/AJ+h/wB8t/hWH1PJ+6/8C/4Jl9Xy/uvv/wCCZf8AwiC/8/h/79//AF6o6roA020E4uPM+bbjbj+tdF/b+mf8/Q/75b/CsvX9Vs7vThFBNvfeDjaRxg1y43C5ZGhJ0muZba/8ExxNDBRpSdNq/qcpRRRXyZ4R2vhb/kEt/wBdT/IVf1f/AJA13/uf1rF0DVLOzsGinm2Nv3Y2k8YFW9R1qwuNOuIo59zsmFG019rhsVQWW8jmk7PqfRUa9JYPlclexxfc1d1JdPS4UabLcyQ+Wu43Cqrb8fNgKTxnpVKrupae+mXKwPPbTFo1k3W8wkUAjOCR0PqO1fFO1z542PCP+uuf9wfzrqq47w5e21jJO1xJsDKAOCc810H9v6YTxdD/AL5b/CvtslxdCng4xnNJ67s+iy6vShQSlJJmjRWb/b+mf8/Q/wC+W/wo/t/TP+fof98t/hXrfX8L/wA/F96O/wCtUP5195pUVm/2/pn/AD9D/vlv8KX+39M/5+h/3y3+FH1/C/8APxfeg+tUP5195o0VnDXtMJwLoZ/3G/wrRUhlDA5BGRWlPE0qt/ZyTt2ZcKsKnwO5yni7/XW3+4f51gvbTRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+lfA5x/vs/X9D5bMP95kRQ281y5SCN5GALEIpJx3PFRVZs7+706YzWVzLbyshQvE5UlTwRkdjVavNOMlmt5rZwk0bxsQCA6kEg9DzQtvM0DTiJzEpCtIFO0E9iakvb+81GYTXt1NcSqgQPK5YhRwBk9hQl/dx2MlilzKtpK4d4A52Mw6EjoSKWoEMUUk0ixxo0jscKqjJJ9AKRlZWKsMEEgg9qktrqeyuY7m1mkhniYMkkbFWUjuCOQaZJI8sjSSOzyMSzMTkknqTT1AdJbzRRpJJE6xyAlGZSA30Pelitppw7Qwu4RdzlFJ2j1OOgp89/d3Nvb289zLLDbgrDG7krGCckKO2T6U601G8sFnW0upoBcRmKYROVEiHqrY6j2pa2AqYqWaGS3laGaN45F6q4wR9QaiBqxeXl1f3b3V7PLcXEhy8srFmbtyT1pgM+zzeR9o8p/J3bfM2nbu64z0z7UQQTXMoigieSQ9ERSxP4CpPt13/AGf/AGf9qm+x+b532fedm/GN23pnHGetFlfXmm3aXVjcy21ymdksLFGXIwcEc9CRS1sBWxUskEkao0kbIHXcpIxuHqPUVFVi4vLm7WFJ55JVgjEcQdiRGmSdq56Dk8e9MBkdvNMkjxxu6xjLlVJCj1PpUa/eH1qxb393aQzw29zNFFcLsmSNyokXrhgOo+tV1+8PrTW4I9Lg/wCPeL/cX+Vc14v+9a/Rv6V0sH+oi/3F/lXNeLvvWv0avus3/wCRc/l+aPp8w/3R/I52GCa5k8uCJ5JME7UUk4HXgVFVmyv7zTrkXFjdTW04BUSQuUbBGCMj1FVq+EPmCWa3mtmUTRPGWUMA6kZB6EZ7UJbzSwyTJG7Rx43uFJC56ZPapLu+vL943u7mW4aNFjRpXLFUHRRnoB6UsN/eW9pcWkN1LHbXO3zolchZNpyu4dDg+vSlrYCCONpZFjjRndjhVUZJPoKJI3ikaORGR1OCrDBB9Kdb3E1pcx3NvI8U0TB0kQ4ZGHIII6EGi4uJru5kubiR5ZpWLvI5yzMeSST1NPUAe3mjhjmeN1jkzscqQGx1we9ENvNcOUgieRgCSEUk4HU8VLNf3lxaW9pNcyyW1vu8mJnJWPccnaOgyfTrSWd/eadM01lczW8rIULxOVJU8EZHY0tbAVqlmt5rZwk0TxsQGAdSCQeh5qKrN7f3mozLLe3MtxKqCMPK5YhRwBk9hTAjFvM0DTrG5iUhS+07QfQmmxRSTyLHGjSOxwqqMkn0AqZL+8SwksUupVtJXDvAHOxmHQkdCRTLW6nsrmO5tZpIZ4mDJJGxVlYdCCOho1AjZWRirqVIOCD2p8lvNFFHJJE6xyAlGZSA2OuD3pskkksjSSOzyMSzMxyST1Jqee/u7m2t7ee5lkht1Kwxu5KxgnJCg9Mn0o16ARRW80yu0cbuIxucqCdo9T6CosVatr+8sknS2uZYUuEMcyxuVEiHqrY6j2NVc0eoE0kMlvP5U0bxyKRlHGCPwr0aD/j3i/3F/lXnl1e3Wo3r3V7cS3FxIQXllcszduSetehwf8e8X+4v8q+n4a3qX8v1Payf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/cP86yLhdOXT7Q20ty16d/2lXVRGvPy7CDk8dcgYNeVnC/22fr+hw5h/vMiTRLeG61WKGdN6NnK568Gus/sDTP+fYf99N/jXG6befYL+O4Kb9mflzjORit7/hLl/59D/38/wDrV35TXwNOk1iUnK/VX0OrA1cLCm1WSvfsaf8AYGmf8+o/77P+NH9gaZ/z6j/vs/41mf8ACXL/AM+Z/wC/n/1q0tJ1gaq8iiHy9gz97Oa9qjWyqtNU6cU2/wC7/wAA9CnUwVSShFK78v8AgA2g6Yqs32YcAkfOf8a4V+HI7Zr0uT/VP/un+VeaP98/WvI4hoU6TpqnFK99vkcGbUoU3HkVrly6vo7mys7dbK2ha3VlaaIEPNk5y+SQSOnAFTaFbQ3WppDOm9CCSM46CobpNOWytGtJLlroq32lZVUIrZ42EHJGPUCjTL7+zr1bjy9+3IxnFeFg3TjVi5/Cnr955tFxVSLnsdf/AGBpf/PqP++j/jR/YGl/8+o/76P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArV9f9cyfsv8AwH/gHvfWMv7L7v8AgGp/YGl/8+o/76P+NH9gaX/z6j/vs/41l/8ACXr/AM+Z/wC/n/1qP+EvX/nzP/fz/wCtR9cyfsv/AAH/AIAfWcv7L7v+Aan/AAj+mf8APsP++j/jXMa/aQWWomKBNibAcZzWp/wly4/48z/38/8ArViarqH9o3v2jy/L+ULjOeleZmuIwFSglh0lK/RWOPHVcLOnailf0Es76O0truJrK2uDcR7FkmBLQ853JgjB+oNUh94fWrlmumtbXZvZLlJxGDbCFVKs+ejknIGPTJqkDgg185G1zyD0yH/URf7i/wAq5rxd9+1+jUsfi0JGq/YydoAz5n/1qzdY1caqYj5Pl+Xn+LPWvrMxzLDVsG6VOWunRnu4vGUamG5IvXQraZex6fei4ksra9UKy+TcglDkYzwQcjr1qlV3TV09r0DVJLmO12tlrZVZ8444JAxnFUjXyelzwjstL0bT7jTIJ5YNzsCSdx9at/2Bpn/PqP8Avs/41iWPiUWdlFb/AGXdsGN2/Gf0qx/wlw/58z/38/8ArV9hh8XlSoxU0rpa+7/wD36VfAqnFSSv6Gn/AGBpf/PqP++j/jR/YGl/8+o/77P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArVt9cyfsv/Af+AafWcv7L7v+Aan9gaZ/z6j/AL7P+NVtR0XT4NOnlSDa6JkHcaqf8Jev/Pmf+/n/ANaobvxOLqzmtxabfMXbnfnH6VjiMXlTpSUErtae7/wDOrXwLg1FK/oc73q5qV9Hf3CypZW1oFjVPLtwQpwMbjknk9+apDk1d1JdOW4UaZJcyQeWu43CKrb8fNgKTxnpXx73PANHw5Y299JOtxHvCqCOSMc+1dB/YGmDpaj/AL7P+NY/hH/XXP8AuD+ddSzbVJ64BNfa5NhcPPBqc4J77o+jy+hSlh1KUU2Zv9gaX/z6j/vs/wCNH9gaX/z6j/vs/wCNZh8XAEj7Gf8Av5/9ak/4S8f8+Z/7+f8A1qf1zJ+y/wDAf+AH1jL+y+7/AIBNq+j2Ftpk0sUGx1xg7ie4rkc8+tb9/wCIxfWUlv8AZim/HO/OOc+lYHevnc2qYapWTwy923RW1PJx06M6idHaxc1C8jv9Rkuo7SC0SQgiC3BCJxjgEk9s9e9d9D/x7xf7i/yrgdQWxXUZF02S4kswR5bXCqshHuASOue9d9D/AMe8X+4v8q9Thj4p27I7cn+KfyOZ8XD/AEi2/wB0/wA6x7jTXttNs71p7Z0ut+2OOZWkTacfOo5XPbPUVseLVJmt8An5D/Oud2P/AHT+VeVm8W8bO3f9Dix6/wBpkWtN0+TU7loI57aErG0m64mEakAZwCep9B3qkRzS7WHUGkrzbNbnEXdS0+TTLlYJJ7aYtGsm63mEigEZwSOh9R2rZ8If625/3R/Ouemt5rZwk8TxsRkB1IOD0PNdD4Q/1tz/ALo/nXpZN/vlP+uh2Zf/ALzE6eT/AFb/AO6f5V5m/wB4/WvTJP8AVv8A7p/lXmb/AHj9a9fiben8/wBDvzneHzLl3p0lpZWd009tIt0rMqRShnTBxhwOVP16il0/TJNRW6eOe1i+zQtMwnmWPeB/CufvN7Dmq8kE0UUckkTpHIMozKQG+h71CATwOa+Us2tGeIAFW9SsJNMv5bOSaCZ4yMyW8okRsjPDDg1W2N/cP5U08GqaYy7/AGc/9j/2l59t5fn+R5PnDzc7c7tnXb23dM0aZp76pqEdpHPbQNJnElzKI4xgE8seB0/Oq5t5vs/2jyn8ndt8zadu7rjPTNRUrN3sxAeuKt3dk9pHbO8sEguIRMBFKHKDJG1sfdbjoecEVW2N/cP5UbH/ALh/KnysLFuz06S9trudJ7aMWsfmMs0wRn5xhAfvH2HNUqdsb+6fyo2N/cP5U1FjsIDXv/g3wb4O8b+C0lHh2fT5lzGZ/MfLPjl0YnDDPbGAeK8C2N/cP5V3f/C2/Fq6HHpcMtvAqLsE0NuEfb2Ax8o+oANeZmeFxVenGOHfLJPe7X/Dlwst0c0/h6ZfEd3oou7JZbaSSMzSThIm2Z6MeOccetY1PKyeh/Km7G/un8q9GMJpa6kWLmoadJp0sUck9tMZYlmBt5hIFDdiR0Ydx1FFvpz3OnXl6s9siWuzdHJKFkfccfIp5bHfHQVU2P8A3T+VIQR1BFPllYLE9nbteXsNqkkUbSuEDysERcnGSTwB70Xds1neTWzSRSNE5QvEwdGwcZUjgj3qKON5ZFjjRndjhVUZJPoBRLG8UjRyIyOpwVYYIPoRS6iLVxp0ltptnetPbOt1v2xxyhpE2nHzqOVz2z1FGnafJqdy0Ec9tCVjaTdcTCNSAM4BPU+g71TCk9AaUqwGSpFHLKw7Dau6lp76ZcrBJPbTFo1k3W8wkUAjOCR39R1FUhUs1vNbOEmieNiAwDqQcHoeaBHQ+Ef9dc/7g/nXTyf6t/8AdNcx4R/11z/uD+ddPJ/q3/3TX3eTf8i9fM+ny7/dV8zzNvvH61cu9Ne0sbO6ae2dbpWZUimVnTBxh1HKn61Tb7x+tSvbzRRxyPFIkcgJRmUgNjrg96+FlufMMnsdOkv4rqRJ7aIW0RlYTTBC4HZAfvN7DmqWOaUZPAFLsb+4fyoSYFu/sW0zUpLOSaCZoyAZLeUSIeM8MODXfwf8e8X+4v8AKvNlVtw+U9fSvSYf+PeL/cX+VfT8NJqU7+R7WT/FP5DzRj2rB8Q6nd2EsK28mwMuT8oPf3rE/wCEi1P/AJ+B/wB8L/hXp4nOsPQqulOLbXodtbMaNKbhJO6Os1cf8Si64/grz01pTa7fzwvDJNlHGGG0c1m55r5nNsbTxdVTpqySPGx2JhiJqUFZFu8vrzUZ1mvbmW4lVAgeVyxCgYAyewrb8I/625/3R/OsfUr5L+5WWOytrQCNU8u3BCnA+8ck8nv2plnqNzYMzW8mwsMHgGuXL68cPXjVktEY4aqqVZTlsj0KT/Vv/un+VeZv94/WtX/hItTwR9o6jB+Qf4VlFsnNd+b5jSxrg6aenc6cwxcMS4uCtYsz313c21vbz3MskNupWGN3JWME5IUdgT6Ve8Nf8hmP/db+VVbu+jubKzgSytoWt1ZWmjB3zZOcvk4yOnAFWvDX/IZj/wB1v5VwZcv9qp6dV+ZzYX+ND1R2+PavPdX/AOQtdf8AXRv516EK891f/kLXX/XRv519LxKkqULdz184XuRGfb7v+zv7P+1TfY/M87yN52b8Y3bemccZ9Kk0n/kJ2v8A11X+Yo+3R/2P9g+xW3mef5v2vB83GMbM5xt79M571VileCVJIzhkIYH0Ir5KlJRmpNbM8KLtJNnpePajA9K4X/hI9T/5+B/3wv8AhR/wkep/8/A/74H+FfYriHCfyv7l/mfQLNqH8rO6x7UY9q4X/hI9T/5+B/3wP8KUeI9TLAfaB1/uD/Cn/rDhP5X9y/zD+1qH8r/A7nHtRj2pkR3QRk9SoJ/EVjeItSurAwC3k2bwc8A5r1sTiaeHo+2kro761aFKn7SS0NzHtRj2rhf+Ej1P/n4H/fA/wo/4SPU/+fgf98D/AAryf9YsJ/K/w/zOD+1qH8r/AAO5x7VjeKAP7JH/AF1H8jXP/wDCRan/AM9x/wB8D/CorvWL29hEU8u6MHONoHNcmNzvDV6EqcYtN+hjicyo1KThFO7KlvPNaXMdxBI8U0TB0kQ4ZWHIII6Gi5nmu7mS4uJHlmlYu8jnLMx5JJPU0+znW2vYZ3gjnWN1cxSglHwc4bB6H6ii8nW5vZp0gigWR2cRRAhEyc4XJJwPqa+V6nhnWeFh/wASlv8Arqf5Cr2rj/iUXX/XOqPhb/kEN/11P8hV/V/+QPd/9c/6193hUv7K/wC3WfTUUvqPyPPO9Wb2/vNRmWa9uZbiVUCB5XLEKOAMnsKrd6u6lfR39wsqWVtaBY1Ty7cEKcD7xyTye/NfCPc+ZNnwl/r7n/dH866eT/VP/umvPbPUbmwZjbybCwweAatnxDqeCPtAweD8g/wr6XL84oYbCqjJNvX+tz2MLmFOjR9nJO5lN95vrVme+u7m2t7ee5lkht1Kwxu5KxgnJCg9AT6VVzkk1eur6O5sbO3SytoGt1ZWmiBDzZOcvk4JHTgDivmnueOWvDX/ACGov91v5V2+OelecWl3NZTCaF9rjgHGetXT4i1PtcD/AL4H+FfQ5XmtDCUXTqRbd76HrYHHUqFNxmm3c7rHtRmuHXxFqe4ZuBj/AHF/wrtojuhjJ6lQT+VfRYHMqOLcvZRasevhcZDENqCtY5fxb/rbf/cP86yLkacNPtGt5Llr07/tKyKojXn5dhByeOuQMGtfxd/r7b/cP86yLjTnttPs71p7Z0ut+2NJg0ibTj51HK57Z6ivjs5t9dn6/ofPY/8A3mQacunvcsNSkuEh8tipt1Vm34+UEEjjPXvVHvU9ray3dwsMKb3boM4q8fDmp/8APAf99r/jXHSw1aouanFteSOeFGpNXjG5BqQ01blV0yS5kg8tSxuFVW34+YDBPGeneiNdP/suZpJLkagJFESKq+UU7ljnIP0GKn/4RzU/+fcf99r/AI0f8I5qf/PuP++1/wAa0+oYr+SX3Mv6tW/kf3FOxFo19CL5pktCw81oVDOF77QSBn6kVFN5fnv5JYxbjsLjnHbPvWj/AMI5qf8Az7j/AL7X/Gj/AIRzU/8An3H/AH2v+NH1DFf8+39zD6tW/kf3EF2unCytDaSXDXRVvtSyqoRWzxsIOSMeoFWvDX/IZj/3W/lTT4d1P/n3H/fa/wCNaWiaPe2WppNPDtQAgncPSuvAYLEQxMHKDsmuj7m+GoVVWi3F2v2OorzzV/8AkLXX/XRv516GOa47UNC1Ge/uJY4Mo7lgdw6Zr6DiGjUq04KnFuz6HqZrTnOMeVXM3Gm/2Pu8y5/tPz8bNi+V5W3rnOd2e2MYo0xdPbUIxqktylnz5jWyK0g4OMAkDrjv0qx/wjmp/wDPuP8Avtf8aP8AhHNT/wCfcf8Afa/418p9QxX8kvuZ4n1at/I/uMvv7VbuhYrHbfZHndzEDOJVACyZOQuDyuMcnB61ZHh3U/8An3H/AH2v+NUrqzmspvKnTY+M4zmoqYatTXNOLS9CJ0akFeUWiayXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9axjbmM0elwf6iL/cX+Vc14u+9a/Rq6WH/AFEX+4v8q5rxd961+jV91m//ACLn8vzR9Pj/APdH8jF0xNPa9C6pJcpa7Wy1sqs+cccEgYziqVXdM06TVL0Wsc9tCSrNvuZhGgwM9T3/AK1Sr4PS58wXtQXT1ki/s6S5eMxKZTcKqkSfxAYJ+X0PWi3GnHTrs3Mlyt6Nn2ZY0Uxtz828k5HHTANSQaHf3MKzRQ5jYcHcP8ak/wCEc1P/AJ9x/wB9j/GuqOBxMopqDa9DZYeq1dRf3FGzFs13ELt5Vti6+a0QBcLnnaDwTj1IFF4LdbuYWjytbB28ppQA5XPGQOAcehIq7/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjT+oYn+R/cx/Vq38j+43/C3/ACCW/wCup/kKv6v/AMga7/65/wBag0K0ms7BoZ12vv3dQeMCreowyXGmzxRjLsmFFfa4anNZbyNa2Z9FShJYPla1secd6u6kunLcL/ZslzJD5a7jcIqtvx82ApIxnp3qx/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjXxTwGKv/Df3M+d+rVv5H9xXjXT/AOzJmkkuRqAkAiRVXyinfJzkH8KjsRaNewi+eVLUuPNaFQzhe+0EgZ+pFXP+Ec1P/n3H/fa/40f8I5qf/PuP++1/xo+oYr/n3L7mH1at/I/uM+by/Pk8ksYtx2FxyR2z71Zu105bKzNpJctdFW+1LKqhFbPGwg5Ix6gVP/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjR9QxX8j+5h9WrfyP7iCyXTTFdfbpLlJBETbCFFYNJ2D5IwvuMmqX8VaE+iX9tC00sOI16ncDis/HP8AjWNSjUpStUTT8zOdOUHaSsXNQWxXUZF0153tMjy2uFVZCPcKSOue9d/B/wAe8X+4v8q4C/sW03UZLR5oJmjIBkt5RIh4zww4Nd/B/wAe8X+4v8q+k4YtzT9Eevk/xT+Ry/i7/XW3+4f51gvbzRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+leTnH++z9f0OHMP95kW/Dv8AyG4P+BfyNd1n3rzFWKnI60pd/wC8fzrpy3OPqVJ0+S+t9zXB5h9Wg48t7npufejPvXmXmN/eP50eY394/nXof6z/APTv8f8AgHX/AGz/AHPx/wCAem596M+9eZeY398/nR5jf3j+dH+s/wD07/H/AIAf21/c/H/gHpufejPvXmXmN/fNHmN/eP50f6z/APTv8f8AgB/bX9z8f+Aem596M+9eZeY398/nR5jf3j+dP/Wf/p3+P/AD+2v7n4/8A9Nz70Z968y8xv7x/OjzH/vH86X+s/8A07/H/gB/bP8Ac/H/AIB6bu964vxT/wAhg/7i/wAqx97f3j+dNJJPJzXBmOc/XKSp8ltb7nLi8w+sQ5OWxJHbzTJI8cTusYy7KpIUep9KjX7w+tWLe/u7SGeG3uZoorhdkyRuVEi9cMB1H1qtXhrc809Mh/49ov8AcX+Vc14u+9a/Rv6VzQdv7xpCxPUk172Mzr6xh/Yclvn/AMA9PEZj7al7Llt8ySC3muZPLgieR8E7UUseOvSoe9WrK/vNOuRcWN1LbTgFRJC5RsEYIyPUVWNeCeYegaJ/yBrb/dP8zV8keteZb2Axkijex/iP519NQ4i9lTjT9neytv8A8A9mnm3JBR5L28/+Aem596M+9eZeY398/nR5jf3z+da/6zf9O/x/4Bf9tf3Px/4B6bn3oz715l5jf3j+dHmN/eP50f6z/wDTv8f+AH9s/wBz8f8AgHpufejPvXmXmN/fP50eY394/nR/rP8A9O/x/wCAH9tf3Px/4B6bn3oz715l5jf3z+dHmN/fNP8A1n/6d/j/AMAP7a/ufj/wD03PvRn3rzLzG/vH86PMb++aP9Zv+nf4/wDAD+2v7n4/8A7vX+dEuOfT+YrgzS729SaTNeHmWO+u1VU5baWPNxeJ+sTU7WJZIZrecxTRvHIpGUcYI/A16NB/x7xf7i/yrzy6vbrUb1rq9uJbi4kILyyuWZu3JPJr0OD/AI94v9xf5V6/DW9T5fqehk/xT+RzPi3Jnt8f3D/Osi5vkn0+ztVsreJrffunjB8ybccjeScHHQYA4rvpraCXBlhSQjgF1BxUP2Cz/wCfWH/vgVtjskqYnESqqSVzTE5bOrWclI4bTb2OwuWlksba7BjZNlwCVGRjIwRyO3aqRHtXo39n2f8Az6w/98Cj+z7P/n1h/wC+BXL/AKuVU/jX4nP/AGTP+ZHDalepf3Kyx2NtaARqnl26kKcDG45J5PfmlivUj0qayNlbvJJIri5YEyoB/CpzjB+hruPsFn/z6w/98Cl+wWf/AD6w/wDfApf6t1NudfiP+yKn8yOAsbhbO+huHtorlY3DGGcEo+OzYIOPxFRzP5szyCNUDMWCL0X2HtXoX9n2f/PrD/3wKP7Ps/8An1h/74FP/Vyrf41+If2RU/mRw93epc2VnbpZW8LW6srTRKQ82TnL5OCR04ApdPv0sI7pXsLW68+JogZ1JMRP8a4I+Ye+RXcf2fZ/8+sP/fApPsFn/wA+sP8A3wKn/Vup8POvxH/ZFT+ZHnIHtVvUrtb+/luo7SC0WTBEFuCI04xwCSffr3ru/wCz7P8A59Yf++BR/Z9n/wA+sP8A3wKr/Vyr/OvxJ/smf8yOG+3L/Y/2D7Dbb/P877XtPm4xjZnONvfpnPejS71NOv47mSxt7xUzmC5BMbZBHIBB4znr1Fd1/Z9n/wA+sP8A3wKT7BZ/8+sP/fApf6t1LW51r6j/ALIqfzI85x7Vbu7pbmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBXd/2fZ/8+sP/AHwKP7Ps/wDn1h/74FP/AFcq3+NfiL+yZ/zI4ezvUtLa7heyt7g3EexZJgS0POdyYIwfqDVaF/LmSQosgVgSjdGx2PtXoP8AZ9n/AM+sP/fAo/s+z/59Yf8AvgUf6uVb/GtfUP7Jn/Mjg9Qulvb6a5jtILVZG3CGAEInsASTj8ac92r6ZHZizt1dJWkNyAfMYEAbSc4wMZ6d67r7BZ/8+sP/AHwKX+z7P/n1h/74FL/Vupb41p6j/sip/MjhdMvV069FxJZW94ArL5VyCUORjPBByOvWqWD6V6P/AGfZ/wDPrD/3wKPsFn/z6w/98Cn/AKuVb351+If2RU/mRwuo3qX8sTpY29qI4ljK26kByP4jkn5j36Cltr1LfTry1ayt5XuNm2eRT5kO05+Qg456HIPFdz/Z9l/z6w/98Cj+z7L/AJ9Yf++BS/1bqfDzr8R/2PU/mRwFnMttewzvBFOsbhzFKCUfBzhsEHB+oou5xd3k06W8UAkcuIogQiZOcLkk4H1Nd/8A2fZ/8+sP/fAo/s+z/wCfWH/vgUf6uVd+dfiL+yKn8yOGub1LjTrS1Wyt4nt9+6eMHzJtxz85Jxx0GAOKTTb2OwuWlksba7BRk8u4BKjIxuGCOR25xXdfYLP/AJ9Yf++BR9gs/wDn1h/74FH+rdTbnX4j/sip/MjzjFXdSvVv7hZUsra0Cxqnl2ykKcDG45J5Pfmu5/s+z/59Yf8AvgUf2fZ/8+sP/fAp/wCrlX+dfiT/AGTP+ZHDR3qJpc1kbG3d5JFcXLA+agH8KnOMH6Go7G4Wzvobh7aK5WNwxhnBKPjs2CDj8RXff2fZ/wDPrD/3wKT7BZ/8+sP/AHwKX+rlT+da+o/7IqfzI89mfzJnlCLGGYkInRfYe1Wru9S5srSBbK3ga3VlaaJSHmyc5fJwSOnAHFdx/Z9n/wA+sP8A3wKP7Ps/+fWH/vgU3w5Vv8a09Rf2TP8AmRw9lepaR3SPZW1yZ4jGGmBJiJ/iTBHzfXIqlg+lejf2fZ/8+sP/AHwKPsFn/wA+sP8A3wKFw5Vu/fX4j/sip/MjhdQu1v8AUZLqOzgtFkIxBbqRGnGOAST2z1rvof8Aj3i/3B/KovsFn/z6w/8AfAqwQB8o6DgV6+U5ZPBOXNK97HfgcHKg5Xe5/9k=\"}]}"},{"id":1245,"title":"PACMAT 04 - Optimized Ghosts, Equal Speed, 10 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  This may be an unclearable level with equal speed for PACMAT and Ghosts. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m PACMAT_Ghosts_004.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4 Alfonso Enhanced\u003e (MP4) The ghosts spread and then converge to block all paths.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Max 114 remaining dots out of starting 244\r\n\r\n*Scoring:* Updated 2/06/13\r\n\r\n  if dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\r\n  else score= 2000 - 200 * Lives Remaining + moves\r\n\r\n*Hint:* Algorithm that finds optimum path to nearest dot will Pass\r\n\r\n*Theory:* Usage of non-adjacent Ghost locations needed for Total Success\r\n\r\n\r\n*Near Future:* Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.  This may be an unclearable level with equal speed for PACMAT and Ghosts.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m\"\u003ePACMAT_Ghosts_004.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4\"\u003eAlfonso Enhanced\u003c/a\u003e (MP4) The ghosts spread and then converge to block all paths.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Max 114 remaining dots out of starting 244\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Updated 2/06/13\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eif dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\r\nelse score= 2000 - 200 * Lives Remaining + moves\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eHint:\u003c/b\u003e Algorithm that finds optimum path to nearest dot will Pass\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e Usage of non-adjacent Ghost locations needed for Total Success\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',9000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=10; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n   gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Remaining %i\\n',lives)\r\n%\r\n% Total dots 244\r\n% To Pass need to leave at most 114 dots\r\nassert(dots\u003c115,sprintf('Max Dots 114, Dots Remaining %i\\n',dots))\r\n\r\n%assert(lives\u003e0,sprintf('Three Captures\\n')) % ) Lives allowed\r\n%assert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) \r\n\r\nif dots\u003e0 % Give credit to staying alive\r\n %score=1000-floor(movepac/10)+20*dots;\r\n score=3000-floor(movepac/50)+50*dots;\r\nelse\r\n %score=1000-100*lives+movepac;\r\n score=2000-200*lives+movepac;\r\nend\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 9000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2013-02-06T20:15:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T19:18:09.000Z","updated_at":"2026-04-02T18:51:43.000Z","published_at":"2013-02-03T20:43:55.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing at least 130 Yellow Dots while avoiding the wandering ghosts in 10 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. This may be an unclearable level with equal speed for PACMAT and Ghosts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_004.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_004.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_004.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_ANCb.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Enhanced\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) The ghosts spread and then converge to block all paths.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Max 114 remaining dots out of starting 244\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Updated 2/06/13\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[if dots remaining\u003e0 score= 3000 - moves / 50 + 50 * dots;\\nelse score= 2000 - 200 * Lives Remaining + moves]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHint:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Algorithm that finds optimum path to nearest dot will Pass\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Usage of non-adjacent Ghost locations needed for Total Success\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Same Ghosts that find minimum path to PACMAT assuming other ghosts are walls. Increase PACMAT relative speed after each Ghost capture of PACMAT.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":44850,"title":"X O X O","description":"On a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\r\n\r\nAssumptions/constraints:\r\n\r\n* All squares are populated.\r\n* \r\n* Number of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\r\n* \r\n* Minimum Grid size (n) = 1x1\r\n\r\nThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the\r\noptions for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition.\r\nThe maths is relatively simple, and is the solution to \"choose k from n\".\r\n\r\n19-Feb-19 -  Test suite updated to take into account solutions where the opposing player goes first.\r\n\r\n","description_html":"\u003cp\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/p\u003e\u003cp\u003eAssumptions/constraints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAll squares are populated.\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003eNumber of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003eMinimum Grid size (n) = 1x1\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the\r\noptions for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition.\r\nThe maths is relatively simple, and is the solution to \"choose k from n\".\u003c/p\u003e\u003cp\u003e19-Feb-19 -  Test suite updated to take into account solutions where the opposing player goes first.\u003c/p\u003e","function_template":"function y = xoxo(n)\r\n  y = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = 252;\r\nassert(isequal(xoxo(n),y_correct));\r\n%%\r\n% sneaky... With n=1 this is a single player game though the outcome is 2 as you can still choose 'x' or 'o' to play.\r\nn = 1; \r\ny_correct = 2;\r\nassert(isequal(xoxo(n),y_correct));","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":179218,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":40,"test_suite_updated_at":"2019-04-08T12:17:28.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-02-15T13:48:23.000Z","updated_at":"2026-03-04T22:02:57.000Z","published_at":"2019-02-15T13:54:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssumptions/constraints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAll squares are populated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNumber of naughts and number of crosses can only differ by a maximum of 1. I.E. The game was played until the board was full\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMinimum Grid size (n) = 1x1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a discrete maths question, which can be simplified by focussing on one of the options. If we look at the options for locating just the crosses on the grid, we know that the remaining locations must contain naughts and so similarly for the opposite condition. The maths is relatively simple, and is the solution to \\\"choose k from n\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e19-Feb-19 - Test suite updated to take into account solutions where the opposing player goes first.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44851,"title":"X O X Oh!","description":"_This follows on from problem 44850 - X O X O_ \r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003e\r\n\r\nOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\r\n\r\nAssumptions/constraints:\r\n\r\n* All squares are populated.\r\n\r\n* Number of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\r\n\r\n* A solution with more than one \"win\" cannot be valid as the game would have finished before the board was full!","description_html":"\u003cp\u003e\u003ci\u003eThis follows on from problem 44850 - X O X O\u003c/i\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\"\u003ehttps://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003c/a\u003e\u003c/p\u003e\u003cp\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/p\u003e\u003cp\u003eAssumptions/constraints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAll squares are populated.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eNumber of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eA solution with more than one \"win\" cannot be valid as the game would have finished before the board was full!\u003c/li\u003e\u003c/ul\u003e","function_template":"function y = xoxo(n)\r\n  y = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = 63;\r\nassert(isequal(xoxo(n),y_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":158257,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2019-02-15T16:42:29.000Z","updated_at":"2024-11-05T01:44:13.000Z","published_at":"2019-02-15T16:42:29.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis follows on from problem 44850 - X O X O\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://www.mathworks.com/matlabcentral/cody/problems/44850-x-o-x-o\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a noughts and crosses board, how many possible unique combinations are there given a square grid of length n?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssumptions/constraints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAll squares are populated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNumber of naughts and number of crosses can only differ by a maximum of 1 I.E. The game was played until the board was full.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA solution with more than one \\\"win\\\" cannot be valid as the game would have finished before the board was full!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":60780,"title":"Play Hocus Focus","description":"The card game Hocus Focus starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \r\nWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\r\nYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, EmilyR and JessicaR, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\r\n\r\nImage adapted from ultraboardgames.com","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 624.8px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 312.4px; transform-origin: 407px 312.4px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe card game \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://boardgamegeek.com/boardgame/1199/hocus-focus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eHocus Focus\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/players/18927291\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eEmilyR\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/players/8608872\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eJessicaR\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 357.8px; 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 178.9px; text-align: left; transform-origin: 384px 178.9px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"427\" height=\"352\" style=\"vertical-align: baseline;width: 427px;height: 352px\" src=\"data:image/jpeg;base64,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rNfs7H1+5g/nX53fAjxVpfjfwLda14B8ZfEi/wBP+PPjW10zwf4Usfibfyy6bpVpaahfCee6u57iXS21CO1u7l1txHJ5X2WHYsqysOn/AOCeXxx+KH7QnjLRbrXvih4gt/CPgX4Z6J4m1G2sobC8fxJPdax4gjh+0XcluxdDY6bbmRofKeRjGwkQbw75mKyPtmX4f+FrfXrfSJLucancW8l3BZPq0nnywxtGryrHvyyI0sQZgCFMiA/eFWE+GqvDHbReItdhWEEhEkgYhSTgnMROOCAc9vWvjX/gnh4k8cfGD9pn4f8Ajjx/4obxJrWvfAu28UPajTrWzXQG12/t7hrKAwKpa3j+wKitLukYxOzSNlQnU/sXfsveC/i948uvjrqUK2PxOi+KvjRYNetBFDqGsafaX+q6HBplzKyGSayS2t4pktwwCSW8LjBVgxzSE4Re59TWvwojgLeZrWtXW7p5rQ/L9NsYqZfhbYj711fSf7zJ/wDE102MUVUa01szJ4Wk94nNxfC7T45o38y6by23AFlwT78VP4M8AWngg3jW813cSXsnmSPcMrMOuANqjgZrdoolWnJWkyoUYQ+FBjmiiiszUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo60UUANMe7uc+tQX2kWupmP7RBDMYSWjMkYfYSCpIyDjKkj6EjvVmigDzvVf2QvhPr3h280e/wDhj8Pr7SdSlinu7K48O2ctvdSRbzE8kbRlWZPMk2kgld7Y6nOx4H+BHgv4ZpcJ4d8J+HdChutPttJkisNOhtoms7YSC3ttiKB5MQmlCR42r5r4A3HPWUUAeU/s9/sS/DP9lfVLq88CeH7jRp7vSrTQz5urXl8sNhaSXElraRLcSyLDDE13PsjjCqocKBtVQuT8Nf2BvAvwr+ODeOtOn8UXF1b3eqahpelXusS3Gk6FdanL52oXFpbtxHJcSF2bJYL5soQIJGB9sooAKKKKACiiigAooooAKKKKAP/Z\" data-image-state=\"image-loaded\"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eImage adapted from \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.ultraboardgames.com/hocus-focus/game-rules.php\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eultraboardgames.com\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = HocusFocus(x,c)\r\n%  c = 5x12 matrix corresponding to the table cards\r\n%  x = 5x1 vector corresponding to the card drawn from the deck\r\n%  y = number from 1 to 12 indicating the card with nothing in common with the drawn card OR 'No cards work'\r\n  y = randi(12);\r\nend","test_suite":"%%\r\nc = [1 2 2 2 1 1 1 1 2 1 3 2\r\n     2 3 3 1 4 2 4 2 4 1 1 3\r\n     1 1 3 1 3 1 4 2 1 4 4 2\r\n     4 3 3 4 2 4 4 4 2 3 3 1\r\n     1 1 1 1 2 1 3 3 2 2 2 3];\r\nx = [2 1 4 2 1]';\r\ny = HocusFocus(x,c);\r\ny_correct = 8;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [1 2 2 2 1 1 1 1 2 1 3 2\r\n     2 3 3 1 4 2 4 2 4 1 1 3\r\n     1 1 3 1 3 1 4 2 1 4 4 2\r\n     4 3 3 4 4 4 4 4 2 3 3 1\r\n     1 1 1 1 2 1 3 3 2 2 2 3];\r\nx = [2 1 4 2 1]';\r\ny = HocusFocus(x,c);\r\ny_corrects = [5 8];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 2\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 1 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\ny_correct = 12;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 2\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 3 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\ny_corrects = [9 12];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 2 1 4 1 3 3 1 1 1 3\r\n     2 3 2 2 3 2 1 2 4 2 3 4\r\n     3 1 2 4 2 4 2 2 4 2 1 3\r\n     2 1 3 1 3 3 3 4 4 3 3 4\r\n     3 2 3 1 1 3 2 2 1 2 2 3];\r\nx = [3 2 1 3 1]';\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,'No cards work'))\r\n\r\n%%\r\nc = [1 4 3 2 1 4 2 2 1 2 3 4\r\n     3 3 4 2 1 1 3 1 2 4 2 2\r\n     1 1 3 4 2 2 3 4 1 4 2 4\r\n     4 3 4 1 4 3 2 1 2 1 3 2\r\n     3 2 2 3 2 1 1 3 1 1 2 3];\r\nx = [2 2 1 3 1]';\r\ny = HocusFocus(x,c); \r\ny_corrects = [3 5];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [2 3 3 4 3 1 3 3 3 3 1 1\r\n     3 2 2 4 1 1 2 1 3 4 3 2\r\n     2 4 3 4 2 2 3 1 2 3 4 1\r\n     2 4 1 2 2 1 3 2 4 2 2 2\r\n     2 2 2 3 2 3 2 3 1 3 1 3];\r\nx = [3 1 2 1 3]';\r\ny = HocusFocus(x,c); \r\ny_correct = 11;\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nc = [4 1 1 4 1 1 3 4 3 3 4 1\r\n     2 3 2 2 1 2 1 1 3 3 1 3\r\n     4 2 2 4 3 3 4 2 3 3 3 2\r\n     3 4 2 2 2 1 2 1 2 3 1 2\r\n     2 3 2 2 2 3 3 1 2 2 2 3];\r\nx = [2 2 1 4 3]';\r\ny = HocusFocus(x,c); \r\ny_corrects = [5 8:11];\r\nassert(ismember(y,y_corrects))\r\n\r\n%%\r\nc = [randi(4,[4 12]); randi(3, [1 12])];\r\nx = randi(4,[5 1]);\r\nk = randi(5);\r\nx(k) = 1; c(k,:) = 1;\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,'No cards work'))\r\n\r\n%%\r\nc = ones(5,12);\r\nk = randi(12);\r\nc(:,k) = 3;\r\nx = ones(5,1);\r\ny = HocusFocus(x,c);\r\nassert(isequal(y,k))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":46909,"edited_by":46909,"edited_at":"2024-12-28T05:15:50.000Z","deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-12-28T01:18:31.000Z","updated_at":"2025-03-05T08:09:06.000Z","published_at":"2024-12-28T01:24:28.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eThe card game \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://boardgamegeek.com/boardgame/1199/hocus-focus\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHocus Focus\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e starts by placing twelve cards with wizards face up on a table. The characteristics of the wizards that can change from card to card are the size of the robe and the colors of the robe, wand, hat, and shoes. There are three robe sizes and four of each color. Players draw a card from the deck and identify one card out of the twelve on the table that has none of the five characteristics in common with the new card. \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\u003eWrite a function to identify one card that has nothing in common with the cards on the table. Each card will be a column vector with the first four numbers ranging from 1 to 4 and the fifth number ranging from 1 to 3. Therefore, the table cards will be a 5x12 matrix. If no cards work, set the output to 'No cards work'.\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\u003eYears ago, my mother-in-law couldn’t summon the patience to play this game, and her granddaughters, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/players/18927291\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eEmilyR\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/players/8608872\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eJessicaR\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, were greatly amused. We brought this game on our most recent visit to test her patience and amuse ourselves again.\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:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"352\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"427\\\"/\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\u003eImage adapted from \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.ultraboardgames.com/hocus-focus/game-rules.php\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eultraboardgames.com\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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.jpeg\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.jpeg\",\"contentType\":\"image/jpeg\",\"content\":\"data:image/jpeg;base64,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rNfs7H1+5g/nX53fAjxVpfjfwLda14B8ZfEi/wBP+PPjW10zwf4Usfibfyy6bpVpaahfCee6u57iXS21CO1u7l1txHJ5X2WHYsqysOn/AOCeXxx+KH7QnjLRbrXvih4gt/CPgX4Z6J4m1G2sobC8fxJPdax4gjh+0XcluxdDY6bbmRofKeRjGwkQbw75mKyPtmX4f+FrfXrfSJLucancW8l3BZPq0nnywxtGryrHvyyI0sQZgCFMiA/eFWE+GqvDHbReItdhWEEhEkgYhSTgnMROOCAc9vWvjX/gnh4k8cfGD9pn4f8Ajjx/4obxJrWvfAu28UPajTrWzXQG12/t7hrKAwKpa3j+wKitLukYxOzSNlQnU/sXfsveC/i948uvjrqUK2PxOi+KvjRYNetBFDqGsafaX+q6HBplzKyGSayS2t4pktwwCSW8LjBVgxzSE4Re59TWvwojgLeZrWtXW7p5rQ/L9NsYqZfhbYj711fSf7zJ/wDE102MUVUa01szJ4Wk94nNxfC7T45o38y6by23AFlwT78VP4M8AWngg3jW813cSXsnmSPcMrMOuANqjgZrdoolWnJWkyoUYQ+FBjmiiiszUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo60UUANMe7uc+tQX2kWupmP7RBDMYSWjMkYfYSCpIyDjKkj6EjvVmigDzvVf2QvhPr3h280e/wDhj8Pr7SdSlinu7K48O2ctvdSRbzE8kbRlWZPMk2kgld7Y6nOx4H+BHgv4ZpcJ4d8J+HdChutPttJkisNOhtoms7YSC3ttiKB5MQmlCR42r5r4A3HPWUUAeU/s9/sS/DP9lfVLq88CeH7jRp7vSrTQz5urXl8sNhaSXElraRLcSyLDDE13PsjjCqocKBtVQuT8Nf2BvAvwr+ODeOtOn8UXF1b3eqahpelXusS3Gk6FdanL52oXFpbtxHJcSF2bJYL5soQIJGB9sooAKKKKACiiigAooooAKKKKAP/Z\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53850,"title":"Backgammon #4 - Dice Probabilities","description":"Previous problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\r\nBackgammon is played with two standard six-sided dice.\r\nSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \r\nIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \r\n[3,6]\r\nYou have to return the probablility (between 0 and 1) of obtaining such a throw.\r\nSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\r\n[2,0], [0,2]\r\nAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\r\nIf the input is not a valid throw, such as:\r\n[0,0], [4,8], [-2,5]\r\nyou should return NaN.\r\nPrevious problem in series: Problem 53840. Backgammon #3 - Display a Board Position\r\nNext problem in series: Problem 53780. Backgammon #5 - Valid Move?\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 571.3px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 285.65px; transform-origin: 407px 285.65px; vertical-align: baseline; \"\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: 365.667px 7.75px; transform-origin: 365.667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\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: 175.05px 7.75px; transform-origin: 175.05px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBackgammon is played with two standard six-sided dice.\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: 361.742px 7.75px; transform-origin: 361.742px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 19.25px 8.25px; tab-size: 4; transform-origin: 19.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[3,6]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 243.642px 7.75px; transform-origin: 243.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou have to return the probablility (between 0 and 1) of obtaining such a throw.\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: 377.667px 7.75px; transform-origin: 377.667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 46.2px 8.25px; tab-size: 4; transform-origin: 46.2px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[2,0], [0,2]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 262.958px 7.75px; transform-origin: 262.958px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\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: 122.117px 7.75px; transform-origin: 122.117px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the input is not a valid throw, such as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 77px 8.25px; tab-size: 4; transform-origin: 77px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[0,0], [4,8], [-2,5]\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 71.9667px 7.75px; transform-origin: 71.9667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eyou should return NaN.\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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53840\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53780\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53780. Backgammon #5 - Valid Move?\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 275.408px 7.75px; transform-origin: 275.408px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function prob = diceprob(throw)\r\n    prob=1;\r\nend","test_suite":"%%\r\nthrow=[6,6];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,48,50,55,55,55,55,55,55,55,55,55,55,55,55,56]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[3,4];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,48,53,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[5,0];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,51,48,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[0,1];\r\nprob=diceprob(throw);\r\ncorrect=str2num(char([48,46,51,48,53,53,53,53,53,53,53,53,53,53,53,53,54]));\r\nassert(abs(correct-prob)\u003c0.00001);\r\n\r\n%%\r\nthrow=[0,0];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[7,5];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[4,8];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\nthrow=[3,-1];\r\nprob=diceprob(throw);\r\nassert(isnan(prob));\r\n\r\n%%\r\ns=fileread('diceprob.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2022-01-18T11:30:27.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2022-01-12T19:50:23.000Z","updated_at":"2026-03-05T10:54:58.000Z","published_at":"2022-01-13T15:07:27.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\u003ePrevious problems in this series have looked at how a backgammon board might be represented, and board positions manipulated and displayed. In this problem we take a break from looking at backgammon boards, and turn our attention to dice throws.\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\u003eBackgammon is played with two standard six-sided dice.\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\u003eSometimes it is necessary to understand the chances of obtaining a particular dice throw, for example when trying to determine the risks of leaving a blot (a single stone), or when considering whether to offer or accept a double. \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\u003eIn this problem you are given a 'required' throw from two dice as an input vector - for example if you need to throw a 3 and a 6, the input vector will be: \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[[3,6]]]\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:t\u003eYou have to return the probablility (between 0 and 1) of obtaining such a throw.\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\u003eSometimes you only care about the value of one of the dice, so in that case the value of the other dice will be set to zero - for example if you need to throw at least one 2 on the two dice, and don't care what the other dice is, the input vector will be one of:\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[[2,0], [0,2]]]\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:t\u003eAgain you have to return the probablility (between 0 and 1) of obtaining such a throw.\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\u003eIf the input is not a valid throw, such as:\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[[0,0], [4,8], [-2,5]]]\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:t\u003eyou should return NaN.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53840\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53780\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53780. Backgammon #5 - Valid Move?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1339,"title":"Travelling Salesman Problem (TSP)","description":"Find a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\r\nhttp://en.wikipedia.org/wiki/Travelling_salesman_problem\r\nHave fun!","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: 102px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 51px; transform-origin: 407px 51px; vertical-align: baseline; \"\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: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFind a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\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\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003ehttp://en.wikipedia.org/wiki/Travelling_salesman_problem\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 30.5px 8px; transform-origin: 30.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eHave fun!\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = TSP(x)\r\n  y = x;\r\nend","test_suite":"%% Test 1\r\nx = [8.2 -6.9 3.2 -9.5 15.5 0.3 -4.9 7.6 4.5 -7.1 6.5 -7.5 5.6 -0.5] + i*[-4.4 3.8 7.7 -8 -1.9 16.5 2.3 6.8 6.6 -1.6 -1.2 5.5 -9.3 8.9];\r\ntic;\r\ny = TSP(x);\r\nT1 = 1e4*toc;\r\nL1 = sum(abs(diff(y)));\r\n%S = calculateSize('tsp.m')\r\nassert(isequal(y,sort(x)))\r\n\r\n%% Test 2\r\nx = 10*sin(primes(200))+10i*cos(primes(200));\r\ntic;\r\ny = TSP(x);\r\nT2 = 1e6*toc;\r\nL2 = sum(abs(diff(y)));\r\nassert(isequal(y,sort(x)))\r\n\r\n%% Test 3\r\nx = [75.5 5.43 94.73 3.89 .37 42.38 -8.5 36.72 .54 .02 83.27 47];\r\ntic;\r\ny = TSP(x(randperm(12)));\r\nT3 = 1e5*toc;\r\nL3 = sum(abs(diff(y)));\r\nassert(isequal(y,sort(x)))\r\n\r\n%assignin('caller','score',round(S +T1+L1 +T2+L2 +T3+L3));","published":true,"deleted":false,"likes_count":3,"comments_count":10,"created_by":3105,"edited_by":223089,"edited_at":"2022-09-15T06:05:23.000Z","deleted_by":null,"deleted_at":null,"solvers_count":139,"test_suite_updated_at":"2022-09-15T06:05:24.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-10T18:58:10.000Z","updated_at":"2026-03-30T17:25:01.000Z","published_at":"2013-03-10T19:04:41.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eFind a short way through given points. This is the travelling salesman problem. But the solution should be a fast and small function.\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:hyperlink w:docLocation=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://en.wikipedia.org/wiki/Travelling_salesman_problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eHave fun!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44657,"title":"Kurosu checker","description":"The game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\r\n1. The game is played on a 6x6 board.\r\n2. Each row and each column must contain exactly 3 'X's and 3 'O's.\r\n3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\r\n4. Diagonals are of no importance.\r\nIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\r\nExample 1:\r\nb = [1 0 1 0 0 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\n\r\ntf = true;\r\nExample 2:\r\nb = [1 0 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 1 1 0 0 1\r\n     0 1 0 1 1 0\r\n     1 0 0 1 0 0\r\n     0 0 1 0 1 1];\r\n\r\ntf = false;","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: 620.933px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 310.467px; transform-origin: 407px 310.467px; vertical-align: baseline; \"\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: 383px 8px; transform-origin: 383px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\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: 121.5px 8px; transform-origin: 121.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1. The game is played on a 6x6 board.\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: 213px 8px; transform-origin: 213px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\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: 251px 8px; transform-origin: 251px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\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: 109px 8px; transform-origin: 109px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e4. Diagonals are of no importance.\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: 378.5px 8px; transform-origin: 378.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\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: 34.5px 8px; transform-origin: 34.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample 1:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.467px; 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 81.7333px; transform-origin: 404px 81.7333px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eb = [1 0 1 0 0 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 0 1 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1];\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 40px 8.5px; tab-size: 4; transform-origin: 40px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etf = true;\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 34.5px 8px; transform-origin: 34.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample 2:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.467px; 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 81.7333px; transform-origin: 404px 81.7333px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eb = [1 0 1 0 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 1 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 1 0 0 1\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 1 0 1 1 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 64px 8.5px; tab-size: 4; transform-origin: 64px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1 0 0 1 0 0\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0 0 1 0 1 1];\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 44px 8.5px; tab-size: 4; transform-origin: 44px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etf = false;\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = kurosuchecker(b)\r\n    tf = true;\r\nend","test_suite":"%%\r\nfiletext = fileread('kurosuchecker.m');\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'switch')))\r\n\r\n%%\r\nb = zeros(6);\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     0 1 0 1 0 1\r\n     1 0 1 0 1 0];\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 0 1 1 0 0\r\n     0 1 0 0 1 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 1 1 0 0 1\r\n     0 1 0 1 1 0\r\n     1 0 0 1 0 1\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(~b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 1\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1\r\n     0 1 0 1 0 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 0 1 0 1\r\n     0 1 0 1 1 0\r\n     0 1 1 0 0 1\r\n     1 0 0 1 1 0\r\n     1 1 1 0 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 1 0\r\n     0 1 0 1 0 1\r\n     1 0 0 0 1 1\r\n     0 1 1 0 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 1 0 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1\r\n     1 1 0 0 1 0\r\n     0 0 1 1 0 1\r\n     0 1 0 1 1 0\r\n     1 1 0 1 0 0\r\n     0 0 1 0 1 1];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = [1 0 1 0 0 1 0\r\n     1 1 0 0 1 0 0\r\n     0 0 1 1 0 1 0\r\n     0 1 0 1 1 0 0\r\n     1 0 1 0 0 1 0\r\n     0 1 0 1 1 0 0\r\n     0 0 0 0 0 0 0];\r\nassert(isequal(kurosuchecker(b),false))\r\n\r\n%%\r\nb = gallery('circul',[1 1 0 0 1 0]);\r\nassert(isequal(kurosuchecker(b),true))\r\n\r\n%%\r\nb=gallery('circul',[1 0 1 0 1 0]);\r\nassert(isequal(kurosuchecker(b),true))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":15521,"edited_by":223089,"edited_at":"2023-02-19T07:06:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":23,"test_suite_updated_at":"2023-02-19T07:06:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-29T11:37:42.000Z","updated_at":"2026-01-18T13:07:57.000Z","published_at":"2018-05-29T17:54:54.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\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\u003e1. The game is played on a 6x6 board.\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\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\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\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\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\u003e4. Diagonals are of no importance.\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\u003eIn this problem, given a completely filled Kurosu board, b, return 'true' if the board complies with game rules or 'false' if it does not. 'X's and 'O's are represented by 1s and 0s, respectively.\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\u003eExample 1:\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[b = [1 0 1 0 0 1\\n     1 1 0 1 0 0\\n     0 0 1 0 1 1\\n     0 1 0 1 1 0\\n     1 1 0 1 0 0\\n     0 0 1 0 1 1];\\n\\ntf = true;]]\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:t\u003eExample 2:\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[b = [1 0 1 0 1 0\\n     1 1 0 1 0 0\\n     0 1 1 0 0 1\\n     0 1 0 1 1 0\\n     1 0 0 1 0 0\\n     0 0 1 0 1 1];\\n\\ntf = false;]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":46072,"title":"Rock Paper Scissors Lizard Spock","description":"Can't decide what to watch on TV? How about settling the dispute with a good old fashioned round of Paper Scissors Lizard Spock ? Given your opponents choice and a strategy (\"win\", \"lose\", or \"tie\"), return a string representing the choice(s) that would yield that desired outcome.\r\n\r\nEx:\r\nrpsls(\"rock\",\"lose\")\r\nans = {\"Spock\", \"paper\"} %%you will lose if you choose either Spock or paper\r\nrpsls(\"paper\", \"tie\")\r\nans = \"paper\" %%you will tie if you select the same choice","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 598.55px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 299.275px; transform-origin: 407px 299.275px; vertical-align: baseline; \"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCan't decide what to watch on TV? How about settling the dispute with a good old fashioned round of\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://youtu.be/Kov2G0GouBw?t=37\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003ePaper Scissors Lizard Spock\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ? Given your opponents choice and a strategy (\"win\", \"lose\", or \"tie\"), return a string representing the choice(s) that would yield that desired outcome.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 404.8px; 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 202.4px; text-align: center; transform-origin: 384px 202.4px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"493\" height=\"399\" style=\"vertical-align: baseline;width: 493px;height: 399px\" src=\"data:image/JPEG;base64,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\" data-image-state=\"image-loaded\"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEx:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.75px; 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.875px; transform-origin: 404px 40.875px; 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.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erpsls(\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"rock\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"lose\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eans = {\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"Spock\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e, \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e} \u003c/span\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%%you will lose if you choose either Spock or paper\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erpsls(\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e, \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"tie\"\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; 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.2125px; text-wrap-mode: nowrap; transform-origin: 404px 10.2188px; \"\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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eans = \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e\"paper\" \u003c/span\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%%you will tie if you select the same choice\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = rpsls(choice,strategy)\r\ny = \"rock\";\r\nend","test_suite":"C = {'rock', 'paper', 'scissors', 'lizard', 'Spock'};\r\n[r,p,sc,l,sp] = C{:};\r\n%% Rock wins against lizard, scissors\r\nassert(isequal(rpsls(\"rock\",\"win\"), {l, sc})|| isequal(rpsls(\"rock\",\"win\"), {sc, l}))\r\n%% Rock loses against Spock, paper\r\nassert(isequal(rpsls(\"rock\",\"lose\"), {sp, p}) || isequal(rpsls(\"rock\",\"lose\"), {p, sp}))\r\n%% Rock ties with itself\r\nassert(isequal(rpsls(\"rock\",\"tie\"), r))\r\n%% Paper wins against Spock, rock\r\nassert(isequal(rpsls(\"paper\",\"win\"), {sp, r}) || isequal(rpsls(\"paper\",\"win\"), {r,sp}))\r\n%% Paper loses against scissors, lizard\r\nassert(isequal(rpsls(\"paper\",\"lose\"), {sc, l}) || isequal(rpsls(\"paper\",\"lose\"), {l, sc}))\r\n%% Paper ties with itself\r\nassert(isequal(rpsls(\"paper\",\"tie\"), p))\r\n%% Scissors wins against lizard, paper\r\nassert(isequal(rpsls(\"scissors\",\"win\"), {l, p}) || isequal(rpsls(\"scissors\",\"win\"), {p, l}))\r\n%% Scissors loses against rock, Spock\r\nassert(isequal(rpsls(\"scissors\",\"lose\"), {r, sp}) || isequal(rpsls(\"scissors\",\"lose\"), {sp, r}))\r\n%% Scissors ties with itself\r\nassert(isequal(rpsls(\"scissors\",\"tie\"), sc))\r\n%% Lizard wins against paper, Spock\r\nassert(isequal(rpsls(\"lizard\",\"win\"), {p, sp}) || isequal(rpsls(\"lizard\",\"win\"), {sp, p}))\r\n%% Lizard loses against scissors, rock\r\nassert(isequal(rpsls(\"lizard\",\"lose\"), {sc, r}) || isequal(rpsls(\"lizard\",\"lose\"), {r, sc}))\r\n%% Lizard ties with itself\r\nassert(isequal(rpsls(\"lizard\",\"tie\"), l))\r\n%% Spock wins against rock, scissors\r\nassert(isequal(rpsls(\"Spock\",\"win\"), {r, sc}) || isequal(rpsls(\"Spock\",\"win\"), {sc, r}))\r\n%% Spock loses against paper, lizard\r\nassert(isequal(rpsls(\"Spock\",\"lose\"), {p, l}) || isequal(rpsls(\"Spock\",\"lose\"), {l, p}))\r\n%% Spock ties with themself\r\nassert(isequal(rpsls(\"Spock\",\"tie\"), sp))","published":true,"deleted":false,"likes_count":7,"comments_count":6,"created_by":464375,"edited_by":485721,"edited_at":"2025-02-13T21:09:57.000Z","deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2020-08-04T21:26:16.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-07-29T17:23:06.000Z","updated_at":"2026-01-20T13:47:30.000Z","published_at":"2020-07-29T17:23:06.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eCan't decide what to watch on TV? How about settling the dispute with a good old fashioned round of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://youtu.be/Kov2G0GouBw?t=37\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePaper Scissors Lizard Spock\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e ? Given your opponents choice and a strategy (\\\"win\\\", \\\"lose\\\", or \\\"tie\\\"), return a string representing the choice(s) that would yield that desired outcome.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"399\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"493\\\"/\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\u003eEx:\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[rpsls(\\\"rock\\\",\\\"lose\\\")\\nans = {\\\"Spock\\\", \\\"paper\\\"} %%you will lose if you choose either Spock or paper\\nrpsls(\\\"paper\\\", \\\"tie\\\")\\nans = \\\"paper\\\" %%you will tie if you select the same choice]]\u003e\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.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;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":46006,"title":"Backgammon #2 - Your turn!","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\r\nWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \r\nThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\r\nBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\r\nPrevious problem in series: Problem 45967. Backgammon #1- Pip Count\r\nNext problem in series: Problem 53840. Backgammon #3 - Display a Board Position\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1690.73px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 314.1px 845.367px; transform-origin: 314.1px 845.367px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; 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: 125px 42px; text-align: left; transform-origin: 125px 42px; 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: 117.992px 8.33333px; transform-origin: 117.992px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 30.55px 8.33333px; transform-origin: 30.55px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 328.933px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 132px 164.467px; transform-origin: 132px 164.467px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 61.9667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 30.9833px; text-align: left; transform-origin: 104px 30.9833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 101.592px 8.33333px; transform-origin: 101.592px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 164.133px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 82.0667px; text-align: left; transform-origin: 104px 82.0667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 103.625px 8.33333px; transform-origin: 103.625px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 102.833px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 51.4167px; text-align: left; transform-origin: 104px 51.4167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 86.75px 8.33333px; transform-origin: 86.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 125px 21px; text-align: left; transform-origin: 125px 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: 119.258px 8.33333px; transform-origin: 119.258px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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: 311.1px 173.683px; transform-origin: 311.1px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 117.6px 8.33333px; tab-size: 4; transform-origin: 117.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 201.6px 8.33333px; tab-size: 4; transform-origin: 201.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 12.6px 8.33333px; transform-origin: 12.6px 8.33333px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 121.8px 8.33333px; tab-size: 4; transform-origin: 121.8px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 10.5px; text-align: left; transform-origin: 125px 10.5px; 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: 76.0333px 8.33333px; transform-origin: 76.0333px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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: 311.1px 10.2167px; transform-origin: 311.1px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 285.6px 8.33333px; tab-size: 4; transform-origin: 285.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 21px; text-align: left; transform-origin: 125px 21px; 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: 105.142px 8.33333px; transform-origin: 105.142px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\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: 125px 73.5px; text-align: left; transform-origin: 125px 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: 120.6px 8.33333px; transform-origin: 120.6px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\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: 125px 73.5px; text-align: left; transform-origin: 125px 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: 113.75px 8.33333px; transform-origin: 113.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 125px 52.5px; text-align: left; transform-origin: 125px 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: 104.225px 8.33333px; transform-origin: 104.225px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 125px 52.5px; text-align: left; transform-origin: 125px 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: 122.925px 8.33333px; transform-origin: 122.925px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\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: 125px 21px; text-align: left; transform-origin: 125px 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: 85.575px 8.33333px; transform-origin: 85.575px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967. Backgammon #1- Pip Count\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 73.0917px 8.33333px; transform-origin: 73.0917px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53840\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 121.417px 8.33333px; transform-origin: 121.417px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function BoardOut = flipboard(BoardIn)\r\n  BoardOut = 1;\r\nend","test_suite":"%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,0,12,-13];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nBoardOut=flipboard(BoardIn);\r\ncorrect=[0,1,0,0,0,5,0,1,0,0,0,-1,2,-2,0,0,-1,0,-3,0,0,-1,0,0,1,0,5,-7];\r\nassert(isequal(correct,BoardOut));\r\n\r\n%%\r\nBoardIn=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10];\r\nBoardOut=flipboard(BoardIn);\r\nassert(isequal([1],isnan([BoardOut])));\r\n\r\n%%\r\nBoardIn=[-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10];\r\nBoardOut=flipboard(BoardIn);\r\nassert(isequal([1],isnan([BoardOut])));\r\n\r\n%%\r\ns=importdata('flipboard.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":437780,"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-06-30T08:23:48.000Z","updated_at":"2022-01-12T20:45:40.000Z","published_at":"2022-01-07T16:44:37.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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eA possible approach, when developing algorithms to determine valid moves, strategies, etc. is only to code them so that they operate from white's perspective. This avoids having to have algorithms work 'in both directions' and thus simplifies their development.\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\u003eWhat this will mean, however, is that when it is red's turn, the board has to be 'flipped' so that red 'becomes' white and vice versa. The move/strategy algorithms can then be applied to this flipped board, and then the board 'flipped' back for white's turn. \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\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector which is the flipped board in the same notation.\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\u003eBefore attempting to flip the board, you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN instead.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967. Backgammon #1- Pip Count\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53840\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53840. Backgammon #3 - Display a Board Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1182,"title":"Hangman (easy)","description":"What is the best letter to start a \u003chttp://en.wikipedia.org/wiki/Hangman_(game) hangman\u003e game with?\r\n\r\nYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary. \r\n\r\nYou can assume that words will always be in all capital letters, and the cell array will always be a row.\r\n\r\n*Example:*\r\n\r\nwords={'AAA','BED','BEG','BAD'};\r\n\r\nYou should return letter='B';\r\n\r\nnote: Letter 'B' occurrs in _three_ different words. Letter 'A', while occurring four times (counting repetitions), only appears in _two_ different words. \r\n\r\n*Follow-up:* \r\n\r\nIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the _best_ 'simple' strategy in a hangman game, then the next problem in this series - \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy Hangman (strategy)\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games. ","description_html":"\u003cp\u003eWhat is the best letter to start a \u003ca href=\"http://en.wikipedia.org/wiki/Hangman_(game)\"\u003ehangman\u003c/a\u003e game with?\u003c/p\u003e\u003cp\u003eYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary.\u003c/p\u003e\u003cp\u003eYou can assume that words will always be in all capital letters, and the cell array will always be a row.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cp\u003ewords={'AAA','BED','BEG','BAD'};\u003c/p\u003e\u003cp\u003eYou should return letter='B';\u003c/p\u003e\u003cp\u003enote: Letter 'B' occurrs in \u003ci\u003ethree\u003c/i\u003e different words. Letter 'A', while occurring four times (counting repetitions), only appears in \u003ci\u003etwo\u003c/i\u003e different words.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFollow-up:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the \u003ci\u003ebest\u003c/i\u003e 'simple' strategy in a hangman game, then the next problem in this series - \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy\"\u003eHangman (strategy)\u003c/a\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games.\u003c/p\u003e","function_template":"function letter = hangman(words)\r\n  letter='S';\r\nend","test_suite":"%%\r\nwords={'AAA','BED','BEG','BAD'};\r\nassert(isequal(hangman(words),'B'));\r\n\r\n%%\r\nwords={'BUZZ','COZY','DOZE','FUZZ','GAZE','HAZE','JAZZ','LAZY','SIZE','ZERO','ZONE'};\r\nassert(isequal(hangman(words),'Z'));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[100,3])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[200,4])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n\r\n%%\r\nrng default;\r\nwords=unique(char('A'+randi(26,[500,5])-1),'rows');\r\nassert(isequal(sum(any(words==hangman(cellstr(words)'),2)),max(arrayfun(@(x)sum(any(words==x,2)),'A':'Z'))));\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":0,"created_by":43,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":52,"test_suite_updated_at":"2013-01-08T05:17:12.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-01-07T03:59:12.000Z","updated_at":"2025-12-15T20:07:42.000Z","published_at":"2013-01-07T04:03:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the best letter to start a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Hangman_(game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehangman\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e game with?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given a cell array with all valid N-letter words. Your output should be the letter that has the highest chance of occurring (at least once) within any randomly chosen word in this dictionary.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can assume that words will always be in all capital letters, and the cell array will always be a row.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewords={'AAA','BED','BEG','BAD'};\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou should return letter='B';\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003enote: Letter 'B' occurrs in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ethree\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e different words. Letter 'A', while occurring four times (counting repetitions), only appears in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etwo\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e different words.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFollow-up:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you are going to be losing hours of sleep over the issue of whether choosing the letter with the highest chance of occurring within any randomly chosen word is actually the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ebest\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 'simple' strategy in a hangman game, then the next problem in this series -\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1184-hangman-strategy\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHangman (strategy)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e - is for you. Go ahead and test this or a different strategy there, and the contest machinery will score it based on its performance in a series of simulated hangman games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43652,"title":"\"Bubblegum, Bubblegum, in a dish; How many pieces do you wish?\"","description":"The child's game \"bubblegum, bubblegum, in a dish; how many pieces do you wish?\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \"leader\") says the words \"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\" bumping the fists of the players in order until landing on the final fist on \"wish.\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\r\n\r\nSee http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm for another explanation\r\n\r\nYou are the leader of \"bubblegum\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \"wishing\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \"bubblegum\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\r\n\r\nSo, for example, if there are 4 players, the first \"wisher\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\r\n\r\nGraphically: Start:\r\n\r\nP1R P1L P2R P2L P3R P3L P4R P4L\r\n\r\nP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u003e wishes \"3\"; P1L eliminated. Remaining fists:\r\n\r\nP1R P2R-W2 P2L P3R P3L P4R P4L -\u003e wishes \"5\"; P4L eliminated. Remaining fists:\r\n\r\nP1R P2R P2L-W3 P3R P3L P4R -\u003e wishes \"1\"; P3R eliminated. Remaining fists:\r\n\r\nP1R P2R P2L-W4 P3L P4R -\u003e wishes \"6\"; P3L eliminated. Remaining fists:\r\n\r\nP1R P2R-W5 P2L P4R -\u003e wishes \"3\"; P1R eliminated. Remaining fists:\r\n\r\nP2R P2L P4R-W6 -\u003e wishes \"2\"; P2L eliminated. Remaining fists:\r\n\r\nP2R P4R-W7 -\u003e wishes \"4\"; P4R eliminated (eliminates self). Remaining fists:\r\n\r\nP2R -\u003e Player 2 is the WINNER!\r\n\r\nReturn the number of the winning player.\r\n\r\nNote: since this is a child's game, a child can inadvertently eliminate himself.","description_html":"\u003cp\u003eThe child's game \"bubblegum, bubblegum, in a dish; how many pieces do you wish?\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \"leader\") says the words \"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\" bumping the fists of the players in order until landing on the final fist on \"wish.\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\u003c/p\u003e\u003cp\u003eSee \u003ca href = \"http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\"\u003ehttp://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\u003c/a\u003e for another explanation\u003c/p\u003e\u003cp\u003eYou are the leader of \"bubblegum\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \"wishing\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \"bubblegum\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\u003c/p\u003e\u003cp\u003eSo, for example, if there are 4 players, the first \"wisher\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\u003c/p\u003e\u003cp\u003eGraphically: Start:\u003c/p\u003e\u003cp\u003eP1R P1L P2R P2L P3R P3L P4R P4L\u003c/p\u003e\u003cp\u003eP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u0026gt; wishes \"3\"; P1L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R-W2 P2L P3R P3L P4R P4L -\u0026gt; wishes \"5\"; P4L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R P2L-W3 P3R P3L P4R -\u0026gt; wishes \"1\"; P3R eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R P2L-W4 P3L P4R -\u0026gt; wishes \"6\"; P3L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP1R P2R-W5 P2L P4R -\u0026gt; wishes \"3\"; P1R eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP2R P2L P4R-W6 -\u0026gt; wishes \"2\"; P2L eliminated. Remaining fists:\u003c/p\u003e\u003cp\u003eP2R P4R-W7 -\u0026gt; wishes \"4\"; P4R eliminated (eliminates self). Remaining fists:\u003c/p\u003e\u003cp\u003eP2R -\u0026gt; Player 2 is the WINNER!\u003c/p\u003e\u003cp\u003eReturn the number of the winning player.\u003c/p\u003e\u003cp\u003eNote: since this is a child's game, a child can inadvertently eliminate himself.\u003c/p\u003e","function_template":"function winner = bbgwinner(wishes, players)\r\n  y = x;\r\nend","test_suite":"%%\r\nplayers=4;\r\nwishes=[3 5 1 6 3 2 4];\r\nwinner=2;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=4;\r\nwishes=[20 13 7 8 2 16 3];\r\nwinner=4;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=2\r\nwishes=[2 1];\r\nwinner=2;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=5;\r\nwishes=[20 13 7 8 2 16 3 1 2];\r\nwinner=4;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=5;\r\nwishes=[20 13 7 8 2 16 3 3];\r\nwinner=5;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=20;\r\nwishes=123.*[1:39];\r\nwinner=17\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=30;\r\nwishes=[1:59];\r\nwinner=18;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%\r\nplayers=30;\r\nwishes=[1:54 3 1 2 4];\r\nwinner=29;\r\nassert(isequal(bbgwinner(players, wishes),winner))\r\n%%","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":93456,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-11-12T00:03:52.000Z","updated_at":"2016-11-12T00:03:52.000Z","published_at":"2016-11-12T00:03:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe child's game \\\"bubblegum, bubblegum, in a dish; how many pieces do you wish?\\\" is a way of eliminating players until a single player remains. The idea is that all children put their fists into the center of a circle and one of the players (the \\\"leader\\\") says the words \\\"bubblegum, bubblegum, in a dish; how many pieces do you wish?,\\\" bumping the fists of the players in order until landing on the final fist on \\\"wish.\\\" This player gets to select an arbitrary number that the leader will bump out on the fists of the children. The final person's fist to be bumped is eliminated (each player has two fists, so essentially two tries). Play continues until only one person's fist(s) are left in the circle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSee\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.gameskidsplay.net/games/circle_games/bubble_gum.htm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for another explanation\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are the leader of \\\"bubblegum\\\" (player 1) and need to choose which player wins the game. There are an arbitrary number of players. The numbers selected by the \\\"wishing\\\" player are given in a vector. The players fists are number thus: 1=Player 1, right fist; 2=Player 1, left fist; 3=Player 2, right fist; etc. The initial \\\"bubblegum\\\" chant is 15 fist bumps (the number of beats in the rhyme, NOT the number of syllables).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSo, for example, if there are 4 players, the first \\\"wisher\\\" is player 4 (having been bumped on the right fist). If he selects 3, the left fist of the first player is eliminated and the right fist of player 2 is the first bump of the next round.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGraphically: Start:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P1L P2R P2L P3R P3L P4R P4L\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P1L P2R P2L P3R P3L P4R-W1 P4L -\u0026gt; wishes \\\"3\\\"; P1L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R-W2 P2L P3R P3L P4R P4L -\u0026gt; wishes \\\"5\\\"; P4L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R P2L-W3 P3R P3L P4R -\u0026gt; wishes \\\"1\\\"; P3R eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R P2L-W4 P3L P4R -\u0026gt; wishes \\\"6\\\"; P3L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP1R P2R-W5 P2L P4R -\u0026gt; wishes \\\"3\\\"; P1R eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R P2L P4R-W6 -\u0026gt; wishes \\\"2\\\"; P2L eliminated. Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R P4R-W7 -\u0026gt; wishes \\\"4\\\"; P4R eliminated (eliminates self). Remaining fists:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eP2R -\u0026gt; Player 2 is the WINNER!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the number of the winning player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNote: since this is a child's game, a child can inadvertently eliminate himself.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1481,"title":"Game of Nim","description":"\r\nThe Game of Nim is a famous studied 2 player strategy game. \r\n\u003chttp://en.wikipedia.org/wiki/Nim\u003e\r\n\r\nThere are 3 heaps, and you are given the number of pebbles in each heap.\r\nPlayer 1 and 2 take turns removing pebbles from each heap.  \r\nGame ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.  \r\n \r\nGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\r\n\r\nProblem 5)\r\nPrev: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1478 1478\u003e\r\nNext: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1482 1482\u003e","description_html":"\u003cp\u003eThe Game of Nim is a famous studied 2 player strategy game.  \u003ca href = \"http://en.wikipedia.org/wiki/Nim\"\u003ehttp://en.wikipedia.org/wiki/Nim\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThere are 3 heaps, and you are given the number of pebbles in each heap.\r\nPlayer 1 and 2 take turns removing pebbles from each heap.  \r\nGame ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.\u003c/p\u003e\u003cp\u003eGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\u003c/p\u003e\u003cp\u003eProblem 5)\r\nPrev: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1478\"\u003e1478\u003c/a\u003e\r\nNext: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1482\"\u003e1482\u003c/a\u003e\u003c/p\u003e","function_template":"function out = game_nim(hvect)\r\n  heapindex0;\r\n  removecount=0;\r\n  out = [heapindex removecount];\r\nend","test_suite":"%%\r\nx = [3 4 5];\r\ny_correct = [1 2];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [0 7 9];\r\ny_correct = [3 2];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [7 7 7 ];\r\ny_correct = [1 7];\r\nassert(isequal(game_nim(x),y_correct))\r\n\r\n%%\r\nx = [112 98 99];\r\ny_correct = [1 111];\r\nassert(isequal(game_nim(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":11275,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":38,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-04-30T23:50:29.000Z","updated_at":"2026-02-15T07:35:53.000Z","published_at":"2013-04-30T23:50:29.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Game of Nim is a famous studied 2 player strategy game. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Nim\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://en.wikipedia.org/wiki/Nim\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are 3 heaps, and you are given the number of pebbles in each heap. Player 1 and 2 take turns removing pebbles from each heap. Game ends when a player cannot remove any pebbles from any heap, and the last player able to do so is the winner.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the number of pebbles in each heap, determine if player-1 will win assuming that both player play their optimal strategy, ie their best possible moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 5) Prev:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1478\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1478\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e Next:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1482\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1482\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\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":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\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[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\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\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 Direction\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 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI3P8A9ett/wCiUrlO9dX8Rf8Akbn/AOvW2/8ARKVylc0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8NP8AkK6nj/nx/wDa0dFHw0/5Cuqf9eP/ALWiorrpfCjOW5T+Iv8AyNz/APXrbf8AolK5TtXV/EX/AJG5/wDr1tv/AESlcpXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/DP/AJCuqf8AXh/7Wioo+Gf/ACFdU/68P/a0VFddP4UZy3D4h6dc/wBtPqPlH7IYbaLzMj7/AJCHFcT2r1f4h5/4Rs/9fMH/AKTLXlFcMajm5X6NozwtV1Iu/RtCUUUVZ0BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB2/w0/wCQrqf/AF4+n/TaOij4af8AIU1Tt/oP/taKiuum/dRjLc6H4if8i2f+vmD/ANJlryivV/iJ/wAi0f8Ar5g/9JlryivOo7z9WYYH4JerEooorY7QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7b4af8AIV1P/rwP/o6Kil+Gf/IV1T/rw/8Aa0VFddP4UZy3IfiJczDxG1t5zmEQW7iPcdu7yU5x0z71x1dZ8RP+Ruf/AK9bb/0SlcnXNJJSdhwSUVYKKKKksKKKKACiiigAooooA6Lwj4WbxZqNzaLqNrZGG2e433BwG2jp/UnsAT2rnyMGkziipUZczbegCUUUVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8NP8AkK6p/wBeH/taKij4af8AIV1T/rx/9rRUV10/hRnLcp/EQ/8AFXP/ANett/6JSuU7V1fxF/5G5/8Ar1tv/RKVylc0/iZUPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdt8NTjVNU4z/oP/taOij4bf8hPVP8Arx/9qx0V00/hMZ7lb4iZ/wCEufIx/ott/wCiUrk69k/s/TNfjj1DU9MguLsxJG0u+RdwRQoyFcDoB0Aph8L+HP8AoB2/T/nvP/8AHKmVNt3Li9EeO0V7F/wi/hzd/wAgO3/7/wA//wAco/4Rfw5/0A7f/v8Az/8Axyl7GQc547RivYv+EX8Of9AO36/89p//AI5R/wAIx4c8zb/YdvjH/Pef/wCOUexkJ1Ejx2ivYh4X8Nn/AJgdv1x/r5//AI5T/wDhFfDf/QDt/wDv/P8A/HKXsmHtEeNUV7IfCvhvA/4kdv8A9/5//jlH/CLeG9v/ACA7f/v/AD//AByn7GQe0R43RXso8K+G/wDoB2//AH/n/wDjlMHhfw5/0A7f/v8AT/8Axyj2Mg9ojx6ivYv+EX8N5x/Ydv8A9/5//jlJ/wAIv4c4/wCJHb/9/p//AI5R7GQe0R47RXsn/CK+G/8AoB2/b/lvP/8AHKB4V8Nn/mB2/wD3/n/+OUexkHtEeOUV7CfC/hz/AKAdv/3/AJ//AI5S/wDCL+HP+gHb9P8AnvP/APHKPYyHzo8cor2T/hFfDeR/xI7f/v8Az/8AxykHhbw3u/5Adv8A9/p//jlL2TF7RHjlFey/8Ir4b/6Adv8A9/5//jlIPCvhsj/kB2//AH/n/wDjlP2Mg9ojxyivYz4X8Of9AO3/AO/0/wD8cpv/AAi/hzJ/4kdv/wB/5/8A45R7GQ+dHjtFexf8Iv4c/wCgHb/9/wCf/wCOUv8Awi/hzH/IDt+v/Pef/wCOUexkHOeOUV7F/wAIv4c/6Adv0/57z/8Axyl/4Rfw5u/5Adv/AN/5/wD45R7GQc545RXsf/CL+HNv/IDt/wDv/P8A/HKT/hF/Dn/QDt/+/wDP/wDHKPYyDnPHaK9i/wCEX8Of9AO36f8APef/AOOUv/CL+HM/8gO36/8APef/AOOUexkHOeOUV7F/wi/hz/oB2/8A3/n/APjlL/wi/hz/AKAdv1/57T//AByj2Mg5zxyivYv+EX8Of9AO36f895//AI5QPC/hzd/yA7fr/wA95/8A45R7GQc547S17CPC/hz/AKAdv0/57z//AByj/hF/Dn/QDt+v/Pef/wCOUexkHOePUV7CfC/hzA/4kdv0/wCe8/8A8cpf+EX8Obv+QHb/APf+f/45S9kw5zxyivYh4X8Of9AO36f895//AI5R/wAIv4c/6Adv/wB/5/8A45T9jIOc8dor2P8A4Rfw5/0A7f8A7/z/APxygeF/DmR/xI7f/v8Az/8Axyj2Mg5zxyivYf8AhF/Dn/QDt/8Av/P/APHKcPC/hz/oB2//AH/n/wDjlHsZBznjmKMV7F/wi/hzA/4kdv8A9/5//jlH/CL+HP8AoB2//f8An/8AjlT7Nj5jx2ivYf8AhF/Dn/QDt+n/AD3n/wDjlH/CL+HP+gHb/wDf+f8A+OUezYcx49RXsX/CL+HP+gHb/wDf6b/45R/wi/hz/oB2/wD3+n/+OUezYcx47RXsX/CL+HP+gHb/APf6f/45R/wi/hz/AKAdv/3+n/8AjlHs2HMeO4oxXsX/AAi/hz/oB2//AH/n/wDjlJ/wi/hz/oB2/wD3/n/+OUezYcx49RXsR8L+HN3/ACA7fr/z3n/+OUn/AAi/hz/oB2//AH/n/wDjlHs2HMePUV7F/wAIv4c/6Adv1/57T/8Axyg+F/Dn/QDt+n/Pef8A+OUezYcx47RXsQ8L+HN3/IDt+v8Az3n/APjlA8L+HOf+JHb9P+e0/wD8co9mw5jx3FGK9h/4Rfw5/wBAO3/7/T//AByl/wCEX8Of9AO3/wC/0/8A8co9mw5jx2ivYv8AhF/DmR/xI7fr/wA95/8A45QPC/hzn/iR2/T/AJ7T/wDxyj2bDmOR+HESyapqW7PFlkYP/TWMUV0+pRWHhXSL2+0fTLaC5dVhLl5X+UupIwzkdQKK1irKzJerP//Z\"}]}"},{"id":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\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":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\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[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\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\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 Direction\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 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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\"}]}"},{"id":3690,"title":"OXO counting","description":"Count the number of occurrences of \"OXO\" in rows, columns, diagonals and anti-diagonals.\r\n\r\n\r\nExample:\r\n\r\n    \u003e\u003e board = ['OOX'\r\n                'XXO'\r\n                'OXO'];\r\n    \u003e\u003e count_OXO(board)\r\n    ans =\r\n       3\r\n    \u003e\u003e board = [' O '\r\n                'XXO'\r\n                'OXO'];\r\n    \u003e\u003e count_OXO(board)\r\n    ans =\r\n       1","description_html":"\u003cp\u003eCount the number of occurrences of \"OXO\" in rows, columns, diagonals and anti-diagonals.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre\u003e    \u0026gt;\u0026gt; board = ['OOX'\r\n                'XXO'\r\n                'OXO'];\r\n    \u0026gt;\u0026gt; count_OXO(board)\r\n    ans =\r\n       3\r\n    \u0026gt;\u0026gt; board = [' O '\r\n                'XXO'\r\n                'OXO'];\r\n    \u0026gt;\u0026gt; count_OXO(board)\r\n    ans =\r\n       1\u003c/pre\u003e","function_template":"function y = count_OXO(board)\r\n  y = ;\r\nend","test_suite":"%%\r\nboard = 'OXO';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = '';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = '   ';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ' X ';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'O O';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'O O OXO X';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOX';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXOX';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOX OX';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXXO';\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OOXOOOOXXOXOX';\r\ny_correct = 2;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'OXO';'OXO'];\r\ny_correct = 4;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'OXO';'OOO'];\r\ny_correct = 4;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXX';'XXX';'XOO'];\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OOO';'X O';'OXO'];\r\ny_correct = 2;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['     ';'     ';'     ';'     '];\r\ny_correct = 0;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['O OO';'O XO';'OOX '];\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXXOXO';' OXO X';'XOXOXO'];\r\ny_correct = 6;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = ['OXOXOXO';'OXOXO X';'XOOOXOX'];\r\ny_correct = 8;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\nboard = 'OXO'.';\r\ny_correct = 1;\r\nassert(isequal(count_OXO(board),y_correct))\r\n%%\r\n% Keep in mind that Test Suite may be extended, so try to write general solution.\r\n% If you find any bugs, please report it to me. Thanks!\r\n% Have fun.","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":14358,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":"2017-08-31T12:44:18.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2015-03-24T21:25:19.000Z","updated_at":"2026-01-04T13:01:10.000Z","published_at":"2017-08-31T09:25:21.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCount the number of occurrences of \\\"OXO\\\" in rows, columns, diagonals and anti-diagonals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\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[    \u003e\u003e board = ['OOX'\\n                'XXO'\\n                'OXO'];\\n    \u003e\u003e count_OXO(board)\\n    ans =\\n       3\\n    \u003e\u003e board = [' O '\\n                'XXO'\\n                'OXO'];\\n    \u003e\u003e count_OXO(board)\\n    ans =\\n       1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"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":54214,"title":"To Bet or Not to Bet","description":"Given your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. Since this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 126px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 63px; transform-origin: 407px 63px; vertical-align: baseline; \"\u003e\u003cdiv style=\"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 63px; text-align: left; transform-origin: 384px 63px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eSince this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function tf = willLikelyWin(hand,upCardsOpp,totalCards)\r\n  tf=1;\r\nend","test_suite":"%%\r\nrng(1);\r\ncards=[repmat(1:13,1,4)',repelem(1:4,13)'];\r\nfor k=1:5\r\n    cards=cards(randperm(52),:);\r\nend\r\nt=[5 7];\r\ntotalCards=t(randi(2,1,100));\r\nfor k=1:100\r\n    if totalCards(k)==5\r\n        r=randperm(52,3);\r\n        hand{k}=cards(r(1:2),:);\r\n        upCardsOpp{k}=cards(r(3),:);\r\n    else\r\n        r=randperm(52,5);\r\n        hand{k}=cards(r(1:3),:);\r\n        upCardsOpp{k}=cards(r(4:5),:);\r\n    end\r\nend\r\nfor k=1:100\r\n    tf(k)=willLikelyWin(hand{k},upCardsOpp{k},totalCards(k));\r\nend\r\ntfg51=[ 1   0   1   0   1   1   0   0   1   1   1   0   0   1   0   0   0   1   0   0   0   0   0   1   0   1   0   0   1   1   0   1   0   0   0   0   1   0   1   0   1   0   1   0   1   0   0   0   1   1   1   1   1   1   0   1   0   1   0   1   0   0   0   0   0   0   1   1   1   1   1   1   0   1   0   0   0   1   1   0   1   1   0   0   0   1   0   0   1   1   0   1   1   0   0   0   0   0   1   0];\r\ntfl49=[ 0   1   0   0   0   0   1   1   0   0   0   1   1   0   1   1   1   0   1   1   1   0   0   0   1   0   1   1   0   0   1   0   1   1   0   1   0   1   0   1   0   1   0   1   0   1   0   1   0   0   0   0   0   0   1   0   1   0   1   0   1   1   1   1   1   1   0   0   0   0   0   0   1   0   1   1   1   0   0   1   0   0   1   1   1   0   1   1   0   0   1   0   0   1   1   1   1   1   0   1];\r\nassert(all(ismember(find(tfg51),find(tf))));\r\nassert(all(~ismember(find(tfl49),find(tf))));\r\n%%\r\nrng(1000);\r\ncards=[repmat(1:13,1,4)',repelem(1:4,13)'];\r\nfor k=1:5\r\n    cards=cards(randperm(52),:);\r\nend\r\nt=[5 7];\r\ntotalCards=t(randi(2,1,100));\r\nfor k=1:100\r\n    if totalCards(k)==5\r\n        r=randperm(52,3);\r\n        hand{k}=cards(r(1:2),:);\r\n        upCardsOpp{k}=cards(r(3),:);\r\n    else\r\n        r=randperm(52,5);\r\n        hand{k}=cards(r(1:3),:);\r\n        upCardsOpp{k}=cards(r(4:5),:);\r\n    end\r\nend\r\nfor k=1:100\r\n    tf(k)=willLikelyWin(hand{k},upCardsOpp{k},totalCards(k));\r\nend\r\ntfg51=[1   1   0   0   0   1   1   1   1   0   0   0   1   0   1   0   0   0   0   0   0   1   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   1   1   1   1   0   0   0   0   1   0   0   0   0   0   0   1   1   0   0   0   0   1   0   0   1   1   1   1   1   0   0   0   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   1   0   1];\r\ntfl49=[0   0   1   1   1   0   0   0   0   1   1   0   0   1   0   1   1   1   0   1   1   0   1   1   1   1   1   0   0   1   0   1   1   1   1   1   1   1   1   1   1   0   1   1   0   0   0   0   1   1   1   0   0   0   0   1   1   1   1   0   0   1   1   1   1   0   1   1   0   0   0   0   0   1   1   1   0   0   0   0   0   1   1   1   1   0   1   1   1   1   1   0   1   1   0   1   0   0   1   0];\r\nassert(all(ismember(find(tfg51),find(tf))));\r\nassert(all(~ismember(find(tfl49),find(tf))));\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2022-03-17T01:13:52.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-03-15T22:44:04.000Z","updated_at":"2025-12-16T01:19:56.000Z","published_at":"2022-03-16T21:52:54.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eGiven your current poker hand, the visible cards of your opponent's hand, and the total number of cards being dealt (5 card stud or 7 card stud). Determine whether or not you are likely to not lose the hand (output 1) or otherwise output zero. Your hand will be a matrix of card values (1:13 two=1, ace=13) in the first column and suits (1:4 clubs:spades) in the second column. Similarly for opponent's hand. Total cards (either 5 or 7) will indicate 5 card stud and 7 card stud. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSince this is a Monte Carlo, I provided some slop in the answer. I performed 40,000 iterations for each hand, so the slop should be sufficient to cover reduced iterations (such as my reference solution which only did 3000 iterations each).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":54275,"title":"Get twenty-four","description":"Inpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \r\nYou need to return a format and a vector with the same four integers, such that you can print the expression.\r\nE.g., input                            x = [5 5 7 7]\r\n        you may return            f  = '(%d*%d)-(%d/%d)'\r\n                     and                 z = [5 5 7 7]\r\n      so  24 is obatined by     eval(sprintf(f,z)).\r\n     The answer is not necessary unique, e.g., other acceptable answers are\r\n                                            f  = '(%d*%d)-(%d*%d)'  \r\n                                            z =  [7 7 5 5]\r\n                   and                   f = '(%d-%d)*(%d+%d)'\r\n                                            z = [7 5 7 5]","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 363px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 181.5px; transform-origin: 407px 181.5px; vertical-align: baseline; \"\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eInpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou need to return a format and a vector with the same four integers, such that you can print the expression.\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eE.g., input                            x = [5 5 7 7]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        you may return            f  = '(%d*%d)-(%d/%d)'\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                     and                 z = [5 5 7 7]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e      so  24 is obatined by     eval(sprintf(f,z)).\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e     The answer is not necessary unique, e.g., other acceptable answers are\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            f  = '(%d*%d)-(%d*%d)'  \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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            z =  [7 7 5 5]\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                   and                   f = '(%d-%d)*(%d+%d)'\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-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e                                            z = [7 5 7 5]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [f,z] = get24(x)\r\n  z = 23;\r\n  f = '(%d%d+%s%s)'\r\nend","test_suite":"%%\r\nx = [1 2 3 4];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [6 9 9 10];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e=9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [4 4 10 10];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [3 3 7 7];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend\r\n%%\r\nx = [1 4 5 6];\r\ntry \r\n    [f,z] = get24(x);\r\n    s = sprintf(f,z); s(s\u003e'9'|s\u003c'0')=' '; assert(length(str2num(s))==4);    \r\n    assert(ischar(f));\r\n    assert(all( sort(z)==sort(x) ));\r\n    assert(length(f(f=='-'|f=='+'|f=='*'|f=='/'))==3);\r\n    assert( abs( eval(sprintf(f,z))-24 )\u003c=1e-8 );\r\n    w = f(f~='('\u0026f~=')'\u0026f~='+'\u0026f~='-'\u0026f~='*'\u0026f~='/'\u0026f~='%'\u0026f~='s'\u0026f~='d');\r\n    assert(isempty(w),'unusual format character!');\r\ncatch\r\n    assert(false,'no result or something wrong!');\r\nend","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":2197980,"edited_by":2197980,"edited_at":"2024-08-29T05:32:43.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2024-08-29T05:32:43.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-04-13T12:52:09.000Z","updated_at":"2024-08-29T05:32:43.000Z","published_at":"2022-04-13T12:52:22.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eInpur four integers in 1 to 10, you may use plus, minus, multiply and divid to get 24. Note that every integer should be used once and only once. Brackets are of no limit, and the result should exactly be 24 once you calculate by hand. (Calculation in computer will lead to a tolerance to the computer precision.) \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\u003eYou need to return a format and a vector with the same four integers, such that you can print the expression.\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\u003eE.g., input                            x = [5 5 7 7]\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\u003e        you may return            f  = '(%d*%d)-(%d/%d)'\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\u003e                     and                 z = [5 5 7 7]\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\u003e      so  24 is obatined by     eval(sprintf(f,z)).\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\u003e     The answer is not necessary unique, e.g., other acceptable answers are\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\u003e                                            f  = '(%d*%d)-(%d*%d)'  \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\u003e                                            z =  [7 7 5 5]\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\u003e                   and                   f = '(%d-%d)*(%d+%d)'\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\u003e                                            z = [7 5 7 5]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1231,"title":"PACMAT Easy","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026d=1 PACMAT_Easy.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\nAn example video of the first Player \u003chttps://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026d=1 PACMAT_Easy_Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\nAlfonso Nieto-Castanon's 298 \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026d=1 PACMAT Video\u003e\r\n\r\nAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots\r\n\r\n\r\n*Near Future:* Ghosts will move with various algorithms.\r\n\r\n*Far Future:* Asteroids and Space Invaders","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003eAn example video of the first Player \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy_Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003eAlfonso Nieto-Castanon's 298 \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT Video\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will move with various algorithms.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFar Future:\u003c/b\u003e Asteroids and Space Invaders\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n lives=1; % Lives\r\n  movepac=0;\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003c5000 \u0026\u0026 ~isempty(find(map(:)==2))\r\n   while ~isempty(find(map(:)==2)) \u0026\u0026 movepac\u003c5000\r\n     movepac=movepac+1;\r\n\r\n if isempty(find(map==1,1)),break;end % \r\n [curdir]=pacmat(map);\r\n  if curdir==0,continue;end\r\n\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n     % Do nothing - Ran into a Wall\r\n    elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n      map(ptrpac)=0; % remove PAC from the board\r\n      lives=0;\r\n      break; % Lose\r\n    else % legal move\r\n      map(ptrpac)=0; % Eat Dot and clear PAC\r\n      ptrpac=ptrpac+mapdelta(curdir);\r\n      if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n      if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n      map(ptrpac)=2;\r\n    end\r\n  end % PAC Move while\r\n  if isempty(find(map==1,1)),break;end % \r\n   if lives==0,break;end\r\n   lives=lives-1;\r\n end % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0)\r\nassert(isempty(find(map==1)))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,movepac )) );","published":true,"deleted":false,"likes_count":4,"comments_count":4,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":19,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-01-30T04:55:54.000Z","updated_at":"2026-02-07T15:46:18.000Z","published_at":"2013-01-30T05:48:03.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAn example video of the first Player\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy_Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Nieto-Castanon's 298\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will move with various algorithms.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFar Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Asteroids and Space Invaders\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":44658,"title":"Kurosu solver","description":"This problem is related to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker Problem 44657\u003e.\r\n\r\nThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\r\n\r\n1. The game is played on a 6x6 board.\r\n\r\n2. Each row and each column must contain exactly 3 'X's and 3 'O's.\r\n\r\n3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\r\n\r\n4. Diagonals are of no importance.\r\n\r\nIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\r\n\r\nExample:\r\n\r\n  b0 = [-1 -1 -1  0 -1 -1\r\n        -1 -1 -1  0  0 -1\r\n        -1 -1 -1 -1 -1 -1\r\n        -1 -1  0 -1 -1  1\r\n        -1 -1 -1 -1  1  1\r\n        -1 -1  1 -1 -1 -1];\r\n\r\n  b1 = [ 1  1  0  0  1  0\r\n         0  1  1  0  0  1\r\n         1  0  0  1  1  0\r\n         0  1  0  1  0  1\r\n         0  0  1  0  1  1\r\n         1  0  1  1  0  0];","description_html":"\u003cp\u003eThis problem is related to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker\"\u003eProblem 44657\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\u003c/p\u003e\u003cp\u003e1. The game is played on a 6x6 board.\u003c/p\u003e\u003cp\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\u003c/p\u003e\u003cp\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\u003c/p\u003e\u003cp\u003e4. Diagonals are of no importance.\u003c/p\u003e\u003cp\u003eIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eb0 = [-1 -1 -1  0 -1 -1\r\n      -1 -1 -1  0  0 -1\r\n      -1 -1 -1 -1 -1 -1\r\n      -1 -1  0 -1 -1  1\r\n      -1 -1 -1 -1  1  1\r\n      -1 -1  1 -1 -1 -1];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eb1 = [ 1  1  0  0  1  0\r\n       0  1  1  0  0  1\r\n       1  0  0  1  1  0\r\n       0  1  0  1  0  1\r\n       0  0  1  0  1  1\r\n       1  0  1  1  0  0];\r\n\u003c/pre\u003e","function_template":"function b1 = kurosusolver(b0)\r\n    b1 = [];\r\nend","test_suite":"%%\r\nfiletext = fileread('kurosusolver.m');\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'switch')))\r\n\r\n%%\r\nb0 = zeros(6);\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [-1 -1 -1  0 -1 -1\r\n      -1 -1 -1  0  0 -1\r\n      -1 -1 -1 -1 -1 -1\r\n      -1 -1  0 -1 -1  1\r\n      -1 -1 -1 -1  1  1\r\n      -1 -1  1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [ 1 -1 -1  1  1 -1\r\n      -1 -1 -1 -1 -1  1\r\n      -1 -1  1 -1 -1 -1\r\n       1 -1 -1 -1 -1  1\r\n       1 -1 -1 -1  1 -1\r\n      -1  0 -1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [-1 -1  0 -1  0  0\r\n      -1 -1 -1  1 -1  1\r\n       0 -1 -1 -1 -1 -1\r\n      -1 -1 -1 -1 -1  1\r\n       0 -1 -1  1 -1 -1\r\n      -1 -1 -1 -1 -1 -1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [1 0 0 1 1 0\r\n      0 0 1 0 1 1\r\n      1 1 0 1 0 0\r\n      0 1 1 0 0 1\r\n      1 0 1 0 1 0\r\n      0 1 0 1 0 1];\r\nb1 = kurosusolver(b0);\r\nassert(~isempty(b1) \u0026\u0026 all(ismember(bin2dec(char(48+[b1;b1'])),str2num('11,13,19,21,22,25,26,37,38,41,42,44,50,52'))))\r\n\r\n%%\r\nb0 = [1 0 0 1 1 0\r\n      0 0 1 0 1 1\r\n      1 1 0 1 0 0\r\n      0 1 1 0 0 1\r\n      0 0 1 1 1 0\r\n      1 1 0 0 0 1];\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [0 1 0 1 1 0\r\n      1 0 1 0 0 1\r\n      1 1 0 1 0 0\r\n      0 0 1 1 0 1\r\n      1 0 1 0 1 0\r\n      0 1 0 0 1 1];\r\nb1 = kurosusolver(b0);\r\nassert(isempty(b1))\r\n\r\n%%\r\nb0 = [1  0  0  1  1  0\r\n      0  0  1  0  1  1\r\n      1  1  0  1  0  0\r\n      0 -1  1  0  0  1\r\n      1  0  1  0  1  0\r\n      0  1  0  1  0  1];\r\nb1 = kurosusolver(b0);\r\nb2 = zeros(6);\r\nb2(4,2) = 2;\r\nassert(isequal(b1,b0+b2))","published":true,"deleted":false,"likes_count":4,"comments_count":7,"created_by":15521,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":"2018-08-23T13:27:30.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-29T12:09:47.000Z","updated_at":"2019-01-18T11:50:58.000Z","published_at":"2018-05-29T17:56:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44657-kurosu-checker\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44657\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game of Kurosu is simple. A square grid contains cells that can be filled with either a 'X' or an 'O', similarly to a tic-tac-toe board. Game rules are as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1. The game is played on a 6x6 board.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2. Each row and each column must contain exactly 3 'X's and 3 'O's.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3. Only 2 'X's or 'O's can be placed consecutively, either in a row or in a column.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e4. Diagonals are of no importance.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem, given a partially filled Kurosu board, b0, return b1, an array of the same size, representing the solved board, or an empty array if there is no valid solution. 'X's and 'O's are represented by 1s and 0s, respectively. An empty cell is represented by -1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\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[b0 = [-1 -1 -1  0 -1 -1\\n      -1 -1 -1  0  0 -1\\n      -1 -1 -1 -1 -1 -1\\n      -1 -1  0 -1 -1  1\\n      -1 -1 -1 -1  1  1\\n      -1 -1  1 -1 -1 -1];\\n\\nb1 = [ 1  1  0  0  1  0\\n       0  1  1  0  0  1\\n       1  0  0  1  1  0\\n       0  1  0  1  0  1\\n       0  0  1  0  1  1\\n       1  0  1  1  0  0];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2026,"title":"Skyscrapers - Puzzle","description":"The Skyscraper puzzle challenge comes from \u003chttp://logicmastersindia.com/home/ Logic Masters India\u003e and \u003chttp://www.conceptispuzzles.com/ Games' Concept is Puzzles\u003e. \r\n\r\nCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\r\n\r\n*Input:* [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\r\n\r\n*Output:* M  an NxN matrix\r\n\r\n*Example:*\r\n\r\n  vr=[0 0 3 0 0]';\r\n  vL=[3 0 0 1 0]';\r\n  vd=[0 0 0 0 0];\r\n  vu=[5 2 0 0 0];\r\n\r\n  M\r\n         5     4     2     1     3\r\n         4     5     1     3     2\r\n         3     2     4     5     1\r\n         2     1     3     4     5\r\n         1     3     5     2     4\r\n\r\n*Algorithm Discussion:*\r\n\r\n  1) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\r\n  2) Calc Skyscraper count from Left and Right\r\n  3) Determine subset of SkyVectors possible for each Row and Column\r\n  4) Sort the Qty of 2*N possible solutions\r\n  5) Recursion from least to most valid SkyVectors\r\n  6) In recursion verify valid overlay or return\r\n","description_html":"\u003cp\u003eThe Skyscraper puzzle challenge comes from \u003ca href = \"http://logicmastersindia.com/home/\"\u003eLogic Masters India\u003c/a\u003e and \u003ca href = \"http://www.conceptispuzzles.com/\"\u003eGames' Concept is Puzzles\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e M  an NxN matrix\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003evr=[0 0 3 0 0]';\r\nvL=[3 0 0 1 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[5 2 0 0 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eM\r\n       5     4     2     1     3\r\n       4     5     1     3     2\r\n       3     2     4     5     1\r\n       2     1     3     4     5\r\n       1     3     5     2     4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eAlgorithm Discussion:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\r\n2) Calc Skyscraper count from Left and Right\r\n3) Determine subset of SkyVectors possible for each Row and Column\r\n4) Sort the Qty of 2*N possible solutions\r\n5) Recursion from least to most valid SkyVectors\r\n6) In recursion verify valid overlay or return\r\n\u003c/pre\u003e","function_template":"function m=solve_skyscrapers(vr,vL,vd,vu)\r\n m=[];\r\nend","test_suite":"%%\r\n%Games Feb 2014 #1\r\nvr=[0 0 1 0 5]'; %1\r\nvL=[0 4 4 0 0]';\r\nvd=[2 2 0 1 3];\r\nvu=[3 0 0 2 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd; % view down check\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view Left check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m); % view Up check\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #2\r\nvr=[0 4 0 2 0]'; %2\r\nvL=[5 1 0 0 0]';\r\nvd=[0 0 3 0 0];\r\nvu=[4 1 2 0 2];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #3\r\nvr=[5 2 2 0 0]'; %3\r\nvL=[0 3 0 3 4]';\r\nvd=[5 0 0 0 0];\r\nvu=[0 2 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #4\r\nvr=[0 0 4 5 0]'; %4\r\nvL=[0 0 0 0 0]';\r\nvd=[2 0 2 3 0];\r\nvu=[0 0 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n%%\r\n%Games Feb 2014 #5\r\nvr=[3 5 0 0 0]'; %5\r\nvL=[0 0 4 0 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[2 0 1 0 2];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\n\r\n%%\r\nvr=[0 0 3 0 0]'; %Games Feb 2014 #6\r\nvL=[3 0 0 1 0]';\r\nvd=[0 0 0 0 0];\r\nvu=[5 2 0 0 0];\r\n\r\ntic\r\nm=solve_skyscrapers(vr,vL,vd,vu)\r\ntoc\r\n\r\nnr=length(vr);\r\nnrsum=nr*(nr+1)/2;\r\nassert(nr*nrsum==sum(m(:)))\r\nassert(nr==size(m,1));\r\nassert(nr==size(m,2));\r\nassert(all(sum(m)==nrsum));\r\nassert(all(sum(m,2)==nrsum));\r\n\r\nmt=m; % view right check\r\nvz=vr;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nvz=vd;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\n\r\nmt=fliplr(m); % view right check\r\nvz=vL;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(k,1);\r\n for z=2:nr\r\n  if mt(k,z)\u003eshi\r\n   shi=mt(k,z);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)); % Assert check of valid count\r\n end % if\r\nend % k\r\n\r\nmt=flipud(m);\r\nvz=vu;\r\nfor k=1:nr\r\n if vz(k)\u003e0\r\n c=1;\r\n shi=mt(1,k);\r\n for z=2:nr\r\n  if mt(z,k)\u003eshi\r\n   shi=mt(z,k);\r\n   c=c+1;\r\n  end\r\n end % z\r\n c;\r\n vz(k);\r\n assert(c==vz(k)) % Assert check of valid count\r\n end % if\r\nend % k\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-29T19:42:36.000Z","updated_at":"2026-01-08T14:21:06.000Z","published_at":"2013-11-29T22:09:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Skyscraper puzzle challenge comes from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://logicmastersindia.com/home/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLogic Masters India\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames' Concept is Puzzles\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreate an NxN matrix where each row and column contains 1:N given the constraints of View_Right, View_Left, View_Down, and View_Up. A View is the number of Skyscrapers visible the given edge location. A Zero value is No Information provided.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 [vr,vL,vd,vu] vectors of sizes (N,1),(N,1),(1,N),(1,N)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 M an NxN matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[vr=[0 0 3 0 0]';\\nvL=[3 0 0 1 0]';\\nvd=[0 0 0 0 0];\\nvu=[5 2 0 0 0];\\n\\nM\\n       5     4     2     1     3\\n       4     5     1     3     2\\n       3     2     4     5     1\\n       2     1     3     4     5\\n       1     3     5     2     4]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Discussion:\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) Create permutations H and V vectors of length N of values 1:N. (N=5) [12345;12354;...54321]\\n2) Calc Skyscraper count from Left and Right\\n3) Determine subset of SkyVectors possible for each Row and Column\\n4) Sort the Qty of 2*N possible solutions\\n5) Recursion from least to most valid SkyVectors\\n6) In recursion verify valid overlay or return]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":45967,"title":"Backgammon #1 - Pip Count","description":"The following is a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\r\nThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\r\nBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\r\nNext problem in series: Problem 46006. Backgammon #2 - Your turn!\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1546.73px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 314.1px 773.367px; transform-origin: 314.1px 773.367px; vertical-align: baseline; \"\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: 125px 21px; text-align: left; transform-origin: 125px 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: 84.3083px 8.33333px; transform-origin: 84.3083px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe following is a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 328.933px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 132px 164.467px; transform-origin: 132px 164.467px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 61.9667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 30.9833px; text-align: left; transform-origin: 104px 30.9833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 101.592px 8.33333px; transform-origin: 101.592px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 164.133px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 82.0667px; text-align: left; transform-origin: 104px 82.0667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 103.625px 8.33333px; transform-origin: 103.625px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 102.833px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 104px 51.4167px; text-align: left; transform-origin: 104px 51.4167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 86.75px 8.33333px; transform-origin: 86.75px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 125px 21px; text-align: left; transform-origin: 125px 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: 119.258px 8.33333px; transform-origin: 119.258px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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: 311.1px 173.683px; transform-origin: 311.1px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 117.6px 8.33333px; tab-size: 4; transform-origin: 117.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 201.6px 8.33333px; tab-size: 4; transform-origin: 201.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 12.6px 8.33333px; transform-origin: 12.6px 8.33333px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 113.4px 8.33333px; transform-origin: 113.4px 8.33333px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 67.2px 8.33333px; transform-origin: 67.2px 8.33333px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 96.6px 8.33333px; transform-origin: 96.6px 8.33333px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 8.4px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 8.4px 8.33333px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 8.4px 8.33333px; transform-origin: 8.4px 8.33333px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 4.2px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 4.2px 8.33333px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 58.8px 8.33333px; transform-origin: 58.8px 8.33333px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 12.6px 8.33333px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 12.6px 8.33333px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 189px 8.33333px; tab-size: 4; transform-origin: 189px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 311.1px 10.2167px; transform-origin: 311.1px 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: 121.8px 8.33333px; tab-size: 4; transform-origin: 121.8px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 10.5px; text-align: left; transform-origin: 125px 10.5px; 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: 76.0333px 8.33333px; transform-origin: 76.0333px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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: 311.1px 10.2167px; transform-origin: 311.1px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 285.6px 8.33333px; tab-size: 4; transform-origin: 285.6px 8.33333px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 125px 21px; text-align: left; transform-origin: 125px 21px; 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: 105.142px 8.33333px; transform-origin: 105.142px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 168px; 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: 125px 84px; text-align: left; transform-origin: 125px 84px; 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: 125px 8.33333px; transform-origin: 125px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 189px; 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: 125px 94.5px; text-align: left; transform-origin: 125px 94.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: 104.225px 8.33333px; transform-origin: 104.225px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 126px; 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: 125px 63px; text-align: left; transform-origin: 125px 63px; 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: 107.425px 8.33333px; transform-origin: 107.425px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\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: 125px 21px; text-align: left; transform-origin: 125px 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: 73.0917px 8.33333px; transform-origin: 73.0917px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/46006\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 125px 31.5px; text-align: left; transform-origin: 125px 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: 121.417px 8.33333px; transform-origin: 121.417px 8.33333px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [WhitePip, RedPip, RelativePip]=pipcount(Board)\r\n  y = x;\r\nend","test_suite":"%%\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\ncorrect=[167,167,0];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\n\r\ncorrect=[12,10,2];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\ncorrect=[64,91,-27];\r\nassert(isequal(correct,[w,r,wpc]));\r\n\r\n%%\r\nBoard=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\nassert(isequal([1 1 1],isnan([w,r,wpc])));\r\n\r\n%%\r\nBoard=[-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,-10];\r\n\r\n[w,r,wpc]=pipcount(Board);\r\nassert(isequal([1 1 1],isnan([w,r,wpc])));\r\n\r\n%%\r\ns=importdata('pipcount.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":437780,"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-06-20T10:13:41.000Z","updated_at":"2022-01-12T20:06:05.000Z","published_at":"2021-04-17T13:26:03.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\u003eThe following is a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eThe Pip Count rates the relative strength of one player's position against the other's, by counting the total dice throw required to exactly bear off all that player's remaining stones and comparing the relative count of one player against the other to determine which has the stronger position.\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\u003eThe input is a vector describing a backgammon board position using the above notation. You should return a vector containing three elements: white's pip count, red's pipcount and the relative pipcount from white's perspective - i.e. a negative relative pipcount means that white has the stronger position.\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\u003eBefore attempting to calculate the pipcount you should check that the input represents a legal backgammon board position. If it doesn't then you should return NaN for all three output elements.\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/46006\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1698,"title":"Connect Four: find winning move","description":"Inspired by \u003chttp://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker this problem\u003e...\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Connect_Four Connect Four\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\r\n\r\n*Problem Statement*\r\n\r\nGiven an array (size is arbitrary) in which\r\n\r\n* 0 : space is empty\r\n* 1 : player 1 piece\r\n* 2 : player 2 piece\r\n\r\nreturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\r\n\r\n*Assumptions*\r\n\r\n* Pieces fall to the bottommost available row in each column, as in the real game\r\n* The input grid will always represent a valid game state\r\n\r\n*Example*\r\n\r\nIf\r\n\r\n  b = [0 0 0 0 0 0 0;\r\n       0 0 0 0 0 0 0;\r\n       0 0 0 2 0 0 0;\r\n       0 0 0 1 0 0 0;\r\n       0 0 0 2 2 0 0;\r\n       0 0 2 1 1 1 0];\r\n\r\nthen\r\n\r\n  y = 7\r\n","description_html":"\u003cp\u003eInspired by \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker\"\u003ethis problem\u003c/a\u003e...\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Connect_Four\"\u003eConnect Four\u003c/a\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/p\u003e\u003cp\u003e\u003cb\u003eProblem Statement\u003c/b\u003e\u003c/p\u003e\u003cp\u003eGiven an array (size is arbitrary) in which\u003c/p\u003e\u003cul\u003e\u003cli\u003e0 : space is empty\u003c/li\u003e\u003cli\u003e1 : player 1 piece\u003c/li\u003e\u003cli\u003e2 : player 2 piece\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/p\u003e\u003cp\u003e\u003cb\u003eAssumptions\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003ePieces fall to the bottommost available row in each column, as in the real game\u003c/li\u003e\u003cli\u003eThe input grid will always represent a valid game state\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\n\u003c/pre\u003e\u003cp\u003ethen\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ey = 7\r\n\u003c/pre\u003e","function_template":"function y = c4win(b)\r\n  y = [];\r\nend","test_suite":"%%\r\nb = zeros(6,7);\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 0 0;\r\n     2 1 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 1 0 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = 5;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     2 0 0 1 1 1 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [3 5 6];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [2 2 1 2 1 2 1;\r\n     1 2 2 1 2 2 2;\r\n     2 1 1 2 2 1 1;\r\n     1 2 1 1 1 2 1;\r\n     2 2 1 2 2 1 1;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     2 1 0 0 0 0 0;\r\n     2 2 1 1 0 0 0;\r\n     1 2 2 1 0 0 0];\r\ny_correct = 1;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 1 2 0 0 2 0;\r\n     0 1 1 0 1 2 0;\r\n     0 1 2 1 2 2 0];\r\ny_correct = [2 4];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 2 2 0 0 0;\r\n     0 0 0 2 1 1 0 0 0;\r\n     0 0 2 1 2 2 0 0 0;\r\n     0 0 1 2 1 1 0 0 0;\r\n     1 0 1 1 2 2 0 0 0;\r\n     2 2 1 2 1 1 0 0 0];\r\ny_correct = 2;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0 2 0;\r\n     0 0 0 0 0 2 2 1 1;\r\n     0 0 0 0 0 2 1 2 2;\r\n     0 0 0 0 0 1 2 1 1;\r\n     0 0 0 1 0 1 1 2 2;\r\n     0 0 0 2 2 1 2 1 1];\r\ny_correct = [5 9];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 2;\r\n     0 0 0 1 0 1;\r\n     0 0 0 1 0 2;\r\n     0 1 0 1 0 1;\r\n     0 2 1 2 0 2;\r\n     1 2 2 2 0 1;\r\n     2 2 1 1 0 2];\r\ny_correct = [4];\r\nassert(isequal(c4win(b),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":29,"test_suite_updated_at":"2013-07-07T23:16:13.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-07-07T21:57:33.000Z","updated_at":"2025-06-13T11:30:13.000Z","published_at":"2013-07-07T23:16:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInspired by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ethis problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Connect_Four\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eConnect Four\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eProblem Statement\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an array (size is arbitrary) in which\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e0 : space is empty\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1 : player 1 piece\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2 : player 2 piece\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAssumptions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePieces fall to the bottommost available row in each column, as in the real game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe input grid will always represent a valid game state\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf\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[b = [0 0 0 0 0 0 0;\\n     0 0 0 0 0 0 0;\\n     0 0 0 2 0 0 0;\\n     0 0 0 1 0 0 0;\\n     0 0 0 2 2 0 0;\\n     0 0 2 1 1 1 0];]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen\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[y = 7]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1982,"title":"Battleship - Seaman Level","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Future:* The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.","description_html":"\u003cp\u003e\u003ca href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003eGames Magazine Battleships\u003c/a\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/p\u003e\u003cp\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\u003c/p\u003e\u003cp\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/p\u003e\u003cp\u003eShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/p\u003e\u003cp\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e b; A binary 12x12 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003em              b\r\n000000000000  000000000000\r\n077757777770  000011000000\r\n077777777770  000000000000\r\n077777777770  000100010000\r\n077777777770  000100010000\r\n077777777770  010000010000\r\n077777777770  010000010010\r\n027777777760  010000000010\r\n077777777770  000101000010\r\n077777777770  000000000000\r\n077777477770  010001100100\r\n000000000000  000000000000\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.\u003c/p\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n% Games August 2013 1-Seaman\r\nr=[0 2 2 3 1 1 1 1 2 2 5 0]';\r\nc=[0 1 0 1 1 2 6 0 5 0 4 0];\r\nm(2,2)=1;\r\nm(2,6)=1;\r\nm(4,9)=3;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 1-Seaman \r\n r=[0 1 1 1 1 2 3 3 3 1 4 0]';\r\n c=[0 3 2 0 1 6 0 3 1 4 0 0];\r\n m(2,3)=1;\r\n m(8,5)=1;\r\n m(7,8)=6;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 1-Seaman\r\n r=[0 1 1 2 4 1 0 2 2 5 2 0]';\r\n c=[0 1 1 1 1 4 0 7 0 2 3 0];\r\n m(2,8)=0;\r\n m(8,3)=1;\r\n m(9,6)=0;\r\n m(5,11)=6;\r\n\r\ntic\r\nb=solve_battleship(m,r,c);\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n\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":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-12T05:17:43.000Z","updated_at":"2013-11-12T06:14:18.000Z","published_at":"2013-11-12T06:14:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 b; A binary 12x12 array\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The example is a Level-4 Captain board. The future holds less explicit boards that will require recursion methods.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2004,"title":"BattleShip - Petty Officer (Level 2)","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to solve.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Algorithm:* \r\n\r\n  1) Initialize processing array based upon input matrix.\r\n  2) Implement a cycling check of driven array changes\r\n  3) Quick Test of Change every single Unknown serially\r\n  4) Evolve and check if complete solution created","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: 795.667px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 397.833px; transform-origin: 407px 397.833px; vertical-align: baseline; \"\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\u003ca target='_blank' href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eGames Magazine Battleships\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: 291.35px 7.91667px; transform-origin: 291.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\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: 360.45px 7.91667px; transform-origin: 360.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to solve.\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: 382.1px 7.91667px; transform-origin: 382.1px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\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: 382.267px 7.91667px; transform-origin: 382.267px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\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: 165.183px 7.91667px; transform-origin: 165.183px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe map is ringed by zeros to make m a 12x12 array.\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: 220.5px 7.91667px; transform-origin: 220.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\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: 74.3px 7.91667px; transform-origin: 74.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e b; A binary 12x12 array\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\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 326.933px; 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 163.467px; transform-origin: 404px 163.467px; 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: 111.65px 7.91667px; transform-origin: 111.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ec=[0 4 0 3 1 3 1 4 0 1 3 0];\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 57.75px 7.91667px; transform-origin: 57.75px 7.91667px; \"\u003em              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 7.91667px; \"\u003eb\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e000000000000  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077757777770  000011000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000100010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000100010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  010000010000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  010000010010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e027777777760  010000000010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000101000010\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777777770  000000000000\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e077777477770  010001100100\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: 100.1px 7.91667px; transform-origin: 100.1px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e000000000000  000000000000\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 35.3833px 7.91667px; transform-origin: 35.3833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm:\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: 211.75px 7.91667px; transform-origin: 211.75px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; \"\u003e1) Initialize \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 157.85px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 157.85px 7.91667px; \"\u003eprocessing array based upon input matrix.\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: 200.2px 7.91667px; transform-origin: 200.2px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; \"\u003e2) Implement \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 150.15px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 150.15px 7.91667px; \"\u003ea cycling check of driven array changes\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: 204.05px 7.91667px; transform-origin: 204.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 34.65px 7.91667px; transform-origin: 34.65px 7.91667px; \"\u003e3) Quick \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 169.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 169.4px 7.91667px; \"\u003eTest of Change every single Unknown serially\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: 184.8px 7.91667px; transform-origin: 184.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 38.5px 7.91667px; transform-origin: 38.5px 7.91667px; \"\u003e4) Evolve \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 146.3px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 146.3px 7.91667px; \"\u003eand check if complete solution created\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"%%\r\nglobal valid\r\nfiletext = fileread('solve_battleship.m');\r\nvalid=isempty(strfind(filetext, '(exist(fullfile(cd'));\r\nassert(valid,'overwrite assert forbidden')\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n% Games August 2013 2-Petty Officer %\r\nr=[0 0 1 4 1 3 3 3 3 2 0 0]';\r\nc=[0 2 3 2 0 5 0 4 0 2 2 0];\r\nm(5,4)=3;\r\nm(6,11)=3;\r\nm(9,8)=0;\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 2-Petty %\r\nr=[0 2 2 2 3 2 0 0 7 0 2 0]';\r\nc=[0 2 5 1 4 1 4 0 2 1 0 0];\r\nm(3,3)=3;\r\nm(5,7)=1;\r\nm(9,4)=0;\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n\r\n%%\r\nglobal valid\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 2-Petty\r\nr=[0 5 1 4 1 0 5 1 2 1 0 0]';\r\nc=[0 2 3 3 2 0 5 0 3 1 1 0];\r\nm(9,2)=1;\r\nm(2,7)=0;\r\nm(3,9)=1;\r\n\r\n\r\ntic\r\nb=0;\r\nif valid\r\n b=solve_battleship(m,r,c);\r\nend\r\ntoc\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\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":4,"test_suite_updated_at":"2020-10-01T19:08:44.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2013-11-17T22:45:53.000Z","updated_at":"2025-12-10T03:22:09.000Z","published_at":"2013-11-17T23:06:51.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:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\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\u003eThe Seaman Level is the simplest and can be solved by direct evolution of current condition. The Petty Officer Level requires just a pinch more effort to 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:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\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\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\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\u003eThe map is ringed by zeros to make m a 12x12 array.\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\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 b; A binary 12x12 array\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003eAlgorithm:\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) Initialize processing array based upon input matrix.\\n2) Implement a cycling check of driven array changes\\n3) Quick Test of Change every single Unknown serially\\n4) Evolve and check if complete solution created]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":2005,"title":"BattleShip - Seaman (1) thru Admiral(6) :  CPU Time Scoring(msec)","description":"\u003chttp://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships Games Magazine Battleships\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\r\n\r\nThis Challenge is to complete three full sets of Battleship in minimal time.\r\n\r\nMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\r\n\r\nShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\r\n\r\nThe map is ringed by zeros to make m a 12x12 array.\r\n\r\n*Input:* m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\r\n\r\n*Output:* b; A binary 12x12 array\r\n\r\n*Scoring:* Total Time (msec)\r\n\r\n*Example:*\r\n\r\n  r=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\n  c=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n  \r\n  m              b\r\n  000000000000  000000000000\r\n  077757777770  000011000000\r\n  077777777770  000000000000\r\n  077777777770  000100010000\r\n  077777777770  000100010000\r\n  077777777770  010000010000\r\n  077777777770  010000010010\r\n  027777777760  010000000010\r\n  077777777770  000101000010\r\n  077777777770  000000000000\r\n  077777477770  010001100100\r\n  000000000000  000000000000\r\n\r\n*Algorithm:* \r\n\r\n  1) Initialize processing array based upon input matrix.\r\n  2) Implement a cycling check of driven array changes\r\n  3) Quick Test of Change every single Unknown serially\r\n  4) Evolve and check if complete solution created\r\n  5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs","description_html":"\u003cp\u003e\u003ca href = \"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\"\u003eGames Magazine Battleships\u003c/a\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/p\u003e\u003cp\u003eThis Challenge is to complete three full sets of Battleship in minimal time.\u003c/p\u003e\u003cp\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/p\u003e\u003cp\u003eShips have no diagonal or UDLR adjacency.  The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/p\u003e\u003cp\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m,r,c;  m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e b; A binary 12x12 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total Time (msec)\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003er=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003em              b\r\n000000000000  000000000000\r\n077757777770  000011000000\r\n077777777770  000000000000\r\n077777777770  000100010000\r\n077777777770  000100010000\r\n077777777770  010000010000\r\n077777777770  010000010010\r\n027777777760  010000000010\r\n077777777770  000101000010\r\n077777777770  000000000000\r\n077777477770  010001100100\r\n000000000000  000000000000\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eAlgorithm:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Initialize processing array based upon input matrix.\r\n2) Implement a cycling check of driven array changes\r\n3) Quick Test of Change every single Unknown serially\r\n4) Evolve and check if complete solution created\r\n5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs\r\n\u003c/pre\u003e","function_template":"function b=solve_battleship(m,r,c)\r\n% WSUDLRMX 0W 1S 2U 3D 4L 5R 6M 7X\r\n% Surround 10x10 with ring of zeros\r\n% r : RowSum Vector [12,1]\r\n% c : ColSum Vector [1,12]\r\n b=zeros(12);\r\nend","test_suite":"assignin('caller','score',2000);\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 1-Seaman\r\nr=[0 2 2 3 1 1 1 1 2 2 5 0]';\r\nc=[0 1 0 1 1 2 6 0 5 0 4 0];\r\nm(2,2)=1;\r\nm(2,6)=1;\r\nm(4,9)=3;\r\n\r\n%tz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\n%tt=tz+cputime-time0\r\ntt=cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 2-Petty Officer\r\nr=[0 0 1 4 1 3 3 3 3 2 0 0]';\r\nc=[0 2 3 2 0 5 0 4 0 2 2 0];\r\nm(5,4)=3;\r\nm(6,11)=3;\r\nm(9,8)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 3-Ensign\r\nr=[0 3 0 4 1 0 0 1 2 1 8 0]';\r\nc=[0 5 1 1 3 1 1 1 1 3 3 0];\r\nm(4,7)=1;\r\nm(4,11)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 4-Captain\r\nr=[0 1 2 2 2 2 5 0 5 0 1 0]';\r\nc=[0 5 0 0 0 2 1 4 2 1 5 0];\r\nm(4,8)=0;\r\nm(7,10)=4;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 5-Commodore\r\nr=[0 1 1 5 0 3 1 3 2 1 3 0]';\r\nc=[0 2 2 1 0 2 1 6 0 5 1 0];\r\nm(6,4)=1;\r\nm(6,8)=0;\r\nm(7,10)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% Games August 2013 6-Admiral\r\nr=[0 5 1 4 2 3 1 1 0 3 0 0]';\r\nc=[0 4 0 1 2 4 2 1 1 5 0 0];\r\nm(5,2)=1;\r\nm(10,7)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 1-Seaman\r\nr=[0 1 1 1 1 2 3 3 3 1 4 0]';\r\nc=[0 3 2 0 1 6 0 3 1 4 0 0];\r\nm(2,3)=1;\r\nm(8,5)=1;\r\nm(7,8)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 2-Petty\r\nr=[0 2 2 2 3 2 0 0 7 0 2 0]';\r\nc=[0 2 5 1 4 1 4 0 2 1 0 0];\r\nm(3,3)=3;\r\nm(5,7)=1;\r\nm(9,4)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 3-Ensign\r\nr=[0 3 0 0 2 4 3 2 1 4 1 0]';\r\nc=[0 2 2 5 2 3 0 3 0 2 1 0];\r\nm(7,2)=1;\r\nm(7,4)=3;\r\nm(9,8)=0;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 4-Captain\r\nr=[0 2 0 2 2 2 3 2 3 0 4 0]';\r\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\r\nm(8,2)=2;\r\nm(2,5)=5;\r\nm(11,7)=4;\r\nm(8,11)=6;\r\n\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 5-Commodore\r\nr=[0 3 2 3 1 1 1 3 3 2 1 0]';\r\nc=[0 1 2 4 1 4 1 1 0 5 1 0];\r\nm(2,10)=5;\r\nm(8,4)=6;\r\nm(8,6)=5;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% December 2013 6-Admiral\r\nr=[0 5 1 0 3 0 1 5 2 3 0 0]';\r\nc=[0 0 4 2 5 2 1 2 1 1 2 0];\r\nm(2,10)=0;\r\nm(8,7)=0;\r\nm(10,5)=1;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 1-Seaman\r\nr=[0 1 1 2 4 1 0 2 2 5 2 0]';\r\nc=[0 1 1 1 1 4 0 7 0 2 3 0];\r\nm(2,8)=0;\r\nm(8,3)=1;\r\nm(9,6)=0;\r\nm(5,11)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 2-Petty\r\nr=[0 5 1 4 1 0 5 1 2 1 0 0]';\r\nc=[0 2 3 3 2 0 5 0 3 1 1 0];\r\nm(9,2)=1;\r\nm(2,7)=0;\r\nm(3,9)=1;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 3-Ensign\r\nr=[0 3 0 2 3 1 1 2 2 2 4 0]';\r\nc=[0 1 1 0 6 1 4 0 3 1 3 0];\r\nm(4,3)=0;\r\nm(5,6)=4;\r\nm(7,9)=6;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 4-Captain\r\nr=[0 0 6 0 2 2 4 1 3 2 0 0]';\r\nc=[0 3 1 3 1 2 2 2 2 0 4 0];\r\nm(5,2)=0;\r\nm(9,4)=0;\r\nm(3,5)=4;\r\nm(6,11)=2;\r\nm(8,11)=3;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 5-Commodore %\r\nr=[0 5 2 1 1 7 1 2 0 0 1 0]';\r\nc=[0 2 3 1 2 1 3 1 2 0 5 0];\r\nm(8,2)=1;\r\nm(5,11)=2;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\nm=zeros(12);\r\nm(2:end-1,2:end-1)=7;\r\n\r\n% September 2013 6-Admiral % Solved with with Bship HV .10 \r\n% solved recur .023\r\nr=[0 0 2 4 1 4 1 0 2 0 6 0]';\r\nc=[0 3 1 3 1 3 2 1 2 1 3 0];\r\nm(3,2)=0;\r\nm(4,5)=4;\r\nm(9,9)=5;\r\n\r\ntz=tt; % anti-cheat\r\ntic\r\ntime0=cputime;\r\nb=solve_battleship(m,r,c);\r\ntt=tz+cputime-time0\r\n%toc\r\n\r\n\r\nb(b\u003e1)=0;\r\nb(b\u003c0)=0;\r\n\r\nbr=sum(b,2);\r\nbc=sum(b);\r\n\r\nassert(isequal(r,br))\r\nassert(isequal(c,bc))\r\n\r\n% find battleship,cruisers,destroyers,subs\r\n% conv2 to locate pieces\r\n% bsh,bsv\r\n% ch,cv,dh,dv,s\r\n mconvsub=conv2(b,[2 2 2;2 1 2;2 2 2],'same');\r\n subs_ptr=find(mconvsub==1); % Isolated valid subs\r\n assert(size(subs_ptr,1)==4)\r\n % Qty of subs_ptr must be 4\r\n mconvBH=conv2(b,[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n mconvBV=conv2(b',[5 5 5 5 5 5;5 1 1 1 1 5;5 5 5 5 5 5],'same');\r\n BS_ptr=[find(mconvBH==4);find(mconvBV==4)];\r\n assert(size(BS_ptr,1)==1)\r\n % Qty of BS_ptr must be 1\r\n mconvCH=conv2(b,[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n mconvCV=conv2(b',[5 5 5 5 5;5 1 1 1 5;5 5 5 5 5],'same');\r\n CS_ptr=[find(mconvCH==3);find(mconvCV==3)];\r\n assert(size(CS_ptr,1)==2)\r\n % Qty of CS_ptr must be 2\r\n mconvDH=conv2(b,[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n mconvDV=conv2(b',[5 5 5 5;5 1 1 5;5 5 5 5],'same');\r\n DS_ptr=[find(mconvDH==2);find(mconvDV==2)];\r\n assert(size(DS_ptr,1)==3)\r\n % Qty of DS_ptr must be 3\r\ntoc\r\n%%\r\nglobal tt\r\ntt\r\nassignin('caller','score',min(2000,floor(1000*tt)));","published":true,"deleted":false,"likes_count":1,"comments_count":0,"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":"2013-11-17T23:26:01.000Z","updated_at":"2013-11-18T00:27:11.000Z","published_at":"2013-11-18T00:27:11.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.conceptispuzzles.com/index.aspx?uri=puzzle/battleships\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGames Magazine Battleships\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a logic puzzle to find the Fleet given some map information and the number of Ship cells in every column and row. The fleet is made of a Battleship(4), two Cruisers(3), three Destroyers(2), and four Submarines(1). Thus the total filled cells is 20.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to complete three full sets of Battleship in minimal time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMap information contains Water(0), Subs(1), Middle of a ship(6), Unknown(7), and the Aft(rear) of a ship. Ship going Up(2), Down(3), Left(4), and Right(5).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShips have no diagonal or UDLR adjacency. The best way in Seaman to deal with Midship segments is to determine where it can not go to determine an orientation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe map is ringed by zeros to make m a 12x12 array.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 m,r,c; m 12x12 of map values, r(12,1) of row sums, c(1,12) of col sums\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 b; A binary 12x12 array\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total Time (msec)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[r=[0 2 0 2 2 2 3 2 3 0 4 0]';\\nc=[0 4 0 3 1 3 1 4 0 1 3 0];\\n\\nm              b\\n000000000000  000000000000\\n077757777770  000011000000\\n077777777770  000000000000\\n077777777770  000100010000\\n077777777770  000100010000\\n077777777770  010000010000\\n077777777770  010000010010\\n027777777760  010000000010\\n077777777770  000101000010\\n077777777770  000000000000\\n077777477770  010001100100\\n000000000000  000000000000]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm:\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) Initialize processing array based upon input matrix.\\n2) Implement a cycling check of driven array changes\\n3) Quick Test of Change every single Unknown serially\\n4) Evolve and check if complete solution created\\n5) Robustly recursively check all potential Battleships, Cruisers, Destroyers, Subs]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":54010,"title":"Evaluate Poker Hand","description":"Given an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\r\nExample:\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[rank,kickers]=evalHand(hand)\r\n\r\nrank =\r\n\r\n     1\r\n\r\n\r\nkickers =\r\n\r\n    13","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 411.25px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 205.625px; transform-origin: 407px 205.625px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 126px; 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 63px; text-align: left; transform-origin: 384px 63px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 245.25px; 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 122.625px; transform-origin: 404px 122.625px; 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.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand.Properties.VariableNames={\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); \"\u003e'value'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); \"\u003e'suit'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e};\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[rank,kickers]=evalHand(hand)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003erank =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ekickers =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    13\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [rank,kickers]=evalHand(hand)\r\nrank=1;\r\nkickers=13;\r\nend","test_suite":"%%\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,1));\r\nassert(isequal(k,13));\r\n%%\r\nhand=table([10    11     9     7     6     8    13]',[3     1     4     3     2     2     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,5));\r\nassert(isequal(k,11));\r\n%%\r\nhand=table([10     5     8    10     2     7     1]',[1     4     4     3     4     4     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,4));\r\nassert(isequal(k,[8     7     5     2     1]));\r\n%%\r\nhand=table([5     4     5     8     7    13     8]',[1     4     4     4     2     2     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,7));\r\nassert(isequal(k,[8     5    13]));\r\n%%\r\nhand=table([10     1     3     2    13     5    11]',[3     1     1     4     2     4     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,9));\r\nassert(isequal(k,[13    11    10     5     3]));\r\n%%\r\nhand=table([10    13     2     1     3    13     8]',[4     3     1     2     1     2     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,8));\r\nassert(isequal(k,[13    10     8     3]));\r\n%%\r\nhand=table([12     2     5     6     5     5     9    12     3    10     6    10     7]',[3     1     1     2     4     3     3     2     4     3     1     4     1]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,3));\r\nassert(isequal(k,[5    12]));\r\n%%\r\nhand=table([9     9     9     5     9]',[1     2     3     3     4]');\r\nhand.Properties.VariableNames={'value','suit'};\r\n[r,k]=evalHand(hand);\r\nassert(isequal(r,2));\r\nassert(isequal(k,[9     5]));\r\n%%\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2022-02-17T03:41:12.000Z","updated_at":"2022-02-17T03:46:12.000Z","published_at":"2022-02-17T03:41:12.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\u003eGiven an input table of card values and card suits between five and thirteen cards, choose the best five cards and output the rank and an array of kickers (most significant first). Report rank as follows: straight flush=1, four-of-kind=2, full-house=3, flush=4, straight=5, three-of-kind=6, two pairs=7, pair=8, high card=9. Report array of kickers as the value of the most important cards first (some hands will only have a single kicker while others might have five different kickers). Values of cards are as follows: 2:10,jack,queen,king,ace == 1:13. Suits of cards are as follows: clubs, diamonds, hearts, spades == 1:4.\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\u003eExample:\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[hand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\\nhand.Properties.VariableNames={'value','suit'};\\n[rank,kickers]=evalHand(hand)\\n\\nrank =\\n\\n     1\\n\\n\\nkickers =\\n\\n    13]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53780,"title":"Backgammon #5 - Valid Move?","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nSo initial board set-up is (from White's perspective):\r\n                     Red (X)\r\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\r\n   +  O           X    BB  X              O +   \r\n   +  O           X    BB  X              O +\r\n   +  O           X    BB  X                +\r\n   +  O                BB  X                +\r\n   +  O                BB  X                +\r\n   +                   BB                   +\r\n   +===================BB===================+\r\n   +                   BB                   +\r\n   +  X                BB  O                +\r\n   +  X                BB  O                +\r\n   +  X           O    BB  O                +\r\n   +  X           O    BB  O              X +\r\n   +  X           O    BB  O              X +\r\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\r\n                    White (O)\r\nWhich is represented as:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nWhite moves towards point 1, red towards point 24.\r\nGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\r\nThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified standard notation. \r\nFor the purpose of this exercise, the move is expressed simply as 'starting_point/destination_point' using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\r\n'6/3' '24/18' '13/9' 'bar/22' and '6/off'\r\nYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\r\nWhite does not have a stone on the starting_point\r\nRed has more than one stone on the destination_point\r\nWhite has a stone on the bar and the move is not moving that stone off the bar\r\nWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\r\nThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\r\nFor this problem, you can assume that the board input vector represents a legal backgammon board position. \r\nPrevious problem in series: Problem 53850. Backgammon #4 - Dice Probabilities\r\nNext problem in series: Coming soon!\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them.","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: 1157.07px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 578.533px; transform-origin: 407px 578.533px; vertical-align: baseline; \"\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: 140.433px 7.75px; transform-origin: 140.433px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 182.825px 7.75px; transform-origin: 182.825px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 124.1px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 62.05px; transform-origin: 391px 62.05px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 296.8px 7.75px; transform-origin: 296.8px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.8px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 30.9px; text-align: left; transform-origin: 363px 30.9px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 354.1px 7.75px; transform-origin: 354.1px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 41.3667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.6833px; text-align: left; transform-origin: 363px 20.6833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 362.108px 7.75px; transform-origin: 362.108px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 159.642px 7.75px; transform-origin: 159.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo initial board set-up is (from White's perspective):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 107.8px 8.25px; tab-size: 4; transform-origin: 107.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                     Red (X)\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 184.8px 8.25px; tab-size: 4; transform-origin: 184.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 11.55px 8.25px; transform-origin: 11.55px 8.25px; \"\u003e   \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +===================BB===================+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +                   BB                   +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 103.95px 8.25px; transform-origin: 103.95px 8.25px; \"\u003e   +  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 88.55px 8.25px; transform-origin: 88.55px 8.25px; \"\u003e   +  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 111.65px 8.25px; tab-size: 4; transform-origin: 111.65px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                    White (O)\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 77.0167px 7.75px; transform-origin: 77.0167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhich is represented as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 261.8px 8.25px; tab-size: 4; transform-origin: 261.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 159.083px 7.75px; transform-origin: 159.083px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite moves towards point 1, red towards point 24.\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: 379.267px 7.75px; transform-origin: 379.267px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://thegammonpress.com/backgammon-notation/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003estandard notation\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: 2.4px 7.75px; transform-origin: 2.4px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \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: 206.308px 7.75px; transform-origin: 206.308px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor the purpose of this exercise, the move is expressed simply as '\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: 98.2083px 7.75px; transform-origin: 98.2083px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estarting_point/destination_point'\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: 78.575px 7.75px; transform-origin: 78.575px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 157.85px 8.25px; tab-size: 4; transform-origin: 157.85px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 115.5px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 115.5px 8.25px; \"\u003e'6/3' '24/18' '13/9' 'bar/22' \u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003eand \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 26.95px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 26.95px 8.25px; \"\u003e'6/off'\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 361.9px 7.75px; transform-origin: 361.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 83.7333px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 41.8667px; transform-origin: 391px 41.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 112.017px 7.75px; transform-origin: 112.017px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite does not have a stone on the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 42.0167px 7.75px; transform-origin: 42.0167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estarting_point\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 115.525px 7.75px; transform-origin: 115.525px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eRed has more than one stone on the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 52.9167px 7.75px; transform-origin: 52.9167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003edestination_point\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 242.958px 7.75px; transform-origin: 242.958px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite has a stone on the bar and the move is not moving that stone off the bar\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 299.142px 7.75px; transform-origin: 299.142px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 347.492px 7.75px; transform-origin: 347.492px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\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: 339.967px 7.75px; transform-origin: 339.967px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor this problem, you can assume that the board input vector represents a legal backgammon board position. \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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53850\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \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: 43.1833px 7.75px; transform-origin: 43.1833px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eComing soon!\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: 275.408px 7.75px; transform-origin: 275.408px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function valid = validmove(Board, move)\r\n  valid=true;\r\nend","test_suite":"%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='24/23';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='bar/22';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='15/11';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='bar/22';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='bar/18';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-1,0,0,1,-1,3,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,1,0,0,0];\r\nmove='13/7';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nmove='6/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=true;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,12,-12];\r\nmove='6/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,12,-12];\r\nmove='9/off';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='13/12';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='8/11';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='off/5';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nmove='13/bar';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='24/30';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='54/48';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='5/0';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='4/-1';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nmove='13/13';\r\ncheck=validmove(BoardIn,move);\r\ncorrect=false;\r\nassert(isequal(correct,check));\r\n\r\n%%\r\ns=fileread('validmove.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2022-01-18T16:51:09.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-01-07T17:10:38.000Z","updated_at":"2022-01-18T16:51:09.000Z","published_at":"2022-01-18T11:22:56.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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003eSo initial board set-up is (from White's perspective):\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[                     Red (X)\\n   +-13-14-15-16-17-18-BB-19-20-21-22-23-24-+\\n   +  O           X    BB  X              O +   \\n   +  O           X    BB  X              O +\\n   +  O           X    BB  X                +\\n   +  O                BB  X                +\\n   +  O                BB  X                +\\n   +                   BB                   +\\n   +===================BB===================+\\n   +                   BB                   +\\n   +  X                BB  O                +\\n   +  X                BB  O                +\\n   +  X           O    BB  O                +\\n   +  X           O    BB  O              X +\\n   +  X           O    BB  O              X +\\n   +-12-11-10-09-08-07-BB-06-05-04-03-02-01-+\\n                    White (O)]]\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:t\u003eWhich is represented as:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003eWhite moves towards point 1, red towards point 24.\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\u003eGiven a board position and a proposed move, this problem rerquires you to establish if the proposed move is a valid move for white, or not.\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\u003eThe input consists of a vector and a string; the vector describes a backgammon board position using the above notation and the string specifies a proposed move for a single stone based on the throw of a single dice, in a simplified \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://thegammonpress.com/backgammon-notation/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003estandard notation\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor the purpose of this exercise, the move is expressed simply as '\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estarting_point/destination_point'\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e using the point numbers as above, and using 'bar' if a stone is moving from the bar, and 'off' if a stone is bearing off the board. Some example proposed moves are thus:\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['6/3' '24/18' '13/9' 'bar/22' and '6/off']]\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:t\u003eYou should return true or false, depending on whether the proposed move is valid or not for the given board position. Possible reasons why a move might not be valid include:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite does not have a stone on the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estarting_point\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRed has more than one stone on the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edestination_point\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite has a stone on the bar and the move is not moving that stone off the bar\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite is trying to bear off a stone, but not all white stones are in white's inner table (points 1 to 6)\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\u003eThere are a few more reasons why a move might not be valid, but I'll leave those for you to work out for yourself!\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\u003eFor this problem, you can assume that the board input vector represents a legal backgammon board position. \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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53850\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eComing soon!\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":53840,"title":"Backgammon #3 - Display a Board Position","description":"A previous problem in this occasional series (Problem 45967) set up a possible representation of a backgammon board:\r\nWhite stones are represented by positive integers Red stones represented by negative integers.\r\nThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\r\nEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\r\nPlease look at Problem 45967 to understand how the board is represented as a 28-element vector.\r\nFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+                   BB                   +  +\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with fprintf to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\r\nSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\r\nNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\r\nSome example inputs and outputs are:\r\nStarting board:\r\nBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+  O           X    BB  X              O +  +\r\n+  O           X    BB  X              O +  +\r\n+  O           X    BB  X                +  +\r\n+  O                BB  X                +  +\r\n+  O                BB  X                +  +\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   +  +\r\n+  X                BB  O                +  +\r\n+  X                BB  O                +  +\r\n+  X           O    BB  O                +  +\r\n+  X           O    BB  O              X +  +\r\n+  X           O    BB  O              X +  +\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nBoard with stones on bar and home:\r\nBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+  O           X    BX  X           X    + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB  X                + X+\r\n+                   BB                   +  +\r\n+===================BB===================+==+\r\n+                   BB                   + 7+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB  O                + O+\r\n+  X  O             BB  O                + O+\r\n+  X  O        O    BB  O        O       + O+\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nBoard with most stones borne off:\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\ndisplays as:\r\n                  Red (X)                    \r\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\r\n+                   BB  X           X    + X+\r\n+                   BB              X    + X+\r\n+                   BB                   + X+\r\n+                   BB                   + X+\r\n+                   BB                   + X+\r\n+                   BB                   +12+\r\n+===================BB===================+==+\r\n+                   BB                   +13+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB                   + O+\r\n+                   BB  O                + O+\r\n+                   BB  O                + O+\r\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\r\n                  White (O)                  \r\nTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \r\nNote that the test suite will compare your chartacter array against the correct array, but will also fprintf your array so that you can check visually that it looks correct.\r\nPrevious problem in series: Problem 46006. Backgammon #2 - Your turn!\r\nNext problem in series: Problem 53850. Backgammon #4 - Dice Probabilities\r\nRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.","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: 2497.87px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 1248.93px; transform-origin: 407px 1248.93px; vertical-align: baseline; \"\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: 140.433px 7.75px; transform-origin: 140.433px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA previous problem in this occasional series (\u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 182.825px 7.75px; transform-origin: 182.825px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) set up a possible representation of a backgammon board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 124.1px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 62.05px; transform-origin: 391px 62.05px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.9333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.4667px; text-align: left; transform-origin: 363px 10.4667px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 296.8px 7.75px; transform-origin: 296.8px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.8px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 30.9px; text-align: left; transform-origin: 363px 30.9px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 354.1px 7.75px; transform-origin: 354.1px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 41.3667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.6833px; text-align: left; transform-origin: 363px 20.6833px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 362.108px 7.75px; transform-origin: 362.108px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 45.9px 7.75px; transform-origin: 45.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease look at \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/45967\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 45967\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: 211.992px 7.75px; transform-origin: 211.992px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to understand how the board is represented as a 28-element vector.\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: 377.258px 7.75px; transform-origin: 377.258px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; 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: 378.45px 7.75px; transform-origin: 378.45px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with \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: 17.5px 7.75px; transform-origin: 17.5px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efprintf\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: 309.642px 7.75px; transform-origin: 309.642px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\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: 373.017px 7.75px; transform-origin: 373.017px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; 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: 384px 7.75px; transform-origin: 384px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\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: 119.808px 7.75px; transform-origin: 119.808px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSome example inputs and outputs are:\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: 45.9px 7.75px; transform-origin: 45.9px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eStarting board:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 261.8px 8.25px; tab-size: 4; transform-origin: 261.8px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eO +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  O                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 92.4px 8.25px; transform-origin: 92.4px 8.25px; \"\u003e+  X                BB  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X           O    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 53.9px 8.25px; transform-origin: 53.9px 8.25px; \"\u003e              \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 11.55px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 11.55px 8.25px; \"\u003eX +\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003e+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 112.417px 7.75px; transform-origin: 112.417px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eBoard with stones on bar and home:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 269.5px 8.25px; tab-size: 4; transform-origin: 269.5px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoard=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  O           X    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 42.35px 8.25px; transform-origin: 42.35px 8.25px; \"\u003e           \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  X                + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +  +\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + 7+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 8.25px; transform-origin: 77px 8.25px; \"\u003e+  X  O             \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 8.25px; transform-origin: 61.6px 8.25px; \"\u003e                \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 57.75px 8.25px; transform-origin: 57.75px 8.25px; \"\u003e+  X  O        \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 7.7px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 7.7px 8.25px; \"\u003eBB\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 8.25px; transform-origin: 7.7px 8.25px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 30.8px 8.25px; transform-origin: 30.8px 8.25px; \"\u003e        \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eO\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 26.95px 8.25px; transform-origin: 26.95px 8.25px; \"\u003e       \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 104.233px 7.75px; transform-origin: 104.233px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eBoard with most stones borne off:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 20.4333px; 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 10.2167px; transform-origin: 404px 10.2167px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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; 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: 273.35px 8.25px; tab-size: 4; transform-origin: 273.35px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; 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: 36.5667px 7.75px; transform-origin: 36.5667px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003edisplays as:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 347.367px; 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 173.683px; transform-origin: 404px 173.683px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  Red (X)                    \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 138.6px 8.25px; transform-origin: 138.6px 8.25px; \"\u003e+                   BB  X           \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 3.85px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 3.85px 8.25px; \"\u003eX\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 8.25px; transform-origin: 15.4px 8.25px; \"\u003e    \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 8.25px; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 8.25px; \"\u003e+ X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB              X    + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + X+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +12+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+===================BB===================+==+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   +13+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB                   + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+                   BB  O                + O+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 173.25px 8.25px; tab-size: 4; transform-origin: 173.25px 8.25px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e                  White (O)                  \u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 375.725px 7.75px; transform-origin: 375.725px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \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: 296.25px 7.75px; transform-origin: 296.25px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote that the test suite will compare your chartacter array against the correct array, but will also \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: 17.5px 7.75px; transform-origin: 17.5px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efprintf\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: 70.25px 7.75px; transform-origin: 70.25px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e your array so that you can check visually that it looks correct.\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: 86.3583px 7.75px; transform-origin: 86.3583px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePrevious problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/46006\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/span\u003e\u003c/span\u003e\u003c/a\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: 73.5167px 7.75px; transform-origin: 73.5167px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNext problem in series: \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/53850\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; 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 42px; text-align: left; transform-origin: 384px 42px; 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: 372.025px 7.75px; transform-origin: 372.025px 7.75px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function bstring = displayboard(Board)\r\n    %String to display an empty board\r\n    bstring=strcat(...\r\n        '                  Red (X)                    \\n',...\r\n        '+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+===================BB===================+==+\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+                   BB                   +  +\\n',...\r\n        '+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n        '                  White (O)                  \\n');\r\n    %Add your code here...\r\nend","test_suite":"%%\r\nBoardIn=zeros(1,28);\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];\r\nBoardString=displayboard(BoardIn);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+  O           X    BB  X              O +  +\\n',...\r\n'+  O           X    BB  X              O +  +\\n',...\r\n'+  O           X    BB  X                +  +\\n',...\r\n'+  O                BB  X                +  +\\n',...\r\n'+  O                BB  X                +  +\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+  X                BB  O                +  +\\n',...\r\n'+  X                BB  O                +  +\\n',...\r\n'+  X           O    BB  O                +  +\\n',...\r\n'+  X           O    BB  O              X +  +\\n',...\r\n'+  X           O    BB  O              X +  +\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nfprintf(correct)\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+                   BB  X           X    + X+\\n',...\r\n'+                   BB              X    + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   + X+\\n',...\r\n'+                   BB                   +12+\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   +13+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%%\r\nBoardIn=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];\r\nBoardString=displayboard(BoardIn);\r\nfprintf(BoardString);\r\ncorrect=strcat(...\r\n'                  Red (X)                    \\n',...\r\n'+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n',...\r\n'+  O           X    BX  X           X    + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB  X                + X+\\n',...\r\n'+                   BB                   +  +\\n',...\r\n'+===================BB===================+==+\\n',...\r\n'+                   BB                   + 7+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB                   + O+\\n',...\r\n'+                   BB  O                + O+\\n',...\r\n'+  X  O             BB  O                + O+\\n',...\r\n'+  X  O        O    BB  O        O       + O+\\n',...\r\n'+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n',...\r\n'                  White (O)                  \\n');\r\nassert(isequal(correct,BoardString));\r\n\r\n%% Anti-cheating code temporarily removed as some solutions fail for the importdata() function\r\n%Alternative anti-cheating tests may be added later, if cheat solutions are submitted\r\ns=fileread('displayboard.m');\r\ny_correct=false;\r\nassert(isequal(sum(contains(s,'regexp')),y_correct),'Regexp is forbidden')\r\nassert(isequal(sum(contains(s,'assert')),y_correct),'Assert is forbidden')","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":437780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2022-01-18T11:35:29.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2022-01-11T13:45:31.000Z","updated_at":"2022-01-18T11:35:29.000Z","published_at":"2022-01-11T14:33: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\u003eA previous problem in this occasional series (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) set up a possible representation of a backgammon board:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhite stones are represented by positive integers Red stones represented by negative integers.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe board is a vector of integers: The first 24 integers are the points numbered (from White's perspective) 1 to 24; integers 25 and 26 are white's bar and red's bar respectively; integers 27 and 28 are whites home and red's home respectively\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach integer represents the number of stones on that point; e.g. 4 means white has 4 stones on that point; -2 means red has 2 stones on that point.\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\u003ePlease look at \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45967\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 45967\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to understand how the board is represented as a 28-element vector.\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\u003eFor the purpose of this problem, the 'visual' representation of the board has been extended to include space for white and red's 'home' - i.e. the place where stones are placed once they are borne off the board. So the visual representation of the empty board is:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+                   BB                   +  +\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:t\u003eThe aim of this problem is to write code that will take a board position vector as an input, and output a character array that can be used with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efprintf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to display a visual representation of the board position. This could be useful when working on other backgammon problems, as it allows a human-readable version of a board position to be quickly displayed.\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\u003eSo, given a board position vector, this problem requires you to output a character array that can be printed to display the board position. Input will only consist of valid board positions - however, you should also be able to send an 'empty' board position vector (i.e. 28 zeros) to display the empty board.\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\u003eNote that there is only room to display up to 6 stones on each point. If a point has more than six stones, display the first five, and then replace the sixth stone with a number indicating the number of stones. Each point (including bar and home) is represented by two columns of characters; stones should be displayed on the right-hand column, so that two-digit numbers can be correctly displayed (see examples below).\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\u003eSome example inputs and outputs are:\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eStarting board:\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[Board=[-2,0,0,0,0,5,0,3,0,0,0,-5,5,0,0,0,-3,0,-5,0,0,0,0,2,0,0,0,0];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+  O           X    BB  X              O +  +\\n+  O           X    BB  X              O +  +\\n+  O           X    BB  X                +  +\\n+  O                BB  X                +  +\\n+  O                BB  X                +  +\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   +  +\\n+  X                BB  O                +  +\\n+  X                BB  O                +  +\\n+  X           O    BB  O                +  +\\n+  X           O    BB  O              X +  +\\n+  X           O    BB  O              X +  +\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBoard with stones on bar and home:\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[Board=[0,0,1,0,0,3,0,1,0,0,2,-2,1,0,0,0,-1,0,-5,0,0,0,-1,0,0,-1,7,-5];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+  O           X    BX  X           X    + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB  X                + X+\\n+                   BB                   +  +\\n+===================BB===================+==+\\n+                   BB                   + 7+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB  O                + O+\\n+  X  O             BB  O                + O+\\n+  X  O        O    BB  O        O       + O+\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBoard with most stones borne off:\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[BoardIn=[0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,-2,0,0,0,13,-12];]]\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:t\u003edisplays as:\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[                  Red (X)                    \\n+-13-14-15-16-17-18-BB-19-20-21-22-23-24-+HH+\\n+                   BB  X           X    + X+\\n+                   BB              X    + X+\\n+                   BB                   + X+\\n+                   BB                   + X+\\n+                   BB                   + X+\\n+                   BB                   +12+\\n+===================BB===================+==+\\n+                   BB                   +13+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB                   + O+\\n+                   BB  O                + O+\\n+                   BB  O                + O+\\n+-12-11-10-09-08-07-BB-06-05-04-03-02-01-+HH+\\n                  White (O)                  ]]\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:t\u003eTo make it slightly easier for you, the function template below contains the character array for the empty board. Have fun, and good luck! \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\u003eNote that the test suite will compare your chartacter array against the correct array, but will also \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efprintf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e your array so that you can check visually that it looks correct.\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\u003ePrevious problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/46006\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 46006. Backgammon #2 - Your turn!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003eNext problem in series: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/53850\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 53850. Backgammon #4 - Dice Probabilities\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRegexp cheats and other cheats are not appreciated and will be blocked if you use them. This means that you can't use regexp to process the board character array - please comment if you think that this represents an unreasonable restriction! The aim is to produce code that will generate boards programmatically from generalised input. If I see hard-coded solutions I will try to add more test cases to block them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":892,"title":"Solve Rubik's Cube - Up to Two Face Moves","description":"A standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice.  The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 54\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\r\n\r\n  Output: mov (A row vector of one or two of values {1:18})\r\n   mov: is a vector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order. \r\n* Minimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\r\n* \r\nVerifications will be by executing your move vector against the provided rubik and checking number of moves.\r\n\r\nThe function rubik_rot(mov,r) is available for usage\r\n\r\n\r\nThis is the next incremental solution step: Move optimization.\r\n\r\nAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e ","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: 1062.82px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 447.983px 531.417px; transform-origin: 447.983px 531.417px; vertical-align: baseline; \"\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: 340.283px 7.91667px; transform-origin: 340.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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: 316.733px 7.91667px; transform-origin: 316.733px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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: 352.917px 7.91667px; transform-origin: 352.917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 134.917px; 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 67.4667px; text-align: center; transform-origin: 384px 67.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 246.917px; 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 123.467px; text-align: center; transform-origin: 384px 123.467px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 113.917px; 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 56.9667px; text-align: center; transform-origin: 384px 56.9667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; 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: 444.983px 71.5167px; transform-origin: 444.983px 71.5167px; 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: 444.983px 10.2167px; transform-origin: 444.983px 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: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eInput: (rubik)\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; \"\u003erubik: row vector \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 38.5px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 38.5px 7.91667px; \"\u003eof size 54\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 323.4px 7.91667px; transform-origin: 323.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 219.45px 7.91667px; transform-origin: 219.45px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eOutput: mov (A row vector of one or two of values {1:18})\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: 444.983px 10.2167px; transform-origin: 444.983px 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: 419.65px 7.91667px; transform-origin: 419.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 42.35px 7.91667px; transform-origin: 42.35px 7.91667px; \"\u003e mov: is a \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 377.3px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 377.3px 7.91667px; \"\u003evector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cul style=\"block-size: 102.167px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 51.0833px; transform-origin: 391px 51.0833px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 29.1833px 7.91667px; transform-origin: 29.1833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.4333px; text-align: left; transform-origin: 363px 20.4333px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 361.283px 7.91667px; transform-origin: 361.283px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 281.6px 7.91667px; transform-origin: 281.6px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMinimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 339.217px 7.91667px; transform-origin: 339.217px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eVerifications will be by executing your move vector against the provided rubik and checking number of moves.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 157.033px 7.91667px; transform-origin: 157.033px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function rubik_rot(mov,r) is available for usage\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: 188.65px 7.91667px; transform-origin: 188.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the next incremental solution step: Move optimization.\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: 367.617px 7.91667px; transform-origin: 367.617px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 40.8667px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 20.4333px; transform-origin: 391px 20.4333px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://kociemba.org/cube.htm\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCube Theory: 20-moves Any Cube\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mov_vec = rubik_solve(r)\r\n% Single/Dual Rubik's Cube Move Solving Challenge\r\n% Available function to check/determine solution : rubik_rot(mov,r)\r\n% out=rubik_rot(mov,r) returns a moved cube array of size 54\r\n% Solved Cube vector\r\n%[00000000111111111222222222333333333444444444555555555]; % with spaces\r\n\r\n  mov_vec=[1 2]; % mov is a single or two value row vector {1-18}\r\nend","test_suite":"%%\r\n% Load function rubik_rot.m\r\ntic\r\nfname='https://sites.google.com/site/razapor/matlab_cody/rubik_rot.m?attredirects=0\u0026d=1';\r\nurlwrite(fname,'rubik_rot.m');\r\n%urlwrite('http://tinyurl.com/matlab-rubik-rot','rubik_rot.m') ; %dead tinyurl\r\nrehash path\r\ntoc\r\n\r\n\r\n%%\r\n% For mov=1 solution is 7. Need U' to solve U in 1 move\r\n% mov=1; % U  answer should be 7\r\n% Solved Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nr1=rubik_rot(1,r); % Create Challenge Cube\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),1), [sprintf('Exp_moves=1 Exp Mov=7  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=7  moves=[%i %i]\\n',mov_vec(:)))\r\n\r\n%%\r\n% For mov=14 the solution is 14. Need F2 to solve F2 in 1 move\r\n% Solved Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nr1=rubik_rot(14,r); % Create Challenge Cube\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),1), [sprintf('Exp_moves=1 Exp Mov=14  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=14  move=[%i]\\n',mov_vec(:))) \r\n\r\n\r\n%%\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\n\r\nr1=rubik_rot(2,r); % Create Challenge Cube, First Twist\r\nr1=rubik_rot(9,r1); % Create Challenge Cube, Second Twist\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[3 8]  moves=[')  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[3 8]  moves=[%i %i]\\n',mov_vec(:)))\r\n\r\n%%\r\n% Anti-Hard code solution Test Case #1\r\n\r\ncmov=[7:12 1:6 13:18]; % Complementary Move\r\n\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nmove_map=[  2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ];\r\n\r\nmovt1=randi(18); \r\nmovt2=move_map(movt1,randi(15));% Avoid complementary moves\r\n\r\n\r\nr1=rubik_rot(movt1,r); % Create Challenge Cube: First Turn\r\nr1=rubik_rot(movt2,r1); % Create Challenge Cube: Second Turn\r\n\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[%i %i]  moves=[',cmov(movt2),cmov(movt1))  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[%i %i]  moves=[%i %i]\\n',cmov(movt2),cmov(movt1),mov_vec(:)))\r\n\r\n%%\r\n% Anti-Hard code solution Test Case #2\r\n\r\ncmov=[7:12 1:6 13:18]; % Complementary Move\r\n\r\n% Starting Cube Vector\r\nr=[0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5];\r\nmove_map=[  2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ;\r\n             2 3 4 5 6   8 9 10 11 12    14 15 16 17 18;\r\n           1   3 4 5 6 7   9 10 11 12 13    15 16 17 18;\r\n           1 2   4 5 6 7 8   10 11 12 13 14    16 17 18;\r\n           1 2 3   5 6 7 8 9    11 12 13 14 15    17 18;\r\n           1 2 3 4   6 7 8 9 10    12 13 14 15 16    18;\r\n           1 2 3 4 5   7 8 9 10 11    13 14 15 16 17   ];\r\n\r\nmov2t1=randi(18); \r\nmov2t2=move_map(mov2t1,randi(15));% Avoid complementary moves\r\n\r\n\r\nr1=rubik_rot(mov2t1,r); % Create Challenge Cube: First Turn\r\nr1=rubik_rot(mov2t2,r1); % Create Challenge Cube: Second Turn\r\n\r\n\r\nmov_vec=rubik_solve(r1);\r\n\r\nfor i=1:length(mov_vec) % Perform moves to see if it solves\r\n r1=rubik_rot(mov_vec(i),r1);\r\nend\r\n\r\nassert(isequal(length(mov_vec),2), [sprintf('Exp_moves=2 Exp Mov=[%i %i]  moves=[',cmov(mov2t2),cmov(mov2t1))  sprintf('%i ',mov_vec(:)) sprintf(']\\n')])\r\n\r\nassert(isequal(r1,r),sprintf('Exp Mov=[%i %i]  moves=[%i %i]\\n',cmov(mov2t2),cmov(mov2t1),mov_vec(:)))\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":6,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2020-09-29T16:49:36.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2012-08-09T16:34:10.000Z","updated_at":"2020-09-29T16:50:43.000Z","published_at":"2012-08-09T20:21:27.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\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The loaded function r_new=rubick_rot(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId2\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 54\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then received one or two face moves.\\n\\nOutput: mov (A row vector of one or two of values {1:18})\\n mov: is a vector values 1:18 representing the moves in order to fix the cube: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', the one and only 2 move answer is [3 7] DU' which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMinimum moves is also required. Scramble by 13(U2) should return a [13], not [1 1] or [7 7]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided rubik and checking number of moves.\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\u003eThe function rubik_rot(mov,r) is available for usage\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\u003eThis is the next incremental solution step: Move optimization.\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\u003eAdditional Challenges will be solving the cube at even deeper depths for time and minimizing face moves utilized. This depth does not justify a time check.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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.gif\",\"relationshipId\":\"rId1\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.gif\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhbABsAPf/AJJ3Uu7u7omXaMytTFZ0bQhwrQiV0JmZmgG062mXiJGPWOPk5FlcW6jVhilvsy2QrqmwZXi4qPLpRlW3yM/Pz1bH1/3nNFSmtAuGuGpzalGaqAbD6vPz89nZ2ipPawmn2HvEtmanpobVyGikmWWId+fPSnmXeHOpl3mkh9flTyuIyHRuV4jY1YfJqApPkmWclXa7tU54hHvIxomndq2srS9ti//qKoPMuPyRKP+2KsqRR6jVeXSdgzKz0P/XKoW6mInUuKumWprWmZi5d4zFmYe0i4W7ppinZg5ZpejoO5PMmIPOxrPZeKWXVsnYWPq7MViIh1qWmRRommm2uoOqhpbWptuTOprIh7zOWHiyndnGQ7raZ//3KdjMOsvjZWDL16TMesfWYuK2S7irWHuHZluBd9nbRv3yNf/LKbecVXPO0+V7L5SrdLa4XPndNCVZiPqtNJujWpW4hv+sK6aSZOrZOtayPWKNgnXU2LbGY7iHR2iBajB7wLCMKFdnX8zcSqnFbZ3He76jTJdiQxweIKyESf3IMevr547UrWuRfMvFSJ+2abmXSKCFVkqFlkZWY2fCyqmcm6u0XP379vPu6hs1UvXz7nCtpMbNWGygjFWLk724Sn+geLmNUem7PGWss2tXN5DPooqgbHWKdJKbpV6UjJ3Si7DVarDhiDOFoO/v9NzgV6ykTmyxrnqTbePj3WtcTKibTHx/WUeFjMF2Q+jEQS2ivu709O7l41+eo3uEiuLd246wdx9epeOmPPr39N/f4N/k5dzMT7LKc5HZtMG5uGrS28nEwv/5Hs7N04KukdfU0szT02LS4Ofr7efn5//RIHSfkAk+hKKjp32wjI3Cjb/jcvGhKra6w2GLkN6gQPf390mRouTf4d/jPse8xfDdLYLQ0Y/SnB2BpNPPzf////v7+///+v/7+/v3+/Pv8Pv/+vv////7/+vn6ff7+/f799/j35Cwgfv7/6O+fJC+k9PS1secW8i8W+bZXDxERJGxb8TGykDD3B/B5AAAACH5BAEAAP8ALAAAAABsAGwAQAj/AP8JNLdNXYCDCBMqXMiwocOHECNKPKhum8CLAp+V28iRIzCNHUOW21YuGIMBAHQ88bXCExofjAp1OqOFjiE0tRpdm5OjkDaeenTwtNIJzhw4nZ4o1TOglo5BtHDgsNLoibZBg3DQGsSvHDqRHAMs6BhgI41d6v6BBLvAXcdz5zqqygCgyRkJsuoIS9Oolg8fsQS9jLVCKR0FbiycaSJMMasBFix0wSdhQCMATwz1HPBSUBofbmo1sVGnUeEnaAoBMDSIBkd+j0AJEgMgqJgm6jYeoHBILdiNC9Zy3JZh05E2ijKQqSOhSR3FsYTZOBNkkwUuivxosVEiThw7dRgI/ztzhpV1G1rGSLAgIYgZb0nitEmSRFIc+H+OhGElYEWTTeCMkY8WyjURBH0KBCFAGwqwJ0wTZZWzW29rdfAMMB1gCEwyyxxCgz6SLELPDGQs4sUiojiRAiYCYPFHCgIMs4UXR/AygyKKHOHEH2HsIYAFNsQxShcSMCCANUwswgYTpzDBBhhXyKGcAKLssYcoAriSgSj0NCCKF7LsQUYekuwzhCROzCCPKFu0KYCKKcSRm4S8+SbSIaMQwAk9JpiwBz1MMCHPEA2gMoQoYOwAhgmBmCKECURQMQQbTzbACw8tUJGHKIHsgIqPW1gjCgGnDLNHBmwM4WSip4gyxA47yP8zCidUFEGFKX746YopShBAhRBCKLNHEVX8YIIpyO7hignK8DDnhHaWQ0AGezBLDQo8EBGKEtkqEQoPifBQRBHZikNEIi3cgMIe2orDQxZAZLEHD94SkQAMCdDDyQ8tEFMGFeKE8sMo1QhRxCg/8NDsKIkok8geKFCTRcQniJBJKNSMMAK/QKBAwA1ARJBAKKGcQEALQABxwrN1rpWJyka0kEkC+lSiDwP6EFAGCX4QkEA0ZTxCwgkkMEDCHjwncgfPBCQSDQlljOD00FlkAQUU6CbyAgwREEBCBGC/8MIdRiSSCdhKV22yxgn4nAjTZWTCMwkE+OFHIgmQ8EjPifj/wTKFHC3BwiVQjBAODJmA8EIrI8AwwidTJBBCNn7c4fgJmVxSiuMwOE6A4SxE8AIIIhPwwiUglAICCyyM0IoIIkRwyRIiLDHCDSK0HsESMrxQ+AulZAODDOG8sAQIlxAQhQwstFLK6YqHMIIMUCw+BQF/R9vKBTFoUsEXF4QQwgP95KIBN/48kIstb2QQ10a6RAFDLqVA8sknuXyihhpRxABDODKIAiTUgAcNTGEKkIBCDDSQC010Lwr9i4IGLuCIXHyhAhfQwP6m8AIZ5OIBjtgf/6DwCfDFwBZfyMUsbFEDUuBiHhzJ3lr8sYEHPGADNYzBBzZggDcYQArZmNNv/8oxCWyk4gHG0EANJtCMC9hQAxPgRg/60Y9U7HADNSgABjBQgBikAgPjqAEGPoCAcdgChxh4gD/88YEsknEcCPhAAaRgCwRsUQpdxEUMgdERc+imTofgCC6m0bMMZOAAyxiiIjkADD9KSAoGGGMBIvmBcRjAAHLEQCTfAMkPRBIBoBwHFwvgAgeoQAV4VIEBVPCGApwSkr3gwxvegIRHUAIsAWhkDP/YmwiB5RC+VKRIOOCWkJjDD9LgQy/m6AA+KNMFkyyAKVWgTGc6QAoYOGUvkMBNJPTCAeD0gAt60QtpuAAJHkjk+8CijmJuhCR06s1A1AEMCkxDF4ZkgD73yf/PfvrznwANqEAHStCBGlIX06AAMNRhjn9UpCPwLMdHhNkRfsBiDbQwhB5ooQOY6GEOcxgEAHxgCE/ohCc+AYpQckAUoyBlJVuJilZkaoVBrOGmWOnKNsyxzjvxsRzmcOQhGJqRIU5UmLoohB0EkAZtNMICaRCDDxrxCFkwQhB18QFOCnGNa+hgBQAoBCNqwxNt6MClSVFKITjjA89YACUAgEMO4LDWQmgFFscoxzvAYolAhoWX0RLJAvwqEgowIB8KaFAQMiALVjQhCUHIh2KCsAJB+GAAabCBGxrRCEHI4gzRcQxk0NOGyLTnPWeIgwDo4BnLhqYJQLKAc2xQixX/jAEZtdWHLPChhSakgQ5jcA6OmgBPaAknJMDsyDIyAIhFQAATxyHDEfLABFH84Q9e4NIRJKEA65xhE9ZtgwCaAA4ubMIPmMhAiFyxiCMo4LF3gcB74jOf+sSBPix6zyoEYAYJ4GUFEDiOACDwB0zEQQJdgMAKFEAlMhS3ZUPMpQl2pSw2WIMNZOASLziRqECYQB6cWIQA8uAEGvGiATsYgh/y4A0nCAAMQ4BAHADhJAWwIQP7GAYbTtGkGQQCxa5qABN4IQpYDYETTADEDB6RAXrIgQCA2MKlZrCDBgwhA5yohyk4DKsZyJAj6TjAIxKhhHpYiVZFMIESgFUrYBUB/wUC89MVkGWCH4RCHCggARWYsI9otEAJVSDAqxpgAiOgQEnUaIEJFkEFTphADlTQVhXERTIqUEEJRaDbm6tggkT8gBg8oEIibjAxQKOgDC1ARAvotWYqfHkjeCMBCajxg1PzwAiIyIQRTqCMUSgDERiLxsQSZgSQZSIL0agCCk4AsgjcgQdVsBcIYkcAI4QCESgYQQKIUI2KnYAKiQaCEcoQLmrwYGgRAEECQJaFMoDgBkvIxAk6yDjcJaAMtVtCAlpwghMk4NXliMAI7jA7EcCAADConR9GVwY/UO0OZQBb27Jwgxvs7GylmN0N7p2JjpchCxG4QSYSbrEswA4Gs/9bwhKYTbsXZIF2l0hAFjDnswRc4g7TvsEdEpCJFyTgdqVDXfJeALY7ADwcLJAe0l+QDTWEIxxluAAepuCHVoQgin54hPDKML8RlEIGMggBFC7BulZEoRViuwPzWLA1pIfgdSyAwSeQHo4QCI4FuWjF0y9xCRnA4AUxaMUSikc8GMTgBW6HwgXUAIIYfAISuYhBDFxDEMCu5QvNmKATH8ANKqaiBj0Y4zgegQ14BGAb23gH6n9BCkc44gK5gPwFLgA5DXyvArPg/BSiMIX95eICX/jCBC5QgeJrABLBn2DwNVGDB3zgA6mgYj8cYcUaXoAbH7BFDB6AACk8Yhe/AMb/MtTBgfJnj7Bk3CIoMfAGTbqAAJag6EY4sIBfRAKMN2zjONZYyUj2APsIsAGWBEqfFEpkZEcGsEYP0H62wEWg9AE+REbYZAAF4AEMEH8doQ5jwRGOBC3BFBIL4AzyJxL05EgbEQmT5AIYYAsqgAQFUACZpErSdErV5ExS4Ewq8E2ndE3S5AC9kE1I4AJ84AAu4AH64E4iIRYZCFiVFxLq4AzitwDAcAjb8Azu8AwBcAjPcAjA5A5eeAhT2AHJ4A5T+AzOcCG/kAy0xAcuUErKhATgxE3b5AJv0IZt6E29cE7ehId2GIQuIA3SQArmgAvPsABVuAAhuA0hCIbM0A0//6UbkUABASAQ2/CBI3iJmJiJmjiCAdBQF3FcHdEWI9gB+gALSYEGIvUXaaAD19AJ+JAGhuADOXENcpVSPSEUc9BSR5FWaNAJALAGMyUVa9AIOoBTWGEP5cABkxBhG7gRjjR+DVUhYvERC9ABy4CI7kBP7oCNiLgA8eAHAyAIsLASQdAEYmAIm8UKNoAdNoETOlGLP5EDQTEURbGLSvEEaxWLKBEVa1AIcvUEABAVtAAK0+AMjNSN9IeIwGAPg+UOB/FHkwiKHIGFIdFT5UADsGAHrCABjdAEbsAFTQAAjTAAndAInWAFVNEJdkAYjWEDsVAC6zgG+FAHcOULT4AUcP+gVmzlGaBRBwpAB9rQE5mhB4NwD7DgGiLxDAdwMxmgC6QAcCLhkENEAbIwBrIADql1Em5QBwBAB3ZgUgOgj0EwBtrwBLZlA7JVAkBiHkCSHkAiARDQBkGAVWIADW31GbJIB+uxGGnACE/ACGIgCPewArrgDLogC7IgCLVgAY3gCT4ADYIAlSBIWB3BARmgBZIgAGNglRCAGGjZBGpJHYpgAWPQCGPwliugBV2wYM9hA2yJHpJgWu4BH3EgCUkAl2QQB03ACgrwHKCVGK7ZBmMQBPqQmj6pAGfABWnpBuAQmZZnVMcVAIepAG0gAQIgC1xwBpiwAuaxCbLQGFzAlt//xQZHoAhu4JFBsJKPEAtmUB02QFtjkATsMZv0RR/2gV8CkALeIAH34Q1moAAMsGKyEAdcIAwCIAAS4A1xgpXmJZkdsYXokA7lcAwZkAeLcCUQAAjSlQJ/gAVvkgIwEmXZlQF1YF4pkgJ5kBeKUZUSsAJ7sAg8BgjyQA9YIgt5YAaplQf0IZf08Qf96QS5qWD6sCBOkAH3kQKS4AdsAAjW8CYvsggOyhGvEEjToCyucip5gF2LQAZtQCZkACcxMiNHQGVgkJsp4AWY4CoCkFoNwAmKsAkMYGFKwmNMMANgAAZt+iqxUmQ7wCd0OgP6BAZVsgMXtgeBwARDIABeYA2L/5ArM7BhUboR2MAAJ8YzcuAqgwIrG5YoizJnqNBpgJACYypk+4AtbbBfgYAKvOAHYLAFTOAHizAMZEAG+8BjW3AEicIEnCAHKLZhhXJl8nAFDPAII1INKOAKnCAEVMAGbdpopjBnJgAGPSaZHKALBFAE9WA3c7YH8iAHM2AlJsAJezAKhEJoc0ZodiYEJCAKTGApnABoD3OnO8AJCbAPooICJnAKF/orRTAvJsADGUACKFAPVIACa1YNWWcre6AEVKAM0SAHQkANAksy1fBonIAtSoAsKABwJEAEPGMC9WAs1YBpe3BpDFsPQmAK5OItoZAAPFANn2pnk1Y1QzAEPP9AsQmQADRWaNhGBkUQMHvwro2WAURQBe5CLFVABSTgJzywB/WgbKh2bSQQDUBwA7z2A2eTCS3QAt9SD5wALgCHAsogayiAAolAADzAA37yA1VQBcqQBYiAbexiLpgCMrJ2ZzxwAilzAomwLfbid1RQZ9d2ti0gDkXgbwWDAplADaFAN2k7L8AWDQgHMi57AiwgcyoDBcx2A2WjuCKXLkAQDQCHM4SgD6ZbugSAM/pwB9FwAndQN9GQCIkAAiDQbkaQMvditYkAL8SQBSEwBZmgBAkAArRDbnHLAxEgAwnwtuxWbSlzNiIABPJGOxFwNiNgO9MmAlCQCyxQdycgOn//R7tdkziXUAYABzJAcwkigGwn8G6pmwFAcwcnkAWyVjWZQADfCwIk0HEnEDcRsGt3YL8+I29lIHPqFg1GYATIZgQSlwVGcMDytjSYc29VYwQEp8Bec2w5GwGuWwbz224/57oAtzojcAJLEAHVAzIhUAYyIAKt4AilMDQDRzr3dgMRkAWmkztedwkvIGu4I3LECwJRAwOpcwdpVwZi0zZbAwJG3AoR8DyCozg2/AKm0wrhaztlkA270woEcAlEHDVWVwoA1wqfAAUhkDswAAXLUzzZ8AnGQD/h8AlRsHCtIMStwAJLUAaq0zriEwKlUArhIAKpwzxLoMbiozNerG1W/9wK2QA8I6DHUwACraC+h2M8ZBwDUUDCMDAFk3MJh6MJUBAO21MKVucH33B0gzMCITB7ufB0DiQDU/AAtqAJE2AL48AA59ABj1AGIQADLAAF2cA8XqcBfjc9ABQFFxAFuVAGs6M73QsDIeB0dXd3I3AJVlcGMdB7kLDGLPDHuaAGuTAF4XABsxAC48wNynx9uuAWJAFw35NBFdAMVNcDFdAPNdB5uVAD4yAFBwBUHUEKmiACEkRAmqAJkIAHnwBFDBQFIsR7vgd8wkd8F3QByFcB3ADRsBcOkMANoNcP/sANfvcAqXABxjABNaABX5AKLFQDNHAO3QAPuxRP0ZIKn//nCAFoAA+gARhQRqmAAAXwBh1wDsvIgebAAeUAG45gQsBXAY4ABcUXRVNkz82HP25c0sTXDOADCZAwBZrgCM5nQ6D0fxXQAwUAejRE0zgkBc6HBNlgCZPwC2BIEkEFcB/gD6kQA5MERh+gSW9AevJ3C+rwDSrtCJd0Aa3Q0zkU1dUngAZAgDttgKFURzWkRlwER6EkSmWkRT3kAgxwSxyhCiLIgYBFWC8oBWJkAOPwBh7wlJgYAB0Qf5GgD9jEQyq4AT1gSc/3BjWwQ5rk2KBURmRUQ+NQ2pOkAmDk0y/oSQXwTaTkPkn4iOVwfkPEkJuoDh1ggrogBR8gBVIgg2//8HwxSIHT5IPgRE6nhErNNISuhAHedN5vEEtE6ALf9xu5tIQybYkcIYqaWIIhMQ3Q9IMGEEt8MEenJN40eINDKOA56Eqy9Abg5ACuJIcFEISVkFcRBt0P1htCJFj4TVH0BxYU4AFIMIQO7kzb5IMe0ErUlN4D7oNByIff5AAvnofmJA15hYG/wQFrMSfmAC0C8VCbGORCPuQjuFy6UAwLhRH/YA7qcCHL8OQUEOVSPuVUXuVWfuVYnuVavuVZ/uQfURFKvg1DZYJEXuZmrolM3olKbg4SeeZu/uYUZQ5qLhCEFVEbsYWXqAugwFGp0RJuwAgfZQVZVVIn1RPxOI8s/1WPL/UEnrACMkULNAUANoUDWBEJXrENFkkWGxhRimgR0ULm5SCKoA4WBwALYZUZAGBZMKEDeqAFJdCOswiPKkWPaHWPjHAPhQDpMtWPcEALGFVTdHAL5jDUuNSM5RAhx/AMFlEh25iQHcCQH5FLUqiQC7ALHDANoFALmPEEndASscgIK1AC7HgTsW7oKIWLurjo+MhWTZAVOMDrT/AU7z4IdOAMC3CQwLAA9JTvC9kWwREh07AMETlEC9DhHYENK2AICiALOdAJwsAKdiCLtiUByFAT5F7oeuALOSCP6K7oafUETPEXgjAGgkALVuCPRwEAv4gDoJABimQJwhEhxv81RBSpSM6wAnbQBPhwD50wBlwQVXYAALBQCFagDYUgC47pCQDQCT2vAGMgDPgAVvdgVjqw8eq+Vp2RWTYgCCsQlHQV72ugB7BABhsOUckwhRsRqaEuHHAREgdQF1pgASsQCwUKC4wAGmkwAJ6QBkv/BI3ABhAADpHxkutoHutYAj9ZCL7w8Vh/l6DRBUEgAT5RCJ5QUisgBjqQAXbuDJHAACovCIzQB6Cg9sCAhOXQU9OAmPhQ8QqgBWngBrOhioIQi3ZABp2ABtoAAImRlo5xHlrQBuSxCrLQCDbJFFn/F6LxkXWwAp2QA2jACMTfB36gCqHOAKAgBmnAF2IgBvf/AABqP1i/YQ66wAqKoADcsQcr4AY57x90kAYrcPeXFQRbfw90IAtagAyguZa+f5rzCRDeJORbAcCTjQFpfLip1cTCwyZu8HVqVALcvUb6/MRqosBGnTSwGjVJA0BduXIHKBz69wzlS5gL3MGEqSuWtwxB6pARsGKABS5NhNngMsaoHTtp3HDZtMKGLEFjSlg4E+SnDS1tHkqAYMZbkjh5zLTJIEuLmxIOIdYB2sTsGVmwgpRQtGJMnTOsliLDdzLlypY0YarzS5OGLEVx2tCRpSBfEHAQhVmwEWTTGQkKPH4k47HRIzeUWW2irAXC1iBewbb52iaIN0wKZEEYIywi/xdksSbLehSrxBhFY850CbKijWtZllCqZOlSMMpn7szR5MdgU5wUefwI45KvCTiirCbnJX1GUWcbaRUpOANghQVkVkuPQa1acZIkkuJ8xSRAwplVFAgiDsbGaAwCWSRgyo82zJAgDraY8ou5wJ4rJ4AADJOFDTJSwEIWCPERIIMjjoAgAwUUOWOMy87Y5Ags5mJFghLSaIIMBhBUQBhwFMHnDAskSC2F1fDTD7/+zEhilTjMSOGMOB4RAAIyNuniiDb2SyIFBbqoow5WJgTMueficWmbcn7RRYAt9mjjiDziyMAJb8IQwIk//hBgGC/yyICVM1wU5Y8UyHjvjDpkAf+TxCG2YEKUPUSRJB8IvioyPy0VEcCrFPY7Ax994jgijDhkScHDKQU4QoAwnHACAjGbewlNc7axtQNgLLFVFzKwEIUTV45YhJ4jnEihPyzyFACQLbw4woQ4zBMFz1Uy2MSGMxTYY8VHFnF0CHmY2AKQUVyZUgFJvDEDgibHIqMNAUakRxQ/UEzh2UqxcIUML7bYQgBMCIVAub9kRUmdbTjgwFZgdpmEklEyAGQGMPw4wosUJDkiBW+cAJjQPZs9ghcwjggCgjyxEIATfLiIQ55oFchgByYWYeMUJhqguIEdOJEnEJ05ASMQejg5BWc24mBgBldEEYWJIQRgA4wrWHX/wotg44Bgj1grLDMAfkaZYQ8BZhCAnjzymIGMSGcwIQNR8ug0D5Fn2AGVtY21EwxONgliGGKDyIAMJgC5+WiKwehZDlMakGcGnulx5RRHM3jEhB32YMMaQPbghOchRBnGFU5GAQMVVHjpmkzBApiGDDmuyIANQOjxvIHUOdlhBzBMuMIUKjJYBOMjqGgAahJEScFjoDkEYwswhBeFDHqGOIXmGQKhmZMhdmiAF4p3CEQAcEfRhxM5qDABkH2KKGKGnE3YwxRThDBB+x1mWN3CZfbw4wpO7GEPJhgCKuTBi93tQ2i88x39TKCMGTiLZN9DQRaOsAoBXMF7ewAEE6xB/7otHCED8MPZDK7QgAagb3fgM8Xa9oAKVzxiDzOYgRASMYorCEEZnOAENYjgu9+ZAAyA4MUeCEYh1qHkFwegAgpM4AdXyOFzTBiGKLIHhhlwggkMDET9TPCDUBRhD937Hg9C8YN4KY4JrtjDKbwwgzLswxoC8AMPpzeDIQCCdLwI4B5ySAT1EUAJeyiCElBAgh8oQQgkSEQozmgCVFwBBRkoQjWAt79Z+cEPVBDCKPzQADmYgABUIEIVqFBIcRTBBChAHyd+ZwoTGCEUQuBBBhS3DxQQQRxG2AMYUMiJLJjgUUU4wRFOMUBO6NCRoeBBEapQhR0KQQhUIAQhqUEFZf/wABE8qAcxs4ACJSiBCHvggRGIwYNwKoEKmEwJCXjACSqMwgQkqIc0eVANRZ5SmkUwYxWIQIBkNuCLoagCCk7AAzAswoyhUAJAt2iCFkSAhtQwZRRVyQkTMJSZRQiFOLJJhUTsgQSkrAIJlBGKbZIgAkA4AQqq8IMEJKAFMzWBEkxBBBKwUxmJIIAfUEANE4zCfTwY5Q/qMYpEKFKVuiRCOVFQDU6AsaAnuAEVRIECR1YjGiHgBCpiiYgfZIAaSihoMpUgPx78oApp/QEVeMADZaCAByaYqkxbkAUSZAEIQFAGCU4AAiPI1JF7SMAJWMrORNQjESaoBxH6CsYfEsH/kcr4gRFQQE6GEiERIABCC/bwA3GIgwd6BcJiO0qEBMhgBDT8QQuIkYhGKuEHJEhmJ5VRhUTogwF7CCkBqIGIFpAgATdYQgJgqtosALcMCRDBDSJgRhRkYrg3uMEJ2MkDaiTCuD+QK3B/wFsqhIKyLQArCbBahQQY4QZAyEQi1MoDwwIhC34ALWpBIIJJShYR0ShDNKpQhCxEIBE6NEI0qMED1xIjrj+IBgnuQF0gkCATSxBBerMwgktQFQgRIMAIiCvTzuZ0OWN6iR+iQYAynIC7ichCNhNxA2IAIQGJQAQxfpAJEYAgESRowV4TAIITKEMZGr7wCxL5YwrfAYzM/4zAJXJ5giXcYMYtgHFMs3CCMtyBwjAYbhZeUAriyrgMMGBBCEYg3xe8YAlrTkAmoHwJdmaiDGVgwCMIcec76+POj/BDnv3AAH3wmc5leCsB7hCBE/ghvXd9AQwyQYRo3FcEpeAxMVBwCRYImLSTlikxohEBEYjgyqEGwR0aLYNSgOAGl3hECGDQijmTAApl8MMdCKCPQGvkEexcr5t/DGQjkIAAjygDCRos3GjwNxPLVql0CZCALBghE9HIAk8JsGz+nuAEEbjDCDKB18JmIQF+1fYdTuBm4QY4AXe48onbnAg/GFvHnz7BHpabBbxKNwEE0HYCysDO5i6XwhEQ+P8SbO2HYoc7E3dw8wn8Om2/qvoOyx3BuiMAAm4DNgspPjeKM/GCiafZ3wl4wQgMHYEIxJS6Ao7AlZ8N7URsm9spRvTDHa7tE9zhiCRGyY8vMQIKg5y4NyhDBFggAj/w++cSvvgd2gyCH0dgBFmOgHOhDIJMvDzrhy51Ji5+ggSgPAKlCDAISkHyEdh6qyC/Lwug/XNDG4EFFR9BKeoOgxG8oAw/Tzs7wzH3E1wiBFPwsNkfDIJcXCACDChD2kcAAhCU4QU3EMEdStHoEYAaBHonubjbnom2Y1gGMvg55Dcv6RcYPdMhGL3JL9+KO5CZBaXIxgtaEYJLLKEVUNAyDF7/AIVLXKIVpQD4pKEgAxa0AsMjCEcuLhEFY4SAAOGAwSMIEAEZ6H0JeC+DpEtRBtZLncJmv0SaCfCCS3B5BMiHQe7XPAIYwEAG2chGLnIx61YsYfPIZ0EU6h6CRmMBGZg1EGABGCCAENC9MWuFKPADdsoFGQiBEPg7GCiDKWCBcCgDTVADNdCE+NOACSCAGDCzUpBAERiBvCO8VhDAF4iBF4C8F5CBv4NADLQ7yGuFXJA/35M/GYiCC2SBnwuHcAABTciFF/iEbEC+cPg9CLy9VtCAKXiBELiAKYCCEIgBbCgHNCkYr/k7MwuHT5iFGGSBKYgBSMCDKJiFT7iACYgB/32YBl2IAitMPgIgs3CAAigowFZ4gXBQLQLIhfx7wb9DPyGEAdYTwkNcwhWcu/qLglyIAjUQwhj8hFwohQu8QyhQAzzQACiAhAu4gEeIBlrxu7mLgQv4ggvIhSUIAQ2AQm74AFuAggkYhxqgAZSYhkfAQdWKggkMgU/wRP8Twh6EBDUoQ03wRSgIwPb7u3AYgVZohU+AgmzQgAvghlzgwCmARBlohRi4RjwAxE+8gCmEwln4xBpghnKYjnJgJw3oAW44xS+YAE3ghh7oB01whHqMAQ0Yh0c4BpjoBgsEATM0hjL8BE2cAkfghikYRg6MgjPcRDacgGqcAIrkhgmAhP8voMYvQEVvhAEoeMd+4IYznIIa0IAvqABNmIUKgIRUmIVUiIFXoIR0eImdM5hy2Mhc0ICVhIJZ6IcKmIAa6IEeeAAMkIIY6AbB6IAYoERHmIJvdIQLUINP4IYKqAANMMVwQMMp4MDEq8oJ0MmTBMGqpMYKQEUJTAUM4IZ+6Ad/0AAY4AYEeIBffIBxuAANwIAH8ABdKAdVAIZJMId2KIea9BpIsMoYwAAE+ACLJMoHeAADQAAXyIBXeAVgOARgWABgAIZXIIdsiAGJ1IBc+IQKuABH3MgJoEd3HEEZ+EZ4lMiqtMqybAZqvIAHqIFU2IAN+IBUWEtbqAFb8IcNeAD/RzCADbCFWUAAA/CAA7CEZegACsCVzBxMMvkABBiHB8DND6iBcUAABHiDB/gAFyCFc7AQdkiTMqiBKTCGGuAGY0DF9YxHtfTJVPgAA3iAGPBNu7wASFhDTXiAVKDFBwBODNjOxOQGW8CADxiHD/CHD5ACW9gAA3ABDIjQYiiH8aQE1tlCJHoJ3LSF7yzKVODOAqgBo0RKC3kJddgFUigAW7gAvNzPB0DOB9CEteyH+cRNx+ROAxiHx0QAxESADZhQf/CHxgROA6gB6qzOHphQBcUADEiFGvCASICJAAAGmNBQwDiElxgHKK2Bx9zRCTWASjiAE6WJW1gAXIiB3nzM/wfIhhjdAH+ogQLogQqYTyBNhR41gB+tziQdB1vgTlvgBgwogEHlTgSQggJ4TAd4Az11gUqYhnR8iQBYAJhQRwrRUpRQAT3lUQx4gxrAABfwgyQq0wCwh3XYhRqozQ8I0hrATgXV06AEznH4UT01VAXlTiE1gDfoBQNQgQEVUUalT2lwUiTwgAqlCWew0lkZMZbA1HJwhAJwASQogALwgH4czzIVjL5UjkPQB0KlT2o1AH/gUepEVELlUSD9gD390QZ9gwkN116dVQdQASlQVweogV6I1mOliUkdDGb9B2dFCUrQ0nOghG0wB3XMVpjggAVQR3J4BCcd1E2dzw/4AP9CVQGLndYCkAI/MNc3KIB5dQAH4AMVcIAC0NROJVkVeAMkGNk3kAJpINPnUAXW6ZoMsZAFcAaFfQ4OAIaExYVHgFVNjdACqNiLVQGQJVk+kAI+4IOibFp6LQCSNdmi7AUkwACkdYGmRQJpeNQTndSEtdkTjYeA3VmU6NmELQdc+FQkqFcDQAI+uNqLNYCkVYGlbVoH6AWVlYJ5LVkXENm89Vu9LQAkqIQMQIevVdaD+debfY4FKFuzRVua6AAPaFkpMAC+5QMH8AAHMACL7Vs+6IWRDV2ozVwkcAHRzdtpRYJekFau1QVstZB+XVYuLAzBuEyz5dcOSFuU0IVKcNn/N2ja0EUC4n0D0GVapz1Zu3UBaWBd1BXZXmheq21eadCFSfjL50CTKrWVdcRSltjCSA0Ad3gGzFwGzHSHbXiGAFDf9T0Ed1jf6LDMZ7AHfsDMBVgA8u0AS9AFaRhZ1G3aXkjd05XWXnhZ1n0D1yXeAH7e1kXdAZaGR7jfzNwGd7Dfnr3fDmCG+23cZaCQfzjY3A1hER5hEjbbZcgAGlgGdfgHFk7fDtgFyC1hGZ7hGQYGGsgABsiAaaCAZ9gGFm5hdQCGZSgGGpiGSDiAIz4AJV5iJm5iJ35iKI5iKZ5iKm7iSIiEaaCBYqAAYAgAH/7hH0ZYwsAQDDkEMj5jNE5jETVeYzZuYzd+YzdGmIMF44AAADs=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44288,"title":"Throwing Dice - Will You Be Eaten By The Dragon?","description":"You and a dragon have agreed to let dice rolls determine whether it eats you or not.\r\nThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\r\nThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\r\nWhat are your chances of survival?","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: 132px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 66px; transform-origin: 407px 66px; vertical-align: baseline; \"\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: 263.5px 8px; transform-origin: 263.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou and a dragon have agreed to let dice rolls determine whether it eats you or not.\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: 373.5px 8px; transform-origin: 373.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\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: 251.5px 8px; transform-origin: 251.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\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: 111.5px 8px; transform-origin: 111.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat are your chances of survival?\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function p = survival(x,y)\r\n  p = x/y;\r\nend","test_suite":"%%\r\nx = 6;\r\ny = 3;\r\np_correct = 2/3;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 15;\r\ny = 5;\r\np_correct = 3/5;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 30;\r\ny = 6;\r\np_correct = 35/60;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 21;\r\ny = 7;\r\np_correct = 4/7;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = 54;\r\ny = 9;\r\np_correct = 5/9;\r\nassert(abs(survival(x,y)-p_correct)\u003c1e-6)\r\n%%\r\nx = randi(100);\r\ny = 1;\r\nassert(abs(survival(x,y)-y)\u003c1e-6)\r\n%%\r\nx = randi([10 100],1,10);\r\ny = 5;\r\nout=arrayfun(@(a) survival(a,y), x);\r\nassert(isequal(unique(round(out,1)),0.6))\r\n","published":true,"deleted":false,"likes_count":11,"comments_count":13,"created_by":13840,"edited_by":223089,"edited_at":"2023-03-21T14:10:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":172,"test_suite_updated_at":"2023-03-21T14:10:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2017-08-24T09:19:28.000Z","updated_at":"2026-04-02T14:01:43.000Z","published_at":"2017-08-24T10:04:09.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eYou and a dragon have agreed to let dice rolls determine whether it eats you or not.\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\u003eThe dragon will roll a single die, of x sides. You will roll several dice, of y sides each. The total number of sides on your dice add to x.\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\u003eThe dragon will let you go uneaten if your total throw matches or exceeds theirs.\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\u003eWhat are your chances of survival?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1238,"title":"PACMAT - Ghosts Random; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m PACMAT_Ghosts_001.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4 Alfonso PACMAT Random Ghost Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4)\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts will get brighter.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\"\u003ePACMAT_Ghosts_001.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\"\u003eAlfonso PACMAT Random Ghost Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will get brighter.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n %if curdir==0,continue;end % bug 020213\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0 % bug fix 020213\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir\u003e0 bug fix 020213\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  gmap=map;\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % Random Ghost move  gmap avoids tunnel \r\n   gmov=intersect(find(gmap(gidx+mapdelta)\u003c10),find(gmap(gidx+mapdelta)\u003e-1)); \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    gmov=gmov(randi(length(gmov)));\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end\r\n  end\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T18:27:37.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-01T04:44:13.000Z","updated_at":"2026-02-07T15:48:13.000Z","published_at":"2013-02-01T06:15:30.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_001.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso PACMAT Random Ghost Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will get brighter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1241,"title":"PACMAT  - Ghosts maximize unique locations; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m PACMAT_Ghosts_002.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4) Quite an impressive solution\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts with LOS Tracking.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\"\u003ePACMAT_Ghosts_002.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4) Quite an impressive solution\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts with LOS Tracking.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n% if curdir==0,continue;end % Inf loop error\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n   gmapT=gmap;\r\n   ptrg=find(map\u003e2); % Find all ghosts\r\n   gmapT(ptrg)=Inf; % Rule out moving onto a ghost\r\n\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap/gmapT avoids tunnel,other ghosts, Walls\r\n \r\n   gmap(gidx)=gmap(gidx)+1;\r\n   ghost_adj=gmapT(gidx+mapdelta);\r\n   if min(ghost_adj)\u003cInf\r\n    if rand\u003c0.5 % Push ghosts away from each other\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'first');\r\n    else\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'last');\r\n    end\r\n   else\r\n    gmov=[];\r\n   end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T05:09:50.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-02T00:36:11.000Z","updated_at":"2026-02-07T15:49:54.000Z","published_at":"2013-02-02T01:21:05.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_002.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Quite an impressive solution\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts with LOS Tracking.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"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":2085,"title":"Sudoku Solver - Standard 9x9","description":"Solve a Standard 9x9 \u003chttp://en.wikipedia.org/wiki/Sudoku Sudoku\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner. \u003chttp://www.free-sudoku.com/sudoku.php?dchoix=evil Sudoku practice site\u003e.\r\n\r\n*Input:* m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\r\n\r\n*Output:* mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\r\n\r\n*Scoring:* Time (msec) to solve the Hard Sudoku\r\n\r\n*Example:*\r\n\r\n  m         mout\r\n  390701506 398721546\r\n  042890701 542896731\r\n  106540890 176543892\r\n  820600150 829674153\r\n  400138009 457138269\r\n  031002087 631952487\r\n  065087304 965287314\r\n  703065920 713465928\r\n  204309075 284319675\r\n\r\n*Sudoku Variations:*\r\n\r\nFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\r\n\r\n*Algorithm Spoiler:*\r\nSudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.","description_html":"\u003cp\u003eSolve a Standard 9x9 \u003ca href = \"http://en.wikipedia.org/wiki/Sudoku\"\u003eSudoku\u003c/a\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner. \u003ca href = \"http://www.free-sudoku.com/sudoku.php?dchoix=evil\"\u003eSudoku practice site\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Time (msec) to solve the Hard Sudoku\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003em         mout\r\n390701506 398721546\r\n042890701 542896731\r\n106540890 176543892\r\n820600150 829674153\r\n400138009 457138269\r\n031002087 631952487\r\n065087304 965287314\r\n703065920 713465928\r\n204309075 284319675\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eSudoku Variations:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eAlgorithm Spoiler:\u003c/b\u003e\r\nSudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.\u003c/p\u003e","function_template":"function mout=sudoku_solver(m)\r\n% m is a 9x9 Sudoku array with 0 for unknown values\r\n% create mout a consistent sudoku array\r\n  mout=m;\r\nend","test_suite":"assignin('caller','score',500);\r\n%%\r\n% Test 1\r\nmstr=['012300007'; '040600010'; '078900020'; '000000040'; '100000002'; '060000000'; '080001230'; '090004060'; '300007890']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n%%\r\n% Test 2\r\nmstr=['000004500'; '000003600'; '432008700'; '867000000'; '000000000'; '000000417'; '001900854'; '006400000'; '003700000']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n%%\r\n% Test 3\r\nmstr=['120034000'; '000000056'; '000200000'; '007800002'; '600000001'; '500006300'; '000008000'; '340000000'; '000560078']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntic\r\nmout=sudoku_solver(m)\r\ntoc\r\n\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nassert(valid==1)\r\n\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\nassert(valid2==1)\r\n\r\n\r\n%%\r\n% Timed Test on a Hard Sudoku\r\n% Non-Valid answer creates a Max score but not a fail\r\n% Hard Sudoku\r\nmstr=['005700009'; '030090010'; '100005300'; '600004700'; '040010050'; '002500001'; '004600002'; '080020040'; '200008600']; \r\n% convert string to array\r\nm=zeros(9);\r\nfor i=1:9\r\n m(i,:)=mstr(i,:)-'0'  ; \r\nend\r\n\r\ntime0=cputime;\r\n mout=sudoku_solver(m)\r\netime=(cputime-time0)*1000 % msec\r\nvalid=all(arrayfun(@(i) all(sum([mout mout']==i)),1:length(mout)));\r\nptr=find(m\u003e0);\r\nvalid2=isequal(m(ptr),mout(ptr));\r\n% Not Asserting for Valid answer\r\nif ~valid,etime=500;end\r\nif ~valid2,etime=500;end\r\nassignin('caller','score',min(500,floor(etime)));","published":true,"deleted":false,"likes_count":8,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":51,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-02T00:31:17.000Z","updated_at":"2025-12-15T20:03:47.000Z","published_at":"2014-01-02T01:30:54.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSolve a Standard 9x9\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Sudoku\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSudoku\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Values 1 thru 9 occur in each row, column, and the nine non-overlapping 3x3 matrices starting at the top left corner.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.free-sudoku.com/sudoku.php?dchoix=evil\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSudoku practice site\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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=\\\"text\\\"/\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 m, a 9x9 matrix of values 0 thru 9. Unknowns are 0s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 mout, a 9x9 matrix of values 1 thru 9 that satisfy Sudoku rules.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time (msec) to solve the Hard Sudoku\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[m         mout\\n390701506 398721546\\n042890701 542896731\\n106540890 176543892\\n820600150 829674153\\n400138009 457138269\\n031002087 631952487\\n065087304 965287314\\n703065920 713465928\\n204309075 284319675]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSudoku Variations:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture challenges will involve the Sudoku variations Diagonal, Arrow(Sums), Inequality, Irregular, and others as they present themselves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Spoiler:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Sudoku's can be readily solved using minimal choice recursion with consistency check. A key step is an index map of all indices that have mutual value exclusion (row,col,3x3), idxmap[81,27]. Another key step is to have an Evolve function that implements all single option values determined by the idxmap. A critical performance enhancement is a Sudoku Consistency Checker that checks for illegal replications of values. Illegal placements by Evolve occur when an incorrect value is asserted into the matrix during recursion trials. The recursive solver finds an idx with minimum options based on idxmap. The values for the idx location are asserted, Evolved, Consistency Checked, and then recursion call if Consistent. When all is Consistent and no unknowns remain the Sudoku is solved. Solution times are in the milli-seconds even for Evil, minimum 17 value, Sudokus.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":821,"title":"Pentago: find winning move","description":"\u003chttp://en.wikipedia.org/wiki/Pentago Pentago\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW).  During a turn, a player places a marble anywhere on the board and _then_ rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\r\n\r\nFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\r\n\r\n*Input:*\r\n\r\n* _board_ - 6x6 matrix of filled with 0-2\r\n\r\n*Output:*\r\n\r\n* _pos_ - 1x2 vector with row and column of winning move (if any).\r\n* _rot_ - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\r\n\r\n  rot = [-1 0\r\n          0 0]   \r\n\r\nmeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\r\n\r\n  rot = [0 0\r\n         0 1]\r\n\r\nmeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\r\n\r\n*Example*\r\n\r\n  board = 0 0 0 0 2 0\r\n          1 1 1 2 1 0\r\n          0 0 0 0 0 0\r\n          0 2 0 2 0 0\r\n          0 1 0 0 0 0\r\n          0 0 0 0 0 0\r\n\r\nshould return\r\n\r\n  pos = [3 5]\r\n  rot = [0 1\r\n         0 0]\r\n\r\nbecause placing a marble at (3,5) yields\r\n\r\n  0 0 0 0 2 0\r\n  1 1 1 2 1 0\r\n  0 0 0 0 1 0\r\n  0 2 0 2 0 0\r\n  0 1 0 0 0 0\r\n  0 0 0 0 0 0\r\n\r\nand then rotating the top-right block CW yields\r\n\r\n\r\n  0 0 0 0 2 0\r\n  1 1 1 1 1 2\r\n  0 0 0 0 0 0\r\n  0 2 0 2 0 0\r\n  0 1 0 0 0 0\r\n  0 0 0 0 0 0\r\n\r\nwhich gives Player 1 the win with 5 in a row (see 2nd row).","description_html":"\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/Pentago\"\u003ePentago\u003c/a\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW).  During a turn, a player places a marble anywhere on the board and \u003ci\u003ethen\u003c/i\u003e rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\u003c/p\u003e\u003cp\u003eFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ci\u003eboard\u003c/i\u003e - 6x6 matrix of filled with 0-2\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ci\u003epos\u003c/i\u003e - 1x2 vector with row and column of winning move (if any).\u003c/li\u003e\u003cli\u003e\u003ci\u003erot\u003c/i\u003e - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\u003c/li\u003e\u003c/ul\u003e\u003cpre class=\"language-matlab\"\u003erot = [-1 0\r\n        0 0]   \r\n\u003c/pre\u003e\u003cp\u003emeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003erot = [0 0\r\n       0 1]\r\n\u003c/pre\u003e\u003cp\u003emeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eboard = 0 0 0 0 2 0\r\n        1 1 1 2 1 0\r\n        0 0 0 0 0 0\r\n        0 2 0 2 0 0\r\n        0 1 0 0 0 0\r\n        0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003eshould return\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003epos = [3 5]\r\nrot = [0 1\r\n       0 0]\r\n\u003c/pre\u003e\u003cp\u003ebecause placing a marble at (3,5) yields\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e0 0 0 0 2 0\r\n1 1 1 2 1 0\r\n0 0 0 0 1 0\r\n0 2 0 2 0 0\r\n0 1 0 0 0 0\r\n0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003eand then rotating the top-right block CW yields\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e0 0 0 0 2 0\r\n1 1 1 1 1 2\r\n0 0 0 0 0 0\r\n0 2 0 2 0 0\r\n0 1 0 0 0 0\r\n0 0 0 0 0 0\r\n\u003c/pre\u003e\u003cp\u003ewhich gives Player 1 the win with 5 in a row (see 2nd row).\u003c/p\u003e","function_template":"function [pos rot] = pentago_win(board)\r\n  pos = [];\r\n  rot = [];\r\nend","test_suite":"%%\r\nboard =[0 0 0 0 2 1\r\n        1 2 2 2 1 0\r\n        0 0 0 1 0 0\r\n        0 2 1 2 0 0\r\n        0 0 0 0 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [5 2];\r\nrot_correct = [];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[0 0 0 0 1 0\r\n        1 2 2 2 1 0\r\n        0 0 0 1 1 0\r\n        0 2 2 2 0 0\r\n        0 2 0 1 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [5 5];\r\nrot_correct = [0 0;0 1];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[0 0 1 1 1 2\r\n        2 2 0 2 2 0\r\n        0 0 1 0 1 0\r\n        0 2 0 2 0 0\r\n        0 0 0 1 0 0\r\n        0 0 0 0 0 0];\r\npos_correct = [2 3];\r\nrot_correct = [-1 0;0 0];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[1 0 2 1 1 2\r\n        2 0 0 2 2 0\r\n        0 0 1 0 1 0\r\n        1 2 0 2 0 0\r\n        0 1 2 1 0 0\r\n        0 0 1 2 0 0];\r\npos_correct = [];\r\nrot_correct = [];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))\r\n\r\n%%\r\nboard =[1 0 2 1 2 0\r\n        2 0 0 2 1 0\r\n        0 0 1 1 2 0\r\n        2 2 0 2 0 0\r\n        0 1 2 1 0 0\r\n        0 0 1 2 0 1];\r\npos_correct = [1 6];\r\nrot_correct = [0 0;-1 0];\r\n[pos rot] = pentago_win(board);\r\nassert(isequal(pos,pos_correct) \u0026\u0026 isequal(rot,rot_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":35,"test_suite_updated_at":"2012-07-09T21:39:10.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-07-09T20:36:50.000Z","updated_at":"2026-02-15T07:32:20.000Z","published_at":"2012-07-09T21:39:10.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Pentago\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePentago\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a challenging two-player strategy game. The objective is to be the first player to connect five marbles in a row (horizontally, vertically, or diagonally) on the board. The 6x6 board consists of four 3x3 game blocks, each of which can be twisted in 90-degree intervals (CW/CCW). During a turn, a player places a marble anywhere on the board and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ethen\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e rotates one of the game blocks 90 degrees in either direction. The marble does not have to be played on the same block that is rotated.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this problem, you are given a 6x6 matrix representing the current board setup, where 0s, 1s, and 2s correspond to empty spaces, Player 1 marbles, and Player 2 marbles, respectively. You are Player 1 and it is your turn. If there is a winning move, return the row and column subscripts of the winning play as well as the required rotation (see below for details). If you can win without rotating a game block, return [] for the second output. If there is no winning move on this turn, both outputs should be []. You may assume that there will be only one winning move, if any.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eboard\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 6x6 matrix of filled with 0-2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 1x2 vector with row and column of winning move (if any).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003erot\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e - 2x2 matrix describing rotation required to win (if any). A CW rotation is indicated by a 1, while a CCW rotation is indicated by a -1. For example,\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[rot = [-1 0\\n        0 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emeans the top-left game block was rotated 90 degrees in the counterclockwise direction.\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[rot = [0 0\\n       0 1]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emeans the bottom-right game block was rotated 90 degrees in the clockwise direction.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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\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[board = 0 0 0 0 2 0\\n        1 1 1 2 1 0\\n        0 0 0 0 0 0\\n        0 2 0 2 0 0\\n        0 1 0 0 0 0\\n        0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eshould return\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[pos = [3 5]\\nrot = [0 1\\n       0 0]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebecause placing a marble at (3,5) yields\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[0 0 0 0 2 0\\n1 1 1 2 1 0\\n0 0 0 0 1 0\\n0 2 0 2 0 0\\n0 1 0 0 0 0\\n0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand then rotating the top-right block CW yields\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[0 0 0 0 2 0\\n1 1 1 1 1 2\\n0 0 0 0 0 0\\n0 2 0 2 0 0\\n0 1 0 0 0 0\\n0 0 0 0 0 0]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich gives Player 1 the win with 5 in a row (see 2nd row).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1260,"title":"RISK board game battle simulation","description":"Given two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game. \r\n\r\nIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For example:\r\n\r\nAttacker has 10 units\r\nDefender has 10 units\r\n\r\nAttacker rolls [6 3 2]\r\nDefender rolls [4 3]\r\n\r\nThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\r\n\r\nThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\r\n\r\nThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\r\n\r\nThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker. \r\n\r\nExample:\r\nAttacker has 3 units,\r\nDefender has 1 units.\r\n\r\nAttacker rolls 2 die (3 - 1),\r\nDefender rolls 1 die.","description_html":"\u003cp\u003eGiven two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game.\u003c/p\u003e\u003cp\u003eIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For example:\u003c/p\u003e\u003cp\u003eAttacker has 10 units\r\nDefender has 10 units\u003c/p\u003e\u003cp\u003eAttacker rolls [6 3 2]\r\nDefender rolls [4 3]\u003c/p\u003e\u003cp\u003eThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\u003c/p\u003e\u003cp\u003eThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\u003c/p\u003e\u003cp\u003eThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\u003c/p\u003e\u003cp\u003eThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker.\u003c/p\u003e\u003cp\u003eExample:\r\nAttacker has 3 units,\r\nDefender has 1 units.\u003c/p\u003e\u003cp\u003eAttacker rolls 2 die (3 - 1),\r\nDefender rolls 1 die.\u003c/p\u003e","function_template":"function y = risk_prob(a, d)\r\n  y = 0.000;\r\nend","test_suite":"%%\r\na = 3;\r\nd = 0;\r\ny_correct = 1.000;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.01)\r\n\r\n%%\r\na = 1;\r\nd = 5;\r\ny_correct = 0.000;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.01)\r\n\r\n%%\r\na = 5;\r\nd = 3;\r\ny_correct = 0.642;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 4;\r\nd = 6;\r\ny_correct = 0.134;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 10;\r\nd = 10;\r\ny_correct = 0.480;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 7;\r\nd = 8;\r\ny_correct = 0.329;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 8;\r\nd = 7;\r\ny_correct = 0.5355;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 20;\r\nd = 10;\r\ny_correct = 0.965;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 4;\r\nd = 2;\r\ny_correct = 0.656;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 6;\r\nd = 4;\r\ny_correct = 0.638;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 2;\r\nd = 1;\r\ny_correct = 0.417;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n%%\r\na = 2;\r\nd = 2;\r\ny_correct = 0.104;\r\nassert(abs(risk_prob(a, d) - y_correct) \u003c= 0.02)\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":4,"comments_count":6,"created_by":10338,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":42,"test_suite_updated_at":"2013-02-12T00:28:08.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-10T23:10:17.000Z","updated_at":"2026-02-15T07:37:57.000Z","published_at":"2013-02-10T23:10:17.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two positive integer inputs, a (attacker army units) and d (defender army units) return the probablity of victory (from 0.000 to 1.000) to +- 0.02 accuracy. The rules are given below for those unfamiliar with the game.\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\u003eIn the board game RISK battles are determined by the conflict of armies, namely the attacking army and the defending army. The results is determined as follows: the attacker rolls 3 six-sided die and the defender rolls 2 die. The highest two numbers of each player are compared respectively, and the higher number wins (this means the opposing army loses one unit). In the case of a tie the defender wins. For 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:t\u003eAttacker has 10 units Defender has 10 units\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\u003eAttacker rolls [6 3 2] Defender rolls [4 3]\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\u003eThe first comparison is attacker - 6, defender - 4. Since the attacker is higher, the defender loses one unit. Hence Attacker has 10 units, Defender now has 9 units.\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\u003eThe first comparison is attacker - 3, defender - 3. Since the defender is higher, the attacker loses one unit. Hence Attacker has 9 units, Defender now has 9 units.\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\u003eThis is continued until either the attacker has only one unit left, in which case the defender wins the battle; or the defender has no units left, in which case the attacker wins the battle.\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\u003eThis is one further rule: the number of die any player may roll cannot be more than the their units in case of the defender, or their units + 1 in case of the attacker.\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\u003eExample: Attacker has 3 units, Defender has 1 units.\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\u003eAttacker rolls 2 die (3 - 1), Defender rolls 1 die.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":45270,"title":"Game of life - 02 ","description":"refer to \u003chttps://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003e\r\n\r\n\r\nrefer to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003e\r\n\r\n\r\ngiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\r\n\r\n* Compared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\r\n* toroidal board is no longer applicable.\r\n\r\n\r\n\r\n\r\n\r\ni implemented the following assertion process (though its not a gd one)  - \r\n\r\n* place the initial set in a 100 by 100 board from the starting location (50,50).\r\n* so if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\r\n\r\nu need to find the state after nth stage. ","description_html":"\u003cp\u003erefer to \u003ca href = \"https://en.wikipedia.org/wiki/Conway's_Game_of_Life\"\u003ehttps://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003c/a\u003e\u003c/p\u003e\u003cp\u003erefer to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\"\u003ehttps://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003c/a\u003e\u003c/p\u003e\u003cp\u003egiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\u003c/p\u003e\u003cul\u003e\u003cli\u003eCompared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\u003c/li\u003e\u003cli\u003etoroidal board is no longer applicable.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ei implemented the following assertion process (though its not a gd one)  -\u003c/p\u003e\u003cul\u003e\u003cli\u003eplace the initial set in a 100 by 100 board from the starting location (50,50).\u003c/li\u003e\u003cli\u003eso if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eu need to find the state after nth stage.\u003c/p\u003e","function_template":"function B=gameoflife_4(x,n)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = [1 0;1 1];\r\nn=30;\r\nr=[50;51;50;51];\r\nc=[50;50;51;51];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [1,0;1,1;0,1];\r\nn=10;\r\nr=[51;50;52;50;52;51];\r\nc=[49;50;50;51;51;52];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [0,1,0;0,0,1;1,1,1];\r\nn=100;\r\nr=[77;75;77;76;77];\r\nc=[75;76;76;77;77];\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx = [1 0 0 1 1;0 1 1 0 0;0 1 0 0 0;1 1 0 0 1; 0 1 1 1 0];\r\nn=30;\r\nr=[54,55,53,56,54,55]';\r\nc=[52,52,53,53,54,54]';\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n%%\r\nx=[1,1,1,1,1;1,1,0 0 0;1,0 0 0 1; 1 1 1 0 0; 0 0 1 1 1];\r\nn=15;\r\nr=[45\r\n46\r\n47\r\n53\r\n54\r\n55\r\n44\r\n48\r\n51\r\n52\r\n54\r\n55\r\n44\r\n49\r\n50\r\n45\r\n46\r\n49\r\n50\r\n56\r\n47\r\n48\r\n51\r\n56\r\n52\r\n55];\r\nc=[50\r\n50\r\n50\r\n50\r\n50\r\n50\r\n51\r\n51\r\n51\r\n51\r\n51\r\n51\r\n52\r\n52\r\n52\r\n53\r\n53\r\n53\r\n53\r\n53\r\n54\r\n54\r\n54\r\n54\r\n55\r\n55]\r\n[y1,y2] = find(gameoflife_4(x,n));\r\nassert(isequal(r,y1))\r\nassert(isequal(c,y2))\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-01-18T20:36:02.000Z","updated_at":"2024-12-11T18:49:03.000Z","published_at":"2020-01-18T21:04:22.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003erefer to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Conway's_Game_of_Life\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Conway's_Game_of_Life\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003erefer to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://www.mathworks.com/matlabcentral/cody/problems/45269-game-of-life-01\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003egiven a set of cells (the initial state) represented by 1(live) and 0(dead) , u need to find the nth state of conway's game of life.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompared to the previous problem, now generation of new cells outside the initial set is possible. So the set might expand after each iteration.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003etoroidal board is no longer applicable.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ei implemented the following assertion process (though its not a gd one) -\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eplace the initial set in a 100 by 100 board from the starting location (50,50).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eso if initial state is =[1,0;1,1] , its initial loc = [{50,50},{50,51};{51,50};{51,51}]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eu need to find the state after nth stage.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1244,"title":"PACMAT - G03 Ghosts use minimum path to PACMAT; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT.  This is similar to the actual game. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m PACMAT_Ghosts_003.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4 Nearest Dot Algorithm\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\r\n\r\n","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT.  This is similar to the actual game.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m\"\u003ePACMAT_Ghosts_003.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure,  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4\"\u003eNearest Dot Algorithm\u003c/a\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n % gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n    gmov=[];\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found      \r\n     for gmovidx=1:4\r\n      if map(gidx+mapdelta(gmovidx))\u003e2,continue;end % avoid ghost jumping\r\n      gmov=gmovidx;\r\n      if gmap(gidx+mapdelta(gmovidx))==gmap(gidx)-1,break;end % valid\r\n      gmov=[];\r\n     end\r\n    end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\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":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-03T02:27:38.000Z","updated_at":"2026-02-10T13:38:31.000Z","published_at":"2013-02-03T02:46:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT. This is similar to the actual game.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_003.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_003.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_003.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure, disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G003_video_raz.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eNearest Dot Algorithm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) The ghosts snake. This is actually easier than pseudo-random.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts that find minimum path to PACMAT assuming other ghosts are walls. I believe this board is unclearable for equal Ghost and PACMAT speeds. Passing criteria and scoring will be adjusted.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":54149,"title":"Determine Poker Hand Winner","description":"Determine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\r\nhand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\r\nhand.Properties.VariableNames={'value','suit'};\r\nwhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. ","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 165.875px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 82.9375px; transform-origin: 407px 82.9375px; vertical-align: baseline; \"\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eDetermine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 40.875px; 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 20.4375px; transform-origin: 404px 20.4375px; 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.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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.2188px; transform-origin: 404px 10.2188px; 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: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003ehand.Properties.VariableNames={\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e'value'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e,\u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); \"\u003e'suit'\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e};\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function winner = determineWinner(hand1,hand2)\r\n  winner=1;\r\nend","test_suite":"%%\r\ncardValue=repmat(1:13,1,4);\r\ncardSuit=repelem(1:4,13);\r\ncards=5:13;\r\nrng(1);\r\nfor k=1:1000\r\n    r=cards(randi(9));\r\n    r1=randperm(52,2*r);\r\n    hand1{k}=table(cardValue(r1(1:r))',cardSuit(r1(1:r))');\r\n    hand2{k}=table(cardValue(r1(r+1:end))',cardSuit(r1(r+1:end))');\r\n    hand1{k}.Properties.VariableNames={'value','suit'};\r\n    hand2{k}.Properties.VariableNames={'value','suit'};\r\n    winner(k)=determineWinner(hand1{k},hand2{k});\r\nend\r\ntw=find(winner==2);\r\nto=find(winner==1);\r\ntz=find(winner==0);\r\ntw=tw(100:120);\r\nto=to(100:120);\r\nr=randi(1000,1,500);\r\ntw_correct=[177,183,184,185,188,190,191,193,196,197,198,200,201,202,204,205,207,211,212,213,215];\r\nto_correct=[223,226,227,229,230,232,233,235,237,238,240,244,245,247,249,250,251,253,254,257,262];\r\ncorrect=[2     1     2     2     1     2     1     1     2     2];\r\nassert(isequal(correct,winner(r(randi(500,1,10)))));\r\nassert(isequal(sum(winner),1529));\r\nassert(isempty(tz));\r\nassert(isequal(to,to_correct));\r\nassert(isequal(tw,tw_correct));\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":11,"created_by":145982,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2022-03-15T18:41:24.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2022-03-07T19:02:11.000Z","updated_at":"2022-03-17T18:07:02.000Z","published_at":"2022-03-07T19:02:11.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eDetermine the poker hand winner from two hands of cards (each hand will contain the same number of cards between five and thirteen cards each). Output shoud be 0 - for tie, 1 - for hand1 winner, 2 - for for hand 2 winner. Card hands will be provided as a table like the following:\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[hand=table([9 3 10 7 13 12 11]',[3 2 3 4 3 3 3]');\\nhand.Properties.VariableNames={'value','suit'};]]\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:t\u003ewhere card value is listed first: 2:10,jack,queen,king,ace == 1:13 and suits are listed second: clubs, diamonds, hearts, spades == 1:4. Note: (A 2 3 4 5) is considered a straight where the A acts low, therefore the kicker would be 5. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"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":59132,"title":"Snakes and Ladders: Average Number of Turns","description":"In this problem, you will play a single-player variant of the classic game Snakes and Ladders. The rules are as follows:\r\nThe player begins on the \"zero\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\r\nEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\r\nIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\r\nIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\r\nThe game ends when the player arrives at the final square.\r\nYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\r\nSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\r\nThere will not be a ladder leading to the final position.\r\nReturn n, the expected number of turns for a player to reach the final square.\r\nAfter having solved this problem, try Problem 59137 Snakes and Ladders: Variable Die.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 440.327px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.989px 220.156px; transform-origin: 406.996px 220.163px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this problem, you will play a single-player variant of the classic game \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Snakes_and_ladders\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSnakes and Ladders\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. The rules are as follows:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 183.963px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 390.994px 91.9744px; transform-origin: 390.994px 91.9815px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe player begins on the \"zero\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.321px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 30.6534px; text-align: left; transform-origin: 362.997px 30.6605px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe game ends when the player arrives at the final square.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 63.0256px; 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: 383.991px 31.5057px; text-align: left; transform-origin: 383.999px 31.5128px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 61.321px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 390.994px 30.6534px; transform-origin: 390.994px 30.6605px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8807px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 20.4403px; text-align: left; transform-origin: 362.997px 20.4403px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4403px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 362.997px 10.2131px; text-align: left; transform-origin: 362.997px 10.2202px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThere will not be a ladder leading to the final position.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eReturn n, the expected number of turns for a player to reach the final square.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eAfter having solved this problem, try \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/59137-snakes-and-ladders-variable-die\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 59137\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eSnakes and Ladders: Variable Die\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function n = snakesNladders(board)\r\n  n = numel(board);\r\nend","test_suite":"%%\r\nfiletext = fileread('snakesNladders.m');\r\nassert(isempty(strfind(filetext,'regexp')))\r\nassert(isempty(strfind(filetext,'assign')))\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'!')))\r\n\r\n%%\r\nboard = [1 2 3 7 5 6 7 2 9];\r\nassert(abs(snakesNladders(board)-8.6)\u003c1e-3)\r\n\r\n%%\r\nboard = [1 2 3 4 5 6 7 8 9 23 11 8 13 14 15 4 69 18 19 32 21 60 23 7 25 26 41 59 6 30 31 32 33 34 35 36 66 38 39 40 41 42 43 9 67 62 47 48 49 50 51 35 53 68 2 56 57 58 59 60 13 62 3 64 65 66 67 68 69 70 71 51 73];\r\nassert(abs(snakesNladders(board)-28.8383)\u003c1e-3)\r\n\r\n%%\r\nboard = [35 2 3 4 14 6 7 8 3 10 7 12 19 14 10 16 17 18 19 17 21 22 31 24 25 26 32 8 29 34 31 32 24 34 35 36];\r\nassert(abs(snakesNladders(board)-14.3318)\u003c1e-3)","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":15521,"edited_by":15521,"edited_at":"2023-11-21T09:39:41.000Z","deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2023-11-21T09:39:41.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-11-03T19:49:40.000Z","updated_at":"2025-12-10T21:42:55.000Z","published_at":"2023-11-03T19:49:40.000Z","restored_at":null,"restored_by":null,"spam":null,"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\u003eIn this problem, you will play a single-player variant of the classic game \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Snakes_and_ladders\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSnakes and Ladders\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The rules are as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe player begins on the \\\"zero\\\" square. (There is no zero square, so practically off the board, entering it on the first turn.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach turn is played by throwing a standard 6-sided die and moving along the squares, in order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the square at which the player arrives after traveling the number of squares indicated by the die is the foot of a ladder or the mouth of a snake, the player immediately moves the square at the top of the ladder or at the tail of the snake, respectively.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the die shows a number greater then the number of steps required for the player to reach the final square (overshoot), the player stays in the current square and the turn is wasted.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game ends when the player arrives at the final square.\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\u003eYou are given a board, represented by an integer vector. Some vector elements will consist of their own index in the vector, while others will hold the index of a different element in the vector. The latter represent either a snake or a ladder, where snakes will consist of numbers lower than their indeces and ladders higher. You may assume the following:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSnakes and ladders will not connect in series, i.e. the mouth of a snake or the foor of a ladder will not coincide with the tail of a snake or the top of a ladder.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere will not be a ladder leading to the final position.\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\u003eReturn n, the expected number of turns for a player to reach the final square.\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\u003eAfter having solved this problem, try \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/59137-snakes-and-ladders-variable-die\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 59137\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSnakes and Ladders: Variable Die\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\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":59137,"title":"Snakes and Ladders: Variable Die","description":"This problem is a sequal to Problem 59132 Snakes and Ladders: Average Number of Turns.\r\nInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 72.017px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.989px 36.0085px; transform-origin: 406.996px 36.0085px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21.0085px; 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: 383.991px 10.4972px; text-align: left; transform-origin: 383.999px 10.5043px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThis problem is a sequal to \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/59132-snakes-and-ladders-average-number-of-moves\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 59132\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eSnakes and Ladders: Average Number of Turns\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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42.017px; 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: 383.991px 21.0085px; text-align: left; transform-origin: 383.999px 21.0085px; white-space-collapse: preserve; 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: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function n = snakesNladders(board,d)\r\n  n = numel(board) + d;\r\nend","test_suite":"%%\r\nfiletext = fileread('snakesNladders.m');\r\nassert(isempty(strfind(filetext,'regexp')))\r\nassert(isempty(strfind(filetext,'assign')))\r\nassert(isempty(strfind(filetext,'eval')))\r\nassert(isempty(strfind(filetext,'echo')))\r\nassert(isempty(strfind(filetext,'!')))\r\n\r\n%%\r\nboard = [1 2 3 7 5 6 7 2 9];\r\nassert(abs(snakesNladders(board,8)-9)\u003c1e-3)\r\n\r\n%%\r\nboard = [1 2 3 4 5 6 7 8 9 23 11 8 13 14 15 4 69 18 19 32 21 60 23 7 25 26 41 59 6 30 31 32 33 34 35 36 66 38 39 40 41 42 43 9 67 62 47 48 49 50 51 35 53 68 2 56 57 58 59 60 13 62 3 64 65 66 67 68 69 70 71 51 73];\r\nassert(abs(snakesNladders(board,3)-47.0345)\u003c1e-3)\r\n\r\n%%\r\nboard = [35 2 3 4 14 6 7 8 3 10 7 12 19 14 10 16 17 18 19 17 21 22 31 24 25 26 32 8 29 34 31 32 24 34 35 36];\r\nassert(abs(snakesNladders(board,4)-17.0807)\u003c1e-3)","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":15521,"edited_by":15521,"edited_at":"2023-11-03T19:55:30.000Z","deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-11-03T19:49:44.000Z","updated_at":"2023-11-03T19:55:30.000Z","published_at":"2023-11-03T19:49:44.000Z","restored_at":null,"restored_by":null,"spam":null,"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 problem is a sequal to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/59132-snakes-and-ladders-average-number-of-moves\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 59132\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSnakes and Ladders: Average Number of Turns\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=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInstead of a 6-sided die, your function should now receive an integer d (assume 2 or greater), representing the number of faces of the die. Otherwise, the problem is the same.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"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,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":937,"title":"Rubik's Mini Cube: Solve Randomized Cube in 11 Moves or Less; Score is by Time (msec)","description":"The Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\r\n\r\nAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\r\n\r\nThe Performance metric is cumulative Time to Solve 500 cubes (msec).\r\n\r\nA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/minicube2.png\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 24\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\r\n  Output: move_vec (Numeric of moves to solve)\r\n   move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order. \r\n* Scoring is Time in msec to solve 500 cubes\r\n* Cube Moves X, Y, and Z do not constitute a move but are needed in the vector \r\n* A string to numeric value function is provided in the template\r\n* Verifications will be by executing your move vector against the provided Rubik and counting number of face moves.\r\n\r\nThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\r\n\r\n\r\nThe Challenge \u003chttp://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html Challenge 931 Rubik's Mini-Cube\u003e contains a 3D Mini-Cube Viewer for program development.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e \r\n* \u003chttp://peter.stillhq.com/jasmine/rubikscubesolution.html General Cube Info and Middle Layer\u003e\r\n* \u003chttp://www.speedcubing.com/final_layer_print.html SpeedCube Bottom Sequences\u003e\r\n* The site \u003chttp://www.speedcubing.com/CubeSolver/MiniCubeSolver.html MiniCube Solver\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u003c 497 usec, independent of moves on an i5/16GB machine.\r\n\r\n\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\r\n\r\nComing Soon: Matlab Tetris\r\n","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: 1316.98px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 658.5px; transform-origin: 407px 658.5px; vertical-align: baseline; \"\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: 294.65px 7.91667px; transform-origin: 294.65px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\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: 377.2px 7.91667px; transform-origin: 377.2px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\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: 221.45px 7.91667px; transform-origin: 221.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Performance metric is cumulative Time to Solve 500 cubes (msec).\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: 355.467px 7.91667px; transform-origin: 355.467px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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: 316.733px 7.91667px; transform-origin: 316.733px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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: 380.533px 7.91667px; transform-origin: 380.533px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 138.917px; 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 69.4667px; text-align: center; transform-origin: 384px 69.4667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 242.917px; 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 121.467px; text-align: center; transform-origin: 384px 121.467px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 113.917px; 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 56.9667px; text-align: center; transform-origin: 384px 56.9667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/gif;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.033px; 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 71.5167px; transform-origin: 404px 71.5167px; 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: 53.9px 7.91667px; transform-origin: 53.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eInput: (rubik)\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 107.8px 7.91667px; transform-origin: 107.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; \"\u003erubik: row vector \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 38.5px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 38.5px 7.91667px; \"\u003eof size 24\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: 304.15px 7.91667px; transform-origin: 304.15px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\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: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003eOutput: move_vec (Numeric of moves to solve)\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: 284.9px 7.91667px; transform-origin: 284.9px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 84.7px 7.91667px; transform-origin: 84.7px 7.91667px; \"\u003e move_vec:values 1:27 \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(14, 0, 255); border-block-start-color: rgb(14, 0, 255); border-bottom-color: rgb(14, 0, 255); border-inline-end-color: rgb(14, 0, 255); border-inline-start-color: rgb(14, 0, 255); border-left-color: rgb(14, 0, 255); border-right-color: rgb(14, 0, 255); border-top-color: rgb(14, 0, 255); caret-color: rgb(14, 0, 255); color: rgb(14, 0, 255); column-rule-color: rgb(14, 0, 255); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(14, 0, 255); perspective-origin: 15.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(14, 0, 255); text-emphasis-color: rgb(14, 0, 255); transform-origin: 15.4px 7.91667px; \"\u003efor \u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 127.05px 7.91667px; transform-origin: 127.05px 7.91667px; \"\u003eUFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(196, 0, 0); border-block-start-color: rgb(196, 0, 0); border-bottom-color: rgb(196, 0, 0); border-inline-end-color: rgb(196, 0, 0); border-inline-start-color: rgb(196, 0, 0); border-left-color: rgb(196, 0, 0); border-right-color: rgb(196, 0, 0); border-top-color: rgb(196, 0, 0); caret-color: rgb(196, 0, 0); color: rgb(196, 0, 0); column-rule-color: rgb(196, 0, 0); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(196, 0, 0); perspective-origin: 57.75px 7.91667px; text-decoration: none; text-decoration-color: rgb(196, 0, 0); text-emphasis-color: rgb(196, 0, 0); transform-origin: 57.75px 7.91667px; \"\u003eXYZX'Y'Z'X2Y2Z2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 61.3px; transform-origin: 391px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 29.1833px 7.91667px; transform-origin: 29.1833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 327.667px 7.91667px; transform-origin: 327.667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 134.333px 7.91667px; transform-origin: 134.333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eScoring is Time in msec to solve 500 cubes\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 242.583px 7.91667px; transform-origin: 242.583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 187.1px 7.91667px; transform-origin: 187.1px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA string to numeric value function is provided in the template\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 355.933px 7.91667px; transform-origin: 355.933px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 374.067px 7.91667px; transform-origin: 374.067px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\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: 45.5333px 7.91667px; transform-origin: 45.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge\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\u003ca target='_blank' href = \"http://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eChallenge 931 Rubik's Mini-Cube\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: 183.883px 7.91667px; transform-origin: 183.883px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e contains a 3D Mini-Cube Viewer for program development.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; counter-reset: list-item 0; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 61.3px; transform-origin: 391px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://kociemba.org/cube.htm\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCube Theory: 20-moves Any Cube\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://peter.stillhq.com/jasmine/rubikscubesolution.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eGeneral Cube Info and Middle Layer\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10.2167px; text-align: left; transform-origin: 363px 10.2167px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"http://www.speedcubing.com/final_layer_print.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpeedCube Bottom Sequences\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; counter-reset: none; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.4333px; text-align: left; transform-origin: 363px 20.4333px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 24.9px 7.91667px; transform-origin: 24.9px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe site\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 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\u003ca target='_blank' href = \"http://www.speedcubing.com/CubeSolver/MiniCubeSolver.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eMiniCube Solver\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 276.2px 7.91667px; transform-origin: 276.2px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u0026lt; 497 usec, independent of moves on an i5/16GB machine.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\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: 218.883px 7.91667px; transform-origin: 218.883px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\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: 85.9667px 7.91667px; transform-origin: 85.9667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eComing Soon: Matlab Tetris\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function solve_vec = rubik_solve_mini(r)\r\n% Expect Numeric representation of moves (1:27):\r\n% 1:27 are ufdlbr upfpdplpbprp u2f2d2l2b2r2 xyzxpypzpx2y2z2\r\n solve_vec=[]; \r\n\r\n% One path is to use Challenge 931's, Rubik's Mini Cube, initial Cube re-orientation provided in the template, followed by a solving algorithm that needs only RDB type moves\r\n% Loading an external data file is one method. First solve is not timed.\r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\nzcnt=500;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\nasolve=199;\r\nmix=40;\r\n\r\ntic\r\n\r\nfor cube_check=1:zcnt %zcnt\u003c100 %500\r\n %zcnt=zcnt+1;\r\n  r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]);\r\n for i=1:length(mov)  % Ignoring Move Undos since mix=40\r\n   r=r(vf(mov(i),:));\r\n end\r\n\r\n r_reset=r; % Used in assert\r\n\r\n solve_vec=rubik_solve_mini(r);\r\n\r\n for i=1:length(solve_vec) \r\n  r=r(vf(solve_vec(i),:));\r\n end\r\n\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; %   \r\n   lsolve=length(solve_vec);\r\n   if lsolve\u003e11, Pass=0;end % Length Rqmt\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n %  fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   Pass=0;\r\n   r_fail=r_reset;\r\n  % fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n  % fprintf('%i ',r); % Current ending data\r\n  % fprintf('\\n')\r\n  % fprintf('%i ',r_reset); % Starting Cube\r\n  end\r\n\r\nend % while of cubes\r\ntoc\r\n\r\nassert(isequal(Pass,1),sprintf('Max Len=%i \\n',max_solve)); % Length Exception\r\nassert(isequal(Pass,1),sprintf('%i ',r_fail)); % Output Non-Solved Cube Start\r\n\r\n%if Pass\r\n% feval(@assignin,'caller','score',min(100,floor(asolve)));\r\n%end\r\n\r\nfprintf('Moves: Avg %i   Min %i   Max %i\\n',asolve,min_solve,max_solve)\r\n\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\n for jrand=1:40  % Ignoring Move Undos since mix=40\r\n   r=r(vf(randi(18),:));\r\n end\r\n\r\n q=500;\r\n ra=zeros(q,24);\r\n for i=1:q\r\n  for jrand=1:10  % Ignoring Move Undos since base mix=40\r\n    r=r(vf(randi(18),:));\r\n  end\r\n % add 10 new moves to prior vector\r\n  ra(i,:)=r;\r\n end\r\n\r\n% The Time Trail section does not check accuracy, that is done above\r\nt0=clock;\r\nfor i=1:q\r\n solve_vec=rubik_solve_mini(ra(q,:));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n%assert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\nfeval(@assignin,'caller','score',min(2000,floor(dt)));\r\n%   Performance Score","published":true,"deleted":false,"likes_count":5,"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":"2012-09-09T17:48:25.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-09T06:26:08.000Z","updated_at":"2025-11-17T16:25:58.000Z","published_at":"2012-09-09T16:33:58.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\u003eThe Challenge is to Near or Optimally Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\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\u003eAny Mini-Cube can be solved in 11 or fewer Face Moves. There are only 3,674,160 unique cube positions, with only 2344 requiring the fulll 11 moves. Cube moves do not count.\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\u003eThe Performance metric is cumulative Time to Solve 500 cubes (msec).\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\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\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\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\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\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId2\\\"/\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=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 24\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\\n\\nOutput: move_vec (Numeric of moves to solve)\\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eScoring is Time in msec to solve 500 cubes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA string to numeric value function is provided in the template\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\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\u003eThe function rubik_rot_mini(mov,r) is provided in the template. Other functions are provided to re-orient the cube in Cody Challenge 931, Rubik's Mini-Cube.\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\u003eThe Challenge\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/931-rubik-s-mini-cube-solve-randomized-mini-cube-score-moves.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge 931 Rubik's Mini-Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e contains a 3D Mini-Cube Viewer for program development.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGeneral Cube Info and Middle Layer\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/final_layer_print.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeedCube Bottom Sequences\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe site\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/CubeSolver/MiniCubeSolver.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMiniCube Solver\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e claims an outstanding 10 minutes to solve a randomized Mini-Cube. Matlab can achieve any Mini-Cube solution in \u0026lt; 497 usec, independent of moves on an i5/16GB machine.\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\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\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\u003eComing Soon: Matlab Tetris\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.gif\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;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":1254,"title":"PACMAT 06 - Optimized Ghosts, Equal Speed, Inf Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m PACMAT_Interactive.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4 14 Lives Interactive\u003e (MP4)  Best Score seen is 9 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 500 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\"\u003ePACMAT_Interactive.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\"\u003e14 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 9 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 500 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function  [newdir]=PACMAT_solver(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=PACMAT_solver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  %if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 500*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"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":"2013-02-08T04:11:21.000Z","updated_at":"2025-12-03T08:52:46.000Z","published_at":"2013-02-08T04:48:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e14 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 9 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 500 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1255,"title":"PACMAT 07 - Optimized Ghosts, PAC 2X Ghost Speed, 4 Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m PACMAT_Interactive2X.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4 PAC2X 1 Life Interactive\u003e (MP4)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4 Alfonso 398\u003e (MP4)\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves and 4 Lives\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\"\u003ePACMAT_Interactive2X.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\"\u003ePAC2X 1 Life Interactive\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\"\u003eAlfonso 398\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\nmv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 ];\r\nend\r\nmv(1);\r\nmv(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',5000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003c4 \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2 % PAC Speed Multiplier\r\n  if lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n movepac=movepac+1;\r\n [curdir]=PACMAT_2Xsolver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2x\r\nif lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves and lives\u003c4\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 5000,score )) );\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"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":"2013-02-09T03:33:37.000Z","updated_at":"2025-12-03T15:28:58.000Z","published_at":"2013-02-09T04:11:24.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive2X.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePAC2X 1 Life Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso 398\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1313,"title":"PACMAT 09 - Awesome Tunnelling Ghosts, Equal Speed, 20 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m PACMAT_Interactive_009a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4 11 Lives Interactive\u003e (MP4)  Best Score seen is 11 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\"\u003ePACMAT_Interactive_009a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\"\u003e11 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 11 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT9_1Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=20;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:1\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT9_1Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 20000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"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":"2013-03-02T19:16:46.000Z","updated_at":"2025-12-03T15:31:49.000Z","published_at":"2013-03-03T03:24:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_009a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e11 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 11 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\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 Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzfW9Yl0ySFYkRw4J+bPHNZX/CWXX/ADwh/X/Gn+Lv9dbf7h/nWRcX0c+nWlqLK2ie337p4wfMm3HPzknHHQYA4r38zzDFUsXKEJNJf5HqY3F1oV5RjKyRqDxbc/8APCL9f8aP+Esuf+eEX5H/ABrK02+j0+4aWSytrsGNk2XAJUEj7wwRyO1UjXB/auM/nZy/XcR/Mzov+Etuv+eEP5H/ABo/4Sy5/wCeEP6/41l6lfR39wsqWVtaBY1Ty7YEKcD7xyTye/NEd9HHpU1l9itnkkkVxcsD5qAfwqc4wfoaSzXG/wA7H9dr/wA5qDxZdf8APCL9f8aP+Esuf+eEX6/41jWNwtnfQ3DW0NysbhjDOCUfHZsEHH4io5pBJM8gRYwzEhF6L7D2p/2rjP52L67iP52bv/CW3P8Azwi/I/40f8Jbdf8APCL8j/jWXd30dzZWkC2VtC1urK00YO+bJzl8nGR04ApdPv47GO6V7G1uvPhMSmdSTET/ABrgjDD3yKX9q4y3xsPrtf8AnNP/AISy6/54xfr/AI0HxZdf88Iv1/xrngefX61a1K8S/v5bqO0gtFkIxBbgiNOMcAkn3696f9q4z+dh9dxH87Nf/hLbn/nhF+R/xoHiy5/54Rfr/jWV9uj/ALH+wfYbbf53nfasHzcYxsznG3v0zml0u9j07UIrqSytrxUzmC5BMbZBHIBB4znr1FL+1cZvzsPrtf8AnNT/AISy5/54Rfr/AI0f8JZc/wDPCL9f8a54n5qtXd2tzHbIlrBAYYhGWiBBlIJO5sk/NzjjAwBT/tXGfzsPruI/mNf/AIS26/54Rfkf8aB4tuSQPIi/I/41l2d9HaW13C9lbXBuI9iyTAloec7kwRg/UGqQ+8PrTWa4y/xsf13Efzs9NjbdGjnqygn8aytb1eXTDCI0RvMz97NacH+pi/3F/lXN+LvvWv0avr8zr1KWBdSDs9D38bUnDDOcXroQjxZc/wDPCL8j/jR/wltz/wA8IvyP+NZWmXsen3onksra8AVl8m5BKHIxngg5HXr1qlXx/wDauM/nZ8/9dxH8x0R8WXP/ADwh/X/Gj/hLLn/nhD+R/wAaytRvo7+WJ0sra1EcSxlbcEByP4jkn5j36Cltr6ODTry1aytpXuNm2eQHzIdpz8hBxz0OQaX9q4y3xsPrtf8AnNQeLLn/AJ4Rfkf8aD4suf8AnhF+R/xrFs51t72Gd4I51jdXMUoJR8HOGweh+oovJ1ub2adYIoFkcuIogQiZOdq5OcD6mn/auM252H12v/MbX/CW3P8Azwi/I/40DxZc/wDPCH9f8ay7m+SfTrO1Wytont9+6eMHzJtxyN5Jxx0GAOKNNvo7C5aWSytrsGNk2XAJUZH3hgjkdu1L+1cZb42H13Efzmp/wltz/wA8IvyP+NB8WXP/ADwi/I/41ztXdRvo7+5WZLK2tAsap5dspCnA+8ck8nvz1p/2rjP52H13EfzGr/wllz/zwh/X/Gj/AISy5/54Q/r/AI1lpfRppU1kbK2d5JFcXLA+amP4VOcYP0NRWNytnew3DW0NysbhjDMCUfHZsEHH40f2rjf52P67iP5zZ/4Sy5/54Q/kf8aP+Etuv+feL8j/AI1hTSebM8iosasxYInRc9h7VZu76O5srO3SytoGt1ZWmiBDzZOcvk4JHTgDij+1cZ/OxfXcR/Man/CWXX/PvD+v+NH/AAlt1/zwi/I/41l2N9HaR3SPZW1yZ4jGGmUkxE/xJgjDfXIqlmj+1cZf42H13Efzs6IeLLokDyIvyP8AjXVId8aPz8yg8fSvP7+8S/1KS6jtILRZCCIbcEInGOAST29a7+H/AI94v9xf5V9DkGLrYhz9tK9rHq5XXqVXLndzmPFv+ut/9w/zrIuBpw06za3kuWvTv+0rIqiNefl2EHJ465Awa1/F3+vtv9w/zrIuNOe20+zvWntnS637Y0mDSJtOPnUcrntnqK8DOLfXZ37/AKHmY/8A3mQ3TLP7ffR2+/Zvz82M9Bmt4+ER2vD/AN+//r1leHf+Q3B9G/ka7qvWyXLsNiaDnVjdp+fkd2XYSlWpOU1d3OZ/4RBf+fw/9+//AK9H/CIL/wA/h/79/wD166aiva/sPBfyfi/8z0P7Nw38v4s5hvCQVSfthOAT/q//AK9cwwwxHpXpkn+rf/dP8q80f7xHvXzme4KjhXD2Kte/6Hk5nhqdBx9mrXLl0unfYrM2kly10Vb7UsqqEVs8bCDkjHqBzRpdiNRvVtzJs3A84zRdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kNRf7rfyryMFCNSvCEtU3+pw0IKVWMZbNmj/wAIgv8Az+H/AL9//Xo/4RBf+fw/9+//AK9dNRX3X9h4L+T8X/mfS/2bhv5fxZzP/CIL/wA/h/79/wD16P8AhEF/5/D/AN+//r101FL+w8D/ACfi/wDMX9m4b+X8zmv+ERGP+Pw/9+//AK9Ymq2H9nXhg8zfwGzjHWvQK4vxT/yGD/uL/KvIznLsNhsOp0o2d+7ODMcHRo0lKCs7lKyXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9a+WjbmPEPS4P9RF/uL/Kua8Xfetfo1dLB/qIv9xf5VzXi771r9Gr7rN/+Rc/l+aPp8f8A7o/kYumJp7XoXVJLiO12tlrZVZ8444JAxnFUqu6Zp0mqXotY57aElWbfczCNBgZ6nv8A1qlXwatc+YOisvDQvLOK4+1bfMGcbM/1qf8A4RFf+fw/9+//AK9a+h/8gW2/3T/M1oV93hcnwc6EJyhq0urPpqGX4edOMnHVrzOY/wCEQX/n8P8A37/+vR/wiC/8/h/79/8A166aiuj+w8F/J+L/AMzT+zcN/L+LOZ/4RFf+fw/9+/8A69RXfhgWtnLcfa92xd2CmM/rXV1T1fnRrv8A3P61z4rJ8HCjKUYapd2Z1svw8acpKOqXmeedDV3Ul09LlRpsly8PlqWNwqq2/HzABSRjPTvVLvV3UtPfTLlYHntpi0aybreYSKMjOCR39R2r4V7nzJY0fSf7VeRTL5ewZztzmtT/AIRFf+fw/wDfv/69M8Jf665/3B/Oupr67KcrwuIwqqVI3fqz38DgqNWipzV2cz/wiC/8/h/79/8A16P+EQX/AJ/D/wB+/wD69dNRXqf2Hgv5Pxf+Z1/2bhv5fxZyF/4cFhZSXAud+zsUxnnHrWD/ABV3fiD/AJAdx9F/9CFcGetfLZ3haWGrqFJWVjxcxowo1VGCsrFzUFsV1KRdNeeS0yPLa4ULJjHcKSOue9d/B/x7xf7i/wAq4C/sW03UZLR5oJmjIzJbyiRDxnhhwa7+D/j3i/3F/lXfwxbmn6I6sn+KfyOY8Xf662/3D/OsB7aaKKOZ4nWOTOxipAbHXB71v+Lv9dbf7h/nWLPqV5c2VtZT3Mslra7vIiZsrHuOW2jtk15Ocf77P1/Q4cw/3mRa8O/8hu3/AOBf+gmu6z715irFTx1pTIx/iP5105bm/wBSpOnyXu77muEzD6tBx5b3PTc+9GfevMvMb+8fzo8xv7x/OvQ/1n/6d/j/AMA6/wC2v7n4/wDAPS5D+7fn+E15o/3z9aN7/wB4/nSV5OZ5l9ecXy2t5nDjMZ9ZadrWJZLeaKOOSSJ1jkGUZlIDfQ960vDQ/wCJzH/ut/KqVxqV5d2lta3FzLLBaqVgjY5EYJyQPTJqsCRyDiuDDVXRqRqNbO5y0p+zqKfY9Nz70Z968y8xv7x/OjzG/vH86+l/1n/6d/j/AMA9j+2n/J+P/APTc+9GfevMvMb+8fzo8xv7x/Oj/Wf/AKd/j/wA/tp/yfj/AMA9Nz71xnin/kL/APAF/lWL5jf3j+dISScnk1wZjnP1ykqfJbW+5y4vMPrEOTlsSR280ySPHE7rGMuVUkKPU+lRr94fWrVrqV5ZQXMFrcSxRXKeXOiNgSL1wfUVUrw1ueaelwn/AEaLn+Bf5Vzfi771r9G/pXNB2/vH86QsT1JNe9jM6+sYf2HJbbr/AMA9PEZj7Wl7Llt8ySC3muZPLgieSTBO1FJOB14FRd6t2Go3mlXQurC5ltpwpUSRtg4IwR+VVK8HW55h6Bov/IGtf90/zNXyRnrXmXmOBjcaN7f3j+dfTUOIvZU40/Z3srb/APAPZp5tyQUeS9vP/gHpufejPvXmXmN/eP50eY394/nWv+s//Tv8f+AX/bX9z8f+Aem5HrVPVv8AkD3X+5/WvPt7f3j+dG9iPvGs63EXtacoeztdW3/4BFTN+eDjyb+Y3HNSzW81s4SaN42IDAOpBweh5qGrd/qV5qk6zX1zLcSqixh5GyQo4A+gr5jU8Y3PCP8Arbn/AHB/Oupzx1rzEOR0JFLvb+8fzr38Bnf1SiqXJe3n/wAA9TC5l7Cmoct/mem596M+9eZeY394/nR5jf3j+ddn+s//AE7/AB/4B0f21/c/H/gHd6//AMgS457D+YrgzS727kmkzXiZljvrtVVOW2ljzcXifrM1O1iWSGW3n8qaN45FPKOMEfhXo0P/AB7xf7i/yrz69v7vU797y+uJLi5kILyyHLNgY5P0Fegw/wDHvF/uL/KvX4a3qX8v1PQyf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/AHD/ADrIuF05dPtDbS3LXp3/AGlXVRGvPy7CDk8dcgYNeVnC/wBtn6/ocOYf7zINNvo7C5aWSytrsGNk8u4BKjI+8MEcjt2qkTVvTbP7ffR2+/ZvzzjPQVvHwguf+P0/9+//AK9ZYbLsRiYudKN1tuRRwlatHmgrow9Rvo7+5WZLK2tAI1Ty7dSFOBjcck8nvzRHfRx6TNZGytneSRXFywJlTH8KnOMH6Gtv/hEB/wA/p/79/wD16P8AhEF/5/T/AN+//r1v/YeN25PxX+Zr/Z2J/l/I5+xuVs76G4a3huVjYMYZgSj47Ngg4/EVHNIsszyKioGYsEXovsPaujbwiqqT9sPAz/q//r1zLDaSK5cTgq2Fa9rG1zCth6lCyqK1y5d30dzZWlullbQtbqytNECHmyc5fJIJHTgCnafqEdhHdB7C1ujPEYlM6sTET/GuCPmHvkU27TTlsrQ2kly10Vb7SsqqEVs8bCDkjHqBSaXY/wBo3q25k2ZBOcZ6Vz06TqtQitWzOMXKXKt2Ux1q3qV5Hf38t1HaQWiyYIgtwRGnGOAST79a3R4QH/P4f+/f/wBeudvLf7NdywZ3bGK59a6sTl9fDJSqxtfzNa2Fq0UnUVrk/wBuj/sf7B9itvM8/wA37XtPm4xjZnONvfpnPejS76PTtQjupLK2vFTdmC5BMbZBHIBB469eoo26b/Y+7zLn+0/Pxs2L5Xlbeuc53Z7YxioLS3+03cUOdvmMFz9a44x5vdXUwSbdkQ556Vau7tLmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBW7/wAIgP8An8P/AH7/APr0v/CIL/z+n/v3/wDXr1f7Exu/J+K/zO3+zsT/AC/kYlnfx2ltdwtZW1wbiPYskwJaHnO5MEYP1zVaGRY5kkZFcKwJRujY7H2rpP8AhEF/5/T/AN+//r0f8Igv/P6f+/f/ANej+xMb/J+K/wAw/s3E/wAv5GBqF2l7fzXKWsFqsjbhDACET2AJJx+NPe9jfS47P7Jbq6SNIbkA+awIA2k5xtGM9O9bn/CIL/z+n/v3/wDXo/4RBf8An9P/AH7/APr0v7Exv8n4r/MP7OxP8v5GHpl9Hp96LiSytrwBWXybkEocjGeCDkdevWqVdT/wiC/8/p/79/8A16P+EQX/AJ/T/wB+/wD69P8AsTG/yfiv8w/s7E/y/kYmo30d/JE6WVtaiOJYytuCA5H8RyT8x79BRbXyW+nXdq1lbTPcbNs7g+ZDtOfkIOOehyDxW3/wiA/5/T/37/8Ar1S1XQBptqJ/tHmZbbjbisquUYqlTcpwtFea/wAyZ4GvTi5yjZL0MuznW3vYZ2ginWNw5ilBKPg5w2CDg/UUXk63V3NOkEUCyOWEUQIRMnOFyScD6mizFu13CLtpVti4EpiALhc87QeCcep60Xi2y3cwtGla2DkRNKAHK543AHAOPQmvP6nGTXN9HcadaWq2VtE9vv3ToD5k245G8k446DAHFGm30en3LSyWVteAoybLgEqMj7wwRyO3ar2laANStDP9o8vDbcbc/wCetT3nhdbWyluPtZby13Y2Yz+td0crxEqPtVH3d9zqjg67h7RR0Ocq7qV9Hf3Kyx2VtZhY1Ty7dSFOBjcck8nvzVLHNXdSXT1uFGmyXMkPlruNwqq2/HzYCk8Z6d64XucoqX0a6XNZfY7Z3kkVxcsD5qAfwqc4wfoaisblbS+huHt4blY3DGGYEo+OzYIOPxFXNH0j+1WlUy+XsGc7c5rU/wCEQH/P7/5D/wDr130MrxNeHPTjdPzR1UsHXqx5oRujm5pFlmeRUVAzEhE6L7D2qzd38dzZWdulnbwG3VlaaIEPNk5y+TgkdOAOK2/+EQH/AD+n/v3/APXo/wCEQX/n9P8A37/+vW39iY1/Y/Ff5mn9nYn+X8jEsr6O0iukaytrkzxGMNMCTET/ABJgj5vrkVS9K6DUPDa2NlJcfaS+zHylMZ5x61gY+b2rixGFq4aXLVVmc9ajUoy5aisy3qF5Hf6lJdR2kFokhBEFuCETjHAJJ7Z69676H/j3i/3F/lXA6gtiuoyLpsk8lmCPLa4VVkI9wCR1z3rvof8Aj3i/3F/lX0HDHxTt2R6mT/FP5HM+Lh/pFv8A7p/nWPcaa9tptnetPbOt1v2xxzK0ibTj51HK57Z6itjxd/x8W3+6f51gPbzRwxyvE6xyZ2OVIDY64PevJzi/12fr+hw5h/vMi3otxFa6rDNM+xFzlsZxwa6z/hINL/5+h/3yf8K4iGCa5k2QxPI+NxCKWOO54qLNVgs2rYOm6dNK2+v/AA48NjqmHi4wS1O8/wCEg0v/AJ+h/wB8t/hR/wAJBpn/AD9D/vlv8K4eaCa2cJNG8bEAgOpBIPQ80CCZoWnETmJSFMm07QfQnpXb/rJif5V+P+Z0f2vX7L+vmdu+vaYysouRkgj7p/wrhG5YntmpIo5J5FjjRpHY4CqMkn0ApjKysVYbSDgg9q87HZjUxri6iWnY5MTi54izmti3dadJaWVndNPbOt0rMqRyhnTBxhwOVP17Vc8M/wDIZj/3W/lWXJbzRRxySRuscgJRmUgNj0PetPwz/wAhmP8A3W/lWeXf71Tv3X5k4X+PD1R24rz3V/8AkLXX/XQ/zr0IV57q/wDyFrr/AK6H+dfS8S/woep7Gc/BEP7Of+x/7T8+22ef5Hk+cPNzjO7Z129t3TNN0+VYdQgkc4VZASfQZqL7PN9m+0eU/k7tvmbTt3dcZ9fakggmuZRHBE8kh6KilifwFfIQlyS5ux4EXZ3O4/4SDS/+fof98H/Cj/hINL/5+h/3y3+FcFUskMkKoZI2QOu5CRjcPUeor3v9Y8V/Kvx/zPU/tev2X9fM7j/hINL/AOfof98t/hR/wkGmHj7UP++D/hXERwTTK7xxu6xjc5VchR6n0qMfeH1priPFfyr8f8w/tev2X9fM9NUhlDDkEZBqtd6hbWJQXEnllx8vyk5qaD/j2i/3F/lXN+Lvv2v0b+lfSY/Fzw+EdaK10PYxVeVKh7SK1NX/AISDS/8An6H/AHy3+FH/AAkGmf8AP0P++W/wrh4YJrmTy4I3kfBO1FJPvwKir5v/AFkxP8q/H/M8f+16/Zf18zvv7f0zH/H0P++W/wAKytf1SyvNNEUE29/MBwFI4x71zk0E1syiaN4yw3AOpGQehGe1CQTSQySrE7Rx43uFJC56ZPasMRntevSdOSVn/Xczq5nVqwcJJWY6zt2vLyG1V4o2lcIHlcKi5OMsTwB70Xlu1neTWzPFI0TlC8Th1bBxlSOCPeoo45JZFjjVndjhVUZJJ7AUSxyRStHIjI6nBVhgg+hFeL1POOx8Lf8AIJb/AK6n+Qq/q/8AyB7v/rn/AFqh4W/5BDf9dT/IVf1f/kD3f/XP+tfeYX/kVf8AbrPp6H+4fJnnh61d1LT30y5WCSe2mLRrJut5hIoyM4JHQ+o6iqXepZoJrdwk0TxsQGAdSDg9DzXwb3PmDY8OX1vYvO1xJsDKAOCc810H/CQaZ/z9D/vhv8K4gW8zQtOsTmJTgvtO0H0JpsUck0qxxI0jscKqjJJ9hXsYTOq+FpKlBJpdzvoZjVowUI2sdz/wkGl/8/Q/75b/AAo/4SDS/wDn6H/fLf4VwjKyMVYYIJBB7VI9vNFHHJJG6xyDKMykBvoe9dP+smK7L8f8zb+16/Zf18zqdX1exutKmhhn3O2MDafWuR71LHBLOrmKJ3WNdzlVJ2j1PoKhrysbjamMqe0qJJrTQ4sTiZ4iXNLcu6hYtpmpSWjzQTNGQDJbyiRDxnhhwa7+D/j3i/3F/lXnMkElvP5U0bRyKRlHGCPwNejQf8e8X+4v8q93hj4p+iPSyf4p/I5jxd/x8W/+4f51izX95cWdvaTXMr29vu8mJnJSPccttHQZPpXd3en218ym4i3lRgckYqt/YGmY/wCPUf8AfTf41ePyPEYjESqxas/67F4rLatWtKcWrM4uzvrzTpjNZ3M1vIyFC8TlSVPBGR2NV67z/hH9L/59R/303+NH/CP6X/z6j/vpv8a5P9W8V3X4/wCRz/2RX7r+vkcZeX15qMyzXtxLcSqgQPK5YhRwBk9hQl/eR2ElitzKtpK4d4Q52Mw6EjoSK7P+wNM/59R/323+NH9gaZ/z6j/vtv8AGl/q3idrx/H/ACD+yK3df18jibW5uLK5jubWaSGeIhkkjbaykdCCOaZJI0sjSSMXdiWZickk9Sa7htB0xVZhbDIBI+Y/41wrcMR2zXn47LqmCcfaNO/Y5MThJ4eym9yxPfXdzbW9tPcyyw24Kwxu5KxgnJCjoAT6Ve8M/wDIZi/3W/lVW7vo7mys4EsraFrdWVpowd82TnL5OMjpwBVrw1/yGYv91v5Vnl3+9U/X9ScL/Hh6o7ivPdX/AOQtdf8AXQ/zr0GqEui6fPI0klvl2OSdx619nm+Aq4yEY02tO59Dj8LPERSg9jift95/Z39n/aZvsfmed5G8+Xvxjdt6Zxxn0osr28027S6sriW2uEzslhcoy5GDgjnoSK7P+wNM/wCfUf8AfTf40f2Bpn/PqP8Avtv8a8D/AFbxO14/j/keX/ZFbuv6+RwVWZ7y5ulhS4uJJVgjEUQdifLTJIUZ6DJPHvXaf8I/pef+PUf99t/jXMa/aQ2WomKBNibQcZz2965MblFbCU/aVGreRz4jAVKEeadinb393aQzw291NFFcJsmSNyokXrhgOo+tVl+8PrTaVfvD615a3OJHpkH+oi/3F/lXNeLvvWv0aulg/wCPeL/cX+Vc14u+9a/Rv6V91m//ACLn8vzR9PmH+6P5GDZX95p1yLiyupbaYAqJIXKNgjBGR6iqxpKUda+EPmC3eX15fvG93cy3DRxrGhlcsVQdFGew9KIb+7t7S4tIbmWO2udvnRK5CSbTldw6HB9a6fS9GsLjTIJZYNzupJO488mrf9gaZ/z6j/vpv8a9ylw/iKlOM01Z6/1oenDK604qaa1OIt55rS5juIJHimiYOkiHDKw5BBHQii4nmu7mS4nkeWaVi7yOcszHkkk9TXb/ANgaZ/z6j/vtv8aP7A0z/n1H/fbf41p/q3it7r8f8iv7Ir91/XyK/hb/AJBLY/56n+Qq9q//ACBrvP8Ac/rU9tawWcfl26bEznGSeag1f/kD3ef7n9a+ijQlQy9057qLPWVN0sI4S3SZ553qze395qMyzXtzNcSqgQPK5YhRwBk9hVbuau6lfR39wsqWVtaBY1Ty7cEKSB945J5Pfmvz17nyg1b+8jsZLFLmVbSVw7whzsZh0JHQkVHbXU9lcx3NrNJDPEwaOSNtrKR0II6Vr+HbG2vnnW4j3hQCOSMc+1b/APYGmf8APqP++m/xr18JktbFUvawaSfc76GXVa0OeLVmcNJJJNI0kjF5HJZmY5JJ6k1NPf3lzbW9vPcyyQ26lYY3clYwTkhQemT6V2f9gaX/AM+o/wC+m/xpP7A0v/n1H/fTf410/wCrmJ7r8f8AI2/siv3X9fI422v7yyjnS1uZYUuE8qYRuVEiHqrY6j2NVa73/hH9L/59R/303+NH/CP6X/z6j/vpv8af+rmKvuvx/wAg/sev3X9fI4y6vbrULxrq9uJbi4kI3yysWZscck8npXoUP/HvF/uL/KqI0HTQf+PUf99H/GtALtAUdAMCvYyfLKuCcue2ttj0MBgqmHcuZ7i0UUV756gUUUUAFFFFADZP9W/+6f5V5m/3j9a9Mk/1b/7p/lXmb/eP1r5Hiben8/0PBzneHzLt2unCxs2tJLlroq32pZVUIrZ42EHJGPUDmrPhn/kMxf7rfyqtdadJaWVpdNPbOt0rMqRShnTBxhwOVP16irXhn/kMxf7rfyrwMtt9ap27r8zzML/Hh6o7esC78Ti1u5IDa7vLYrnf6fhXQA8V57q//IWuv+uh/nX12eYythqcZUna7PezLEVKMYum7XNv/hLx/wA+Z/7+f/Wo/wCEvX/nzP8A38/+tXK0V85/bWO/n/Bf5Hj/ANpYn+b8EdUPF65/48z/AN/P/rVi6rqH9o3nniPZwBjOelUKK58RmOJxEOSrK6+RlVxdatHlm7oSlBwQaSiuE5jqU8WhI1T7GTtAGfM/+tWZrGr/ANq+UfJ8vywf4s5rKorvrZlia1P2VSV4+iOqpjK1SHJKV0JRRRXAcp0dl4mFlZRW/wBm3eWMZ34z+lT/APCXr/z6H/v5/wDWrl6QivThm+MhFRjOyXkjsjj8RFKKlovQ6n/hLx/z5n/v5/8AWo/4S8f8+Z/7+f8A1q5Wiq/trHfz/giv7SxP834I9E0zUP7StGnCeWN23Gc+n+NGr/8AIGu/9z+tUPCv/IJb/rqf5Cr+r/8AIHu/+uf9a+rp1Z1ctdSbu3FnuQnKpg3OTu2jzzuau6kunpcKNNkuZIfLXcbhVVt+PmwFJ4z0ql3q7qWnvplysDz20xaNZN1vMJFGRnBI7+o7V+fvc+VNnwj/AK65/wBwfzrqa5bwj/rrn/cH866mvv8AIf8Aco/P8z6nLP8AdkFFFFeyegFFFFABRRRQAUUUUAFFFFABRRRQA2T/AFb/AO6f5V5m/wB9vrXpkn+rf/dP8q80k++31r5Hib4qfz/Q8HOd4fMfJbzRRpJJE6xyAlGZSA30PetPw1/yGY/91v5VRnv7u5tre3nuZZIbcFYY3clYwTkhR2yfSr3hr/kMx/7rfyrwMu/3qnfuvzPMwv8AHh6nbivPdX/5C11/10P869CFee6v/wAha6/66H+dfTcS/wAOHqexnPwRKNOAJOBSVd0of8TS1/66r/OvkYR5pKPc8GKu0ipsb+6fyo2N/dNdnqeq3FpqMdrbwxuz4xu45NMutS1WygM0trAEBxkHP9a76+GwlGp7KdWz/wAP/BPQ+oK0mm2o7+7t+JxxUjqDSdK2L/Xpr+1MDxRqpOcqDmseuOtCnGVqcrr0scFRRi7Rd0JRRRWJA4Ak8DNO8th1U/lUtldNZ3STooLKcgN0rbTxTdSMEW3hyeBwf8a7MPRo1NJyafpf9TanGk1ecrfI57Y390/lQUYDJBArpZfEV7GuWtoAM9s/41NrUxuPDkEzABncEgdO9ddXLIQjL3neKvZxt+pqqNKcZSpzvby/4JyNFFFeQch2vhb/AJBDf9dT/IVf1f8A5A93/wBc/wCtUPC3/IJb/rqf5Cr+r/8AIHu/9z+tfeYX/kVf9us+no/7j8meed6lmt5rdwk0TxsQGAdSDg9DzUR61Zvb+81GZZr25luJVQIHlcsQo4Ayewr4PqfMG54R/wBdc/7g/nXVVyvhH/XXP+4P511Vff5D/uUfn+Z9Tln+7IKKKK9k9AKKKKACiiigDhf+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJor8y+vYr/AJ+P72fG/Wa387+81v8AhI9U/wCfgf8AfC/4Uf8ACR6p/wA/A/74X/Csmij69iv+fj+9h9Zrfzv7zW/4SPVP+fgf98L/AIUf8JHqn/PwP++F/wAKyaKPr2K/5+P72H1mt/O/vNceItTwVNxwevyD/Cstmyee9NorKrXqVf4km7dzOdSc/idy9d30dxZWlutlbwtbqytNGCHmyc5fJIJHTgCorS8lspxNA21wMZxmrF9/ZP8AZ9h9h+1fbdjfbfO2+Xuz8vl45xjrnvWdWNOTjrHRoSbTujWHiTU/+fgf98L/AIVnTTPPK0kh3MxyT71FRW1XEVaqSqSb9WVOrOfxSuFXdJ/5Ctr/ANdV/mKpdqu6T/yFbX/rqv8AMUqH8WPqKn8aNrWZEi8TWzu21F2kk+mam12/tLjTGjiuEkbcOAaz/FR/4mi/9cxWHmrzWip42U3umevLMqmHVahFJqe42iiiuc8UKKKKAFqW3bZMpPAB5NQ0orSlUdOamumomrqxo3k0bwgK4Jz0Fa+of8inafUf1rmB1FdPqP8AyKdp9R/WvdeOnjpVqs1Z8vQ68HFRp1Euxy1FFFfPHKaFpq95ZQmK3l2ITnG0H+dSTa7qE8DwyTZRhhhtHNZlFdCxVdR5FN29TVVqijyqTsFXdSvo7+5WWOytrQLGqeXbqQpwPvHJPJ781SrQ1f8Asr7Wn9ji6+zeUm77Vt3eZj5sbeMZ6d65nuZEVnqN1YMxtpNhcc8A5/Orf/CR6n/z8D/vhf8ACsmjNdNPFV6ceWE2l6msa9SKtGTSNX/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmir+vYr/n4/vZX1mt/O/vNb/hI9U/5+B/3wv+FH/CR6p/z8D/AL4X/Csmij69iv8An4/vYfWa387+81v+Ej1T/n4H/fC/4Uf8JHqn/PwP++F/wrJozR9exX/Px/ew+s1v5395rf8ACOan/wA8B/32v+NH/COan/zwH/fa/wCNd1RX1f8Aq3hf5pfh/ke5/Y9Hu/6+Rwv/AAjmp/8APAf99r/jR/wjmp/88B/32v8AjXdUUf6t4X+aX4f5B/Y9Hu/6+Rwv/COan/zwH/fa/wCNH/COan/z7j/vtf8AGu6oo/1bwv8ANL8P8g/sej3f9fI4X/hHtTwSbfoM/fH+NZZGDg9a9Nk/1b/7p/lXmTn5z9a8POMup4JwVNvXuebmGEhhnFRd7l680uazsbK7klgeO8VmRY5Qzrg4O4Dlfx61BaWk17OIYF3OQSBnFNkgmijjkkidI5ASjMpAb6HvWn4Z/wCQ1H/ut/KvMwlJVa0acno3Y46MFUqRg+pGPDmp/wDPuP8Avtf8azpont5njkGHQkEe9emV57q//IWuv+uh/nXr5vldLBwjKm279zux+Chh4pxd7lHtV3Sf+Qra/wDXVf5iqParuk/8hW2/66r/ADrxqH8WPqefT+NG/qMMdz4vsIJk3RySRqynuC3Ire8ZeHdJ07w9JcWlkkUolRQwLHAOc9TXNa/PLa69Dcwj95EFdSRkZByKj1XxZq+sWJtLvyzEWDELFg5FRnFCvPMOeDtFPU7q84RqVFJatnPUU7Y390/lRsb+6fypcrPOsNop2xv7p/KjY390/lT5WFhDWv4atobzxHYW9wgeGSZQynoRnpWVsYfwn8qs2N3Pp19DdwKPNhYOu5cjIqKkJuLUd2RVhKUJKO7R6H498O6TpegJPY2KQSmcKWBJ4wTjk/SuZ1H/AJFO0/3h/WotZ8Xavr1ktpe+WYlcP8kW05AI/rUuo8eE7TI7j+tdOR0atHC1Y1nd2/VDyWhXoYWpCu7yt69TlqKKK5yjQtdIvb2IyW8W9AcZ3Ac1JNoWoQQPNJBhEGSdwrofCv8AyCX/AOup/kKv6vxo11/uf1r6Wjk9CeC+sNu9rnsU8vpyw3tW3e1zzyr2q6XLpV0tvNNBI7RrJmCQSKAwyBkd/aqPepZoJrdwk0TxMQGAdSDg9DzXzXU8cms9Oub9mFvHvKDJ5AxVr/hHNT/54D/vsf41o+Ef9fc/7g/nXU9q+ny3JqGKw6qzbTf9dj2cHl1OtSU5N3OF/wCEc1P/AJ9x/wB9r/jR/wAI5qf/ADwH/fa/413VFd/+reF/ml+H+R1f2PR7v+vkcL/wjmp/88B/32v+NH/COan/AM8B/wB9r/jXdUUf6t4X+aX4f5B/Y9Hu/wCvkcL/AMI5qf8AzwH/AH2v+NH/AAjmp/8APAf99r/jXdUUf6t4X+aX4f5B/Y9Hu/6+QUUUV9EesFFFFABRRRQA2T/Vv/un+VeZv94/WvTJP9W/+6f5V5m/3j9a+R4m+Kn8/wBDwc53h8y1c6jeXdpbWtxcySwWoKwRs2VjBOSB6ZNXfDX/ACGYv91v5VBfaoL3TrC0+xWkP2NGXzYY9rzZOcyH+IjoPQVP4a/5DMX+638q8DLdMTT06r8zzML/AB4eqO3Fee6v/wAha6/66H+dehCvPdX/AOQtdf8AXQ/zr6biX+FD1PYzn4IlKpradra4jmHJRgwB9qgpa+QTaaaPATad0dF/wllz/wA8IfyP+NJ/wllx/wA+8X5H/Gudort/tPF/zs6frtf+Y6L/AISy4/54Q/kf8aP+EsuP+eEP5H/Gudoo/tLFfzsX1yv/ADHRf8JZcf8APCH8j/jR/wAJZcf88IfyP+Nc7RzR/aWK/nYfXK/8x0X/AAllx/zwh/I/40f8JZcf88IfyP8AjXO0Uf2li/52H1yv/MdF/wAJZcf88IfyP+NVdR12fUbcQPGiKG3fKDWQKO9RPH4mpFwlJ2YpYqtJcspaMSiiiuM5ztfC3/IIb/rqf5Cr+r/8ge7/ANz+tUPC3/IIb/rqf5Cr+r/8ge7/ANz+tfeYX/kVf9us+nof7h8meed6tX+o3mqTrPfXMtxKqLGHkbJCjgD6CqvetDV9T/ta7ScWVpabYkj8u1i2KdoxuI9T3Pc18G99j5g1fCP+uuf9wfzrqq5Xwj/rrn/cH866qvv8h/3KPz/M+pyz/dkFFFFeyegFFFFABRRRQAUVWvNQtbBlFxLsLDI4JzVc6/pZ/wCXof8AfLf4VyzxuHg3GU0n6oxliKUW1KST9TRorN/t/TP+fof98N/hR/b+mf8AP0P++W/wqfr+F/5+L70L61Q/nX3mlRWb/b+mf8/Q/wC+W/wpf7f0z/n6H/fLf4UfX8L/AM/F96D61Q/nX3mhIP3T/wC6f5V5m/3j9a7pte0xkYfaRkggfKf8K4V+WJHrXy/ENenVdP2ck7X2+R4ubVYVHHkdy5drpwsrQ2kly10Vb7UsqqEVs8bCDkjHqBzVrw1/yGov91v5VVu9OktLK0umntnF0rMqRShnTBxhwOVP16iptCuYbTU0lnfYmDk4z2rxcBKMcRCTeif6nnYZqNaLeyZ3lee6v/yFrr/ro3867Aa/ph/5eh/3yf8ACuN1GVZ9RnljO5HckH1Ga+g4gxFKtTh7OSdn0Z6ua1qc4x5JXKdT2cH2m7igzt8xgufTNQVb06VYb+CRzhFkBJ9BmvmaSTmr7HiwSckmb3/CIL/z+H/v3/8AXo/4RBf+fw/9+/8A69av9v6X/wA/Q/74b/Cj+39L/wCfof8AfLf4V9isHk/df+Bf8E+h+r5f3X3/APBMr/hEF/5/D/37/wDr0f8ACIL/AM/h/wC/f/161f7f0v8A5+h/3y3+FH9v6YT/AMfQ/wC+W/wp/U8n7r/wL/gh9Wy/uvv/AOCZX/CIL/z+H/v3/wDXo/4RBf8An8P/AH7/APr10wbcoK8gjINV7vULax2faZNm/pwT/Kt55Tl0I88o2Xq/8zWWAwkVeSsvVmD/AMIgv/P4f+/f/wBej/hEF/5/D/37/wDr1q/2/pf/AD9D/vlv8KP7f0v/AJ+h/wB8t/hWH1PJ+6/8C/4Jl9Xy/uvv/wCCZf8AwiC/8/h/79//AF6o6roA020E4uPM+bbjbj+tdF/b+mf8/Q/75b/CsvX9Vs7vThFBNvfeDjaRxg1y43C5ZGhJ0muZba/8ExxNDBRpSdNq/qcpRRRXyZ4R2vhb/kEt/wBdT/IVf1f/AJA13/uf1rF0DVLOzsGinm2Nv3Y2k8YFW9R1qwuNOuIo59zsmFG019rhsVQWW8jmk7PqfRUa9JYPlclexxfc1d1JdPS4UabLcyQ+Wu43Cqrb8fNgKTxnpVKrupae+mXKwPPbTFo1k3W8wkUAjOCR0PqO1fFO1z542PCP+uuf9wfzrqq47w5e21jJO1xJsDKAOCc810H9v6YTxdD/AL5b/CvtslxdCng4xnNJ67s+iy6vShQSlJJmjRWb/b+mf8/Q/wC+W/wo/t/TP+fof98t/hXrfX8L/wA/F96O/wCtUP5195pUVm/2/pn/AD9D/vlv8KX+39M/5+h/3y3+FH1/C/8APxfeg+tUP5195o0VnDXtMJwLoZ/3G/wrRUhlDA5BGRWlPE0qt/ZyTt2ZcKsKnwO5yni7/XW3+4f51gvbTRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+lfA5x/vs/X9D5bMP95kRQ281y5SCN5GALEIpJx3PFRVZs7+706YzWVzLbyshQvE5UlTwRkdjVavNOMlmt5rZwk0bxsQCA6kEg9DzQtvM0DTiJzEpCtIFO0E9iakvb+81GYTXt1NcSqgQPK5YhRwBk9hQl/dx2MlilzKtpK4d4A52Mw6EjoSKWoEMUUk0ixxo0jscKqjJJ9AKRlZWKsMEEgg9qktrqeyuY7m1mkhniYMkkbFWUjuCOQaZJI8sjSSOzyMSzMTkknqTT1AdJbzRRpJJE6xyAlGZSA30Pelitppw7Qwu4RdzlFJ2j1OOgp89/d3Nvb289zLLDbgrDG7krGCckKO2T6U601G8sFnW0upoBcRmKYROVEiHqrY6j2pa2AqYqWaGS3laGaN45F6q4wR9QaiBqxeXl1f3b3V7PLcXEhy8srFmbtyT1pgM+zzeR9o8p/J3bfM2nbu64z0z7UQQTXMoigieSQ9ERSxP4CpPt13/AGf/AGf9qm+x+b532fedm/GN23pnHGetFlfXmm3aXVjcy21ymdksLFGXIwcEc9CRS1sBWxUskEkao0kbIHXcpIxuHqPUVFVi4vLm7WFJ55JVgjEcQdiRGmSdq56Dk8e9MBkdvNMkjxxu6xjLlVJCj1PpUa/eH1qxb393aQzw29zNFFcLsmSNyokXrhgOo+tV1+8PrTW4I9Lg/wCPeL/cX+Vc14v+9a/Rv6V0sH+oi/3F/lXNeLvvWv0avus3/wCRc/l+aPp8w/3R/I52GCa5k8uCJ5JME7UUk4HXgVFVmyv7zTrkXFjdTW04BUSQuUbBGCMj1FVq+EPmCWa3mtmUTRPGWUMA6kZB6EZ7UJbzSwyTJG7Rx43uFJC56ZPapLu+vL943u7mW4aNFjRpXLFUHRRnoB6UsN/eW9pcWkN1LHbXO3zolchZNpyu4dDg+vSlrYCCONpZFjjRndjhVUZJPoKJI3ikaORGR1OCrDBB9Kdb3E1pcx3NvI8U0TB0kQ4ZGHIII6EGi4uJru5kubiR5ZpWLvI5yzMeSST1NPUAe3mjhjmeN1jkzscqQGx1we9ENvNcOUgieRgCSEUk4HU8VLNf3lxaW9pNcyyW1vu8mJnJWPccnaOgyfTrSWd/eadM01lczW8rIULxOVJU8EZHY0tbAVqlmt5rZwk0TxsQGAdSCQeh5qKrN7f3mozLLe3MtxKqCMPK5YhRwBk9hTAjFvM0DTrG5iUhS+07QfQmmxRSTyLHGjSOxwqqMkn0AqZL+8SwksUupVtJXDvAHOxmHQkdCRTLW6nsrmO5tZpIZ4mDJJGxVlYdCCOho1AjZWRirqVIOCD2p8lvNFFHJJE6xyAlGZSA2OuD3pskkksjSSOzyMSzMxyST1Jqee/u7m2t7ee5lkht1Kwxu5KxgnJCg9Mn0o16ARRW80yu0cbuIxucqCdo9T6CosVatr+8sknS2uZYUuEMcyxuVEiHqrY6j2NVc0eoE0kMlvP5U0bxyKRlHGCPwr0aD/j3i/3F/lXnl1e3Wo3r3V7cS3FxIQXllcszduSetehwf8e8X+4v8q+n4a3qX8v1Payf4p/I5jxb/rrf/cP86yLi+jn0+ztVsraJ7ffunjB8ybccjeSccdBgDitfxd/rbb/cP86yLhdOXT7Q20ty16d/2lXVRGvPy7CDk8dcgYNeVnC/22fr+hw5h/vMiTRLeG61WKGdN6NnK568Gus/sDTP+fYf99N/jXG6befYL+O4Kb9mflzjORit7/hLl/59D/38/wDrV35TXwNOk1iUnK/VX0OrA1cLCm1WSvfsaf8AYGmf8+o/77P+NH9gaZ/z6j/vs/41mf8ACXL/AM+Z/wC/n/1q0tJ1gaq8iiHy9gz97Oa9qjWyqtNU6cU2/wC7/wAA9CnUwVSShFK78v8AgA2g6Yqs32YcAkfOf8a4V+HI7Zr0uT/VP/un+VeaP98/WvI4hoU6TpqnFK99vkcGbUoU3HkVrly6vo7mys7dbK2ha3VlaaIEPNk5y+SQSOnAFTaFbQ3WppDOm9CCSM46CobpNOWytGtJLlroq32lZVUIrZ42EHJGPUCjTL7+zr1bjy9+3IxnFeFg3TjVi5/Cnr955tFxVSLnsdf/AGBpf/PqP++j/jR/YGl/8+o/76P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArV9f9cyfsv8AwH/gHvfWMv7L7v8AgGp/YGl/8+o/76P+NH9gaX/z6j/vs/41l/8ACXr/AM+Z/wC/n/1qP+EvX/nzP/fz/wCtR9cyfsv/AAH/AIAfWcv7L7v+Aan/AAj+mf8APsP++j/jXMa/aQWWomKBNibAcZzWp/wly4/48z/38/8ArViarqH9o3v2jy/L+ULjOeleZmuIwFSglh0lK/RWOPHVcLOnailf0Es76O0truJrK2uDcR7FkmBLQ853JgjB+oNUh94fWrlmumtbXZvZLlJxGDbCFVKs+ejknIGPTJqkDgg185G1zyD0yH/URf7i/wAq5rxd9+1+jUsfi0JGq/YydoAz5n/1qzdY1caqYj5Pl+Xn+LPWvrMxzLDVsG6VOWunRnu4vGUamG5IvXQraZex6fei4ksra9UKy+TcglDkYzwQcjr1qlV3TV09r0DVJLmO12tlrZVZ8444JAxnFUjXyelzwjstL0bT7jTIJ5YNzsCSdx9at/2Bpn/PqP8Avs/41iWPiUWdlFb/AGXdsGN2/Gf0qx/wlw/58z/38/8ArV9hh8XlSoxU0rpa+7/wD36VfAqnFSSv6Gn/AGBpf/PqP++j/jR/YGl/8+o/77P+NZf/AAl6/wDPmf8Av5/9aj/hL1/58z/38/8ArVt9cyfsv/Af+AafWcv7L7v+Aan9gaZ/z6j/AL7P+NVtR0XT4NOnlSDa6JkHcaqf8Jev/Pmf+/n/ANaobvxOLqzmtxabfMXbnfnH6VjiMXlTpSUErtae7/wDOrXwLg1FK/oc73q5qV9Hf3CypZW1oFjVPLtwQpwMbjknk9+apDk1d1JdOW4UaZJcyQeWu43CKrb8fNgKTxnpXx73PANHw5Y299JOtxHvCqCOSMc+1dB/YGmDpaj/AL7P+NY/hH/XXP8AuD+ddSzbVJ64BNfa5NhcPPBqc4J77o+jy+hSlh1KUU2Zv9gaX/z6j/vs/wCNH9gaX/z6j/vs/wCNZh8XAEj7Gf8Av5/9ak/4S8f8+Z/7+f8A1qf1zJ+y/wDAf+AH1jL+y+7/AIBNq+j2Ftpk0sUGx1xg7ie4rkc8+tb9/wCIxfWUlv8AZim/HO/OOc+lYHevnc2qYapWTwy923RW1PJx06M6idHaxc1C8jv9Rkuo7SC0SQgiC3BCJxjgEk9s9e9d9D/x7xf7i/yrgdQWxXUZF02S4kswR5bXCqshHuASOue9d9D/AMe8X+4v8q9Thj4p27I7cn+KfyOZ8XD/AEi2/wB0/wA6x7jTXttNs71p7Z0ut+2OOZWkTacfOo5XPbPUVseLVJmt8An5D/Oud2P/AHT+VeVm8W8bO3f9Dix6/wBpkWtN0+TU7loI57aErG0m64mEakAZwCep9B3qkRzS7WHUGkrzbNbnEXdS0+TTLlYJJ7aYtGsm63mEigEZwSOh9R2rZ8If625/3R/Ouemt5rZwk8TxsRkB1IOD0PNdD4Q/1tz/ALo/nXpZN/vlP+uh2Zf/ALzE6eT/AFb/AO6f5V5m/wB4/WvTJP8AVv8A7p/lXmb/AHj9a9fiben8/wBDvzneHzLl3p0lpZWd009tIt0rMqRShnTBxhwOVP16il0/TJNRW6eOe1i+zQtMwnmWPeB/CufvN7Dmq8kE0UUckkTpHIMozKQG+h71CATwOa+Us2tGeIAFW9SsJNMv5bOSaCZ4yMyW8okRsjPDDg1W2N/cP5U08GqaYy7/AGc/9j/2l59t5fn+R5PnDzc7c7tnXb23dM0aZp76pqEdpHPbQNJnElzKI4xgE8seB0/Oq5t5vs/2jyn8ndt8zadu7rjPTNRUrN3sxAeuKt3dk9pHbO8sEguIRMBFKHKDJG1sfdbjoecEVW2N/cP5UbH/ALh/KnysLFuz06S9trudJ7aMWsfmMs0wRn5xhAfvH2HNUqdsb+6fyo2N/cP5U1FjsIDXv/g3wb4O8b+C0lHh2fT5lzGZ/MfLPjl0YnDDPbGAeK8C2N/cP5V3f/C2/Fq6HHpcMtvAqLsE0NuEfb2Ax8o+oANeZmeFxVenGOHfLJPe7X/Dlwst0c0/h6ZfEd3oou7JZbaSSMzSThIm2Z6MeOccetY1PKyeh/Km7G/un8q9GMJpa6kWLmoadJp0sUck9tMZYlmBt5hIFDdiR0Ydx1FFvpz3OnXl6s9siWuzdHJKFkfccfIp5bHfHQVU2P8A3T+VIQR1BFPllYLE9nbteXsNqkkUbSuEDysERcnGSTwB70Xds1neTWzSRSNE5QvEwdGwcZUjgj3qKON5ZFjjRndjhVUZJPoBRLG8UjRyIyOpwVYYIPoRS6iLVxp0ltptnetPbOt1v2xxyhpE2nHzqOVz2z1FGnafJqdy0Ec9tCVjaTdcTCNSAM4BPU+g71TCk9AaUqwGSpFHLKw7Dau6lp76ZcrBJPbTFo1k3W8wkUAjOCR39R1FUhUs1vNbOEmieNiAwDqQcHoeaBHQ+Ef9dc/7g/nXTyf6t/8AdNcx4R/11z/uD+ddPJ/q3/3TX3eTf8i9fM+ny7/dV8zzNvvH61cu9Ne0sbO6ae2dbpWZUimVnTBxh1HKn61Tb7x+tSvbzRRxyPFIkcgJRmUgNjrg96+FlufMMnsdOkv4rqRJ7aIW0RlYTTBC4HZAfvN7DmqWOaUZPAFLsb+4fyoSYFu/sW0zUpLOSaCZoyAZLeUSIeM8MODXfwf8e8X+4v8AKvNlVtw+U9fSvSYf+PeL/cX+VfT8NJqU7+R7WT/FP5DzRj2rB8Q6nd2EsK28mwMuT8oPf3rE/wCEi1P/AJ+B/wB8L/hXp4nOsPQqulOLbXodtbMaNKbhJO6Os1cf8Si64/grz01pTa7fzwvDJNlHGGG0c1m55r5nNsbTxdVTpqySPGx2JhiJqUFZFu8vrzUZ1mvbmW4lVAgeVyxCgYAyewrb8I/625/3R/OsfUr5L+5WWOytrQCNU8u3BCnA+8ck8nv2plnqNzYMzW8mwsMHgGuXL68cPXjVktEY4aqqVZTlsj0KT/Vv/un+VeZv94/WtX/hItTwR9o6jB+Qf4VlFsnNd+b5jSxrg6aenc6cwxcMS4uCtYsz313c21vbz3MskNupWGN3JWME5IUdgT6Ve8Nf8hmP/db+VVbu+jubKzgSytoWt1ZWmjB3zZOcvk4yOnAFWvDX/IZj/wB1v5VwZcv9qp6dV+ZzYX+ND1R2+PavPdX/AOQtdf8AXRv516EK891f/kLXX/XRv519LxKkqULdz184XuRGfb7v+zv7P+1TfY/M87yN52b8Y3bemccZ9Kk0n/kJ2v8A11X+Yo+3R/2P9g+xW3mef5v2vB83GMbM5xt79M571VileCVJIzhkIYH0Ir5KlJRmpNbM8KLtJNnpePajA9K4X/hI9T/5+B/3wv8AhR/wkep/8/A/74H+FfYriHCfyv7l/mfQLNqH8rO6x7UY9q4X/hI9T/5+B/3wP8KUeI9TLAfaB1/uD/Cn/rDhP5X9y/zD+1qH8r/A7nHtRj2pkR3QRk9SoJ/EVjeItSurAwC3k2bwc8A5r1sTiaeHo+2kro761aFKn7SS0NzHtRj2rhf+Ej1P/n4H/fA/wo/4SPU/+fgf98D/AAryf9YsJ/K/w/zOD+1qH8r/AAO5x7VjeKAP7JH/AF1H8jXP/wDCRan/AM9x/wB8D/CorvWL29hEU8u6MHONoHNcmNzvDV6EqcYtN+hjicyo1KThFO7KlvPNaXMdxBI8U0TB0kQ4ZWHIII6Gi5nmu7mS4uJHlmlYu8jnLMx5JJPU0+znW2vYZ3gjnWN1cxSglHwc4bB6H6ii8nW5vZp0gigWR2cRRAhEyc4XJJwPqa+V6nhnWeFh/wASlv8Arqf5Cr2rj/iUXX/XOqPhb/kEN/11P8hV/V/+QPd/9c/6193hUv7K/wC3WfTUUvqPyPPO9Wb2/vNRmWa9uZbiVUCB5XLEKOAMnsKrd6u6lfR39wsqWVtaBY1Ty7cEKcD7xyTye/NfCPc+ZNnwl/r7n/dH866eT/VP/umvPbPUbmwZjbybCwweAatnxDqeCPtAweD8g/wr6XL84oYbCqjJNvX+tz2MLmFOjR9nJO5lN95vrVme+u7m2t7ee5lkht1Kwxu5KxgnJCg9AT6VVzkk1eur6O5sbO3SytoGt1ZWmiBDzZOcvk4JHTgDivmnueOWvDX/ACGov91v5V2+OelecWl3NZTCaF9rjgHGetXT4i1PtcD/AL4H+FfQ5XmtDCUXTqRbd76HrYHHUqFNxmm3c7rHtRmuHXxFqe4ZuBj/AHF/wrtojuhjJ6lQT+VfRYHMqOLcvZRasevhcZDENqCtY5fxb/rbf/cP86yLkacNPtGt5Llr07/tKyKojXn5dhByeOuQMGtfxd/r7b/cP86yLjTnttPs71p7Z0ut+2NJg0ibTj51HK57Z6ivjs5t9dn6/ofPY/8A3mQacunvcsNSkuEh8tipt1Vm34+UEEjjPXvVHvU9ray3dwsMKb3boM4q8fDmp/8APAf99r/jXHSw1aouanFteSOeFGpNXjG5BqQ01blV0yS5kg8tSxuFVW34+YDBPGeneiNdP/suZpJLkagJFESKq+UU7ljnIP0GKn/4RzU/+fcf99r/AI0f8I5qf/PuP++1/wAa0+oYr+SX3Mv6tW/kf3FOxFo19CL5pktCw81oVDOF77QSBn6kVFN5fnv5JYxbjsLjnHbPvWj/AMI5qf8Az7j/AL7X/Gj/AIRzU/8An3H/AH2v+NH1DFf8+39zD6tW/kf3EF2unCytDaSXDXRVvtSyqoRWzxsIOSMeoFWvDX/IZj/3W/lTT4d1P/n3H/fa/wCNaWiaPe2WppNPDtQAgncPSuvAYLEQxMHKDsmuj7m+GoVVWi3F2v2OorzzV/8AkLXX/XRv516GOa47UNC1Ge/uJY4Mo7lgdw6Zr6DiGjUq04KnFuz6HqZrTnOMeVXM3Gm/2Pu8y5/tPz8bNi+V5W3rnOd2e2MYo0xdPbUIxqktylnz5jWyK0g4OMAkDrjv0qx/wjmp/wDPuP8Avtf8aP8AhHNT/wCfcf8Afa/418p9QxX8kvuZ4n1at/I/uMvv7VbuhYrHbfZHndzEDOJVACyZOQuDyuMcnB61ZHh3U/8An3H/AH2v+NUrqzmspvKnTY+M4zmoqYatTXNOLS9CJ0akFeUWiayXTWtrv7bJcpMIwbYQqpVnz/GScgY9MmqS/eH1q7Z6dJe215Ok9tGLWPeVmmCM/OMID94+wqkv3h9axjbmM0elwf6iL/cX+Vc14u+9a/Rq6WH/AFEX+4v8q5rxd961+jV91m//ACLn8vzR9Pj/APdH8jF0xNPa9C6pJcpa7Wy1sqs+cccEgYziqVXdM06TVL0Wsc9tCSrNvuZhGgwM9T3/AK1Sr4PS58wXtQXT1ki/s6S5eMxKZTcKqkSfxAYJ+X0PWi3GnHTrs3Mlyt6Nn2ZY0Uxtz828k5HHTANSQaHf3MKzRQ5jYcHcP8ak/wCEc1P/AJ9x/wB9j/GuqOBxMopqDa9DZYeq1dRf3FGzFs13ELt5Vti6+a0QBcLnnaDwTj1IFF4LdbuYWjytbB28ppQA5XPGQOAcehIq7/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjT+oYn+R/cx/Vq38j+43/C3/ACCW/wCup/kKv6v/AMga7/65/wBag0K0ms7BoZ12vv3dQeMCreowyXGmzxRjLsmFFfa4anNZbyNa2Z9FShJYPla1secd6u6kunLcL/ZslzJD5a7jcIqtvx82ApIxnp3qx/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjXxTwGKv/Df3M+d+rVv5H9xXjXT/AOzJmkkuRqAkAiRVXyinfJzkH8KjsRaNewi+eVLUuPNaFQzhe+0EgZ+pFXP+Ec1P/n3H/fa/40f8I5qf/PuP++1/xo+oYr/n3L7mH1at/I/uM+by/Pk8ksYtx2FxyR2z71Zu105bKzNpJctdFW+1LKqhFbPGwg5Ix6gVP/wjmp/8+4/77X/Gj/hHNT/59x/32v8AjR9QxX8j+5h9WrfyP7iCyXTTFdfbpLlJBETbCFFYNJ2D5IwvuMmqX8VaE+iX9tC00sOI16ncDis/HP8AjWNSjUpStUTT8zOdOUHaSsXNQWxXUZF0153tMjy2uFVZCPcKSOue9d/B/wAe8X+4v8q4C/sW03UZLR5oJmjIBkt5RIh4zww4Nd/B/wAe8X+4v8q+k4YtzT9Eevk/xT+Ry/i7/XW3+4f51gvbzRRRzPE6xyZ2OVIDY64Pet7xcf39v/uH+dYst/eXFpb2ktzLJb2+7yYmclY9xy20dBk+leTnH++z9f0OHMP95kW/Dv8AyG4P+BfyNd1n3rzFWKnI60pd/wC8fzrpy3OPqVJ0+S+t9zXB5h9Wg48t7npufejPvXmXmN/eP50eY394/nXof6z/APTv8f8AgHX/AGz/AHPx/wCAem596M+9eZeY398/nR5jf3j+dH+s/wD07/H/AIAf21/c/H/gHpufejPvXmXmN/fNHmN/eP50f6z/APTv8f8AgB/bX9z8f+Aem596M+9eZeY398/nR5jf3j+dP/Wf/p3+P/AD+2v7n4/8A9Nz70Z968y8xv7x/OjzH/vH86X+s/8A07/H/gB/bP8Ac/H/AIB6bu964vxT/wAhg/7i/wAqx97f3j+dNJJPJzXBmOc/XKSp8ltb7nLi8w+sQ5OWxJHbzTJI8cTusYy7KpIUep9KjX7w+tWLe/u7SGeG3uZoorhdkyRuVEi9cMB1H1qtXhrc809Mh/49ov8AcX+Vc14u+9a/Rv6VzQdv7xpCxPUk172Mzr6xh/Yclvn/AMA9PEZj7al7Llt8ySC3muZPLgieR8E7UUseOvSoe9WrK/vNOuRcWN1LbTgFRJC5RsEYIyPUVWNeCeYegaJ/yBrb/dP8zV8keteZb2Axkijex/iP519NQ4i9lTjT9neytv8A8A9mnm3JBR5L28/+Aem596M+9eZeY398/nR5jf3z+da/6zf9O/x/4Bf9tf3Px/4B6bn3oz715l5jf3j+dHmN/eP50f6z/wDTv8f+AH9s/wBz8f8AgHpufejPvXmXmN/fP50eY394/nR/rP8A9O/x/wCAH9tf3Px/4B6bn3oz715l5jf3z+dHmN/fNP8A1n/6d/j/AMAP7a/ufj/wD03PvRn3rzLzG/vH86PMb++aP9Zv+nf4/wDAD+2v7n4/8A7vX+dEuOfT+YrgzS729SaTNeHmWO+u1VU5baWPNxeJ+sTU7WJZIZrecxTRvHIpGUcYI/A16NB/x7xf7i/yrzy6vbrUb1rq9uJbi4kILyyuWZu3JPJr0OD/AI94v9xf5V6/DW9T5fqehk/xT+RzPi3Jnt8f3D/Osi5vkn0+ztVsreJrffunjB8ybccjeScHHQYA4rvpraCXBlhSQjgF1BxUP2Cz/wCfWH/vgVtjskqYnESqqSVzTE5bOrWclI4bTb2OwuWlksba7BjZNlwCVGRjIwRyO3aqRHtXo39n2f8Az6w/98Cj+z7P/n1h/wC+BXL/AKuVU/jX4nP/AGTP+ZHDalepf3Kyx2NtaARqnl26kKcDG45J5PfmlivUj0qayNlbvJJIri5YEyoB/CpzjB+hruPsFn/z6w/98Cl+wWf/AD6w/wDfApf6t1NudfiP+yKn8yOAsbhbO+huHtorlY3DGGcEo+OzYIOPxFRzP5szyCNUDMWCL0X2HtXoX9n2f/PrD/3wKP7Ps/8An1h/74FP/Vyrf41+If2RU/mRw93epc2VnbpZW8LW6srTRKQ82TnL5OCR04ApdPv0sI7pXsLW68+JogZ1JMRP8a4I+Ye+RXcf2fZ/8+sP/fApPsFn/wA+sP8A3wKn/Vup8POvxH/ZFT+ZHnIHtVvUrtb+/luo7SC0WTBEFuCI04xwCSffr3ru/wCz7P8A59Yf++BR/Z9n/wA+sP8A3wKr/Vyr/OvxJ/smf8yOG+3L/Y/2D7Dbb/P877XtPm4xjZnONvfpnPejS71NOv47mSxt7xUzmC5BMbZBHIBB4znr1Fd1/Z9n/wA+sP8A3wKT7BZ/8+sP/fApf6t1LW51r6j/ALIqfzI85x7Vbu7pbmO2RLWCDyYhGWiBBlIJO5sk/NzjjAwBXd/2fZ/8+sP/AHwKP7Ps/wDn1h/74FP/AFcq3+NfiL+yZ/zI4ezvUtLa7heyt7g3EexZJgS0POdyYIwfqDVaF/LmSQosgVgSjdGx2PtXoP8AZ9n/AM+sP/fAo/s+z/59Yf8AvgUf6uVb/GtfUP7Jn/Mjg9Qulvb6a5jtILVZG3CGAEInsASTj8ac92r6ZHZizt1dJWkNyAfMYEAbSc4wMZ6d67r7BZ/8+sP/AHwKX+z7P/n1h/74FL/Vupb41p6j/sip/MjhdMvV069FxJZW94ArL5VyCUORjPBByOvWqWD6V6P/AGfZ/wDPrD/3wKPsFn/z6w/98Cn/AKuVb351+If2RU/mRwuo3qX8sTpY29qI4ljK26kByP4jkn5j36Cltr1LfTry1ayt5XuNm2eRT5kO05+Qg456HIPFdz/Z9l/z6w/98Cj+z7L/AJ9Yf++BS/1bqfDzr8R/2PU/mRwFnMttewzvBFOsbhzFKCUfBzhsEHB+oou5xd3k06W8UAkcuIogQiZOcLkk4H1Nd/8A2fZ/8+sP/fAo/s+z/wCfWH/vgUf6uVd+dfiL+yKn8yOGub1LjTrS1Wyt4nt9+6eMHzJtxz85Jxx0GAOKTTb2OwuWlksba7BRk8u4BKjIxuGCOR25xXdfYLP/AJ9Yf++BR9gs/wDn1h/74FH+rdTbnX4j/sip/MjzjFXdSvVv7hZUsra0Cxqnl2ykKcDG45J5Pfmu5/s+z/59Yf8AvgUf2fZ/8+sP/fAp/wCrlX+dfiT/AGTP+ZHDR3qJpc1kbG3d5JFcXLA+agH8KnOMH6Go7G4Wzvobh7aK5WNwxhnBKPjs2CDj8RXff2fZ/wDPrD/3wKT7BZ/8+sP/AHwKX+rlT+da+o/7IqfzI89mfzJnlCLGGYkInRfYe1Wru9S5srSBbK3ga3VlaaJSHmyc5fJwSOnAHFdx/Z9n/wA+sP8A3wKP7Ps/+fWH/vgU3w5Vv8a09Rf2TP8AmRw9lepaR3SPZW1yZ4jGGmBJiJ/iTBHzfXIqlg+lejf2fZ/8+sP/AHwKPsFn/wA+sP8A3wKFw5Vu/fX4j/sip/MjhdQu1v8AUZLqOzgtFkIxBbqRGnGOAST2z1rvof8Aj3i/3B/KovsFn/z6w/8AfAqwQB8o6DgV6+U5ZPBOXNK97HfgcHKg5Xe5/9k=\"}]}"}],"term":"tag:\"games\"","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:\"games\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"games\"","","\"","games","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fa00\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4f960\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4ac80\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fdc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fbe0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fb40\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2d6d4faa0\u003e":"tag:\"games\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4faa0\u003e":"tag:\"games\""},"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:\"games\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"games\"","","\"","games","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fa00\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4f960\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4ac80\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fdc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fbe0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2d6d4fb40\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2d6d4faa0\u003e":"tag:\"games\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2d6d4faa0\u003e":"tag:\"games\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1246,"difficulty_rating":"easy"},{"id":1245,"difficulty_rating":"easy"},{"id":44850,"difficulty_rating":"easy"},{"id":44851,"difficulty_rating":"easy"},{"id":60780,"difficulty_rating":"easy-medium"},{"id":53850,"difficulty_rating":"easy-medium"},{"id":1339,"difficulty_rating":"easy-medium"},{"id":44657,"difficulty_rating":"easy-medium"},{"id":46072,"difficulty_rating":"easy-medium"},{"id":46006,"difficulty_rating":"easy-medium"},{"id":1182,"difficulty_rating":"easy-medium"},{"id":43652,"difficulty_rating":"easy-medium"},{"id":1481,"difficulty_rating":"easy-medium"},{"id":1276,"difficulty_rating":"medium"},{"id":1279,"difficulty_rating":"medium"},{"id":3690,"difficulty_rating":"medium"},{"id":47463,"difficulty_rating":"medium"},{"id":54214,"difficulty_rating":"medium"},{"id":54275,"difficulty_rating":"medium"},{"id":1231,"difficulty_rating":"medium"},{"id":44658,"difficulty_rating":"medium"},{"id":2026,"difficulty_rating":"medium"},{"id":45967,"difficulty_rating":"medium"},{"id":1698,"difficulty_rating":"medium"},{"id":1982,"difficulty_rating":"medium"},{"id":2004,"difficulty_rating":"medium"},{"id":2005,"difficulty_rating":"medium"},{"id":54010,"difficulty_rating":"medium"},{"id":53780,"difficulty_rating":"medium"},{"id":53840,"difficulty_rating":"medium"},{"id":892,"difficulty_rating":"medium"},{"id":44288,"difficulty_rating":"medium"},{"id":1238,"difficulty_rating":"medium"},{"id":1241,"difficulty_rating":"medium"},{"id":47453,"difficulty_rating":"medium-hard"},{"id":2085,"difficulty_rating":"medium-hard"},{"id":821,"difficulty_rating":"medium-hard"},{"id":1260,"difficulty_rating":"medium-hard"},{"id":45270,"difficulty_rating":"medium-hard"},{"id":1244,"difficulty_rating":"medium-hard"},{"id":54149,"difficulty_rating":"medium-hard"},{"id":47478,"difficulty_rating":"hard"},{"id":47473,"difficulty_rating":"hard"},{"id":59132,"difficulty_rating":"hard"},{"id":59137,"difficulty_rating":"hard"},{"id":47468,"difficulty_rating":"hard"},{"id":937,"difficulty_rating":"hard"},{"id":1254,"difficulty_rating":"unrated"},{"id":1255,"difficulty_rating":"unrated"},{"id":1313,"difficulty_rating":"unrated"}]}}