{"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":60591,"title":"ICFP2024 001: Lambdaman 6","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\r\nThis maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB. SF B$ B$ L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\" Sl I#,\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\r\nB. S3/,6%},!-\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\r\n\r\nThis challenge is to return a string of 199 'R's with minimal matlab program size.\r\n\r\nAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.","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: 537px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 268.5px; transform-origin: 407px 268.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 365px 8px; transform-origin: 365px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\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: 301px 8px; transform-origin: 301px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \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: 331px 8px; transform-origin: 331px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 331px 8px; transform-origin: 331px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. SF B$ B$ L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\" Sl I#,\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 294px 8px; transform-origin: 294px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\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: 235.5px 8px; transform-origin: 235.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. S3/,6%},!-\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 250px 8px; transform-origin: 250px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of 199 'R's with minimal matlab program size.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman6(m)\r\n% m is a maze where '.' is a power-dot to eat, L is Lambdaman the token being moved, \r\n% '#' is a wall, and Linefeed(ascii 10) is right edge of maze\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman6 is a string of 199 R characters, char(82*ones(1,199))\r\n v='R';\r\nend\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nm=['L' char(46*ones(1,199))]; % 46 is .\r\nv = Lambdaman6(m)\r\nvd=double(v); % keep only L-76 R-82\r\nvd(vd\u003e82)='';vd(vd\u003c76)=''; vd(vd\u003e76 \u0026 vd\u003c82)=''; % Remove non-operable characters\r\nvalid=0;\r\nidx=1;\r\nmc=[0 ones(1,199)];\r\nfor i=1:length(vd)\r\n if vd(i)==82 % R\r\n  idx=idx+1;\r\n  mc(idx)=0;\r\n  if idx==200,break;end\r\n else % must be 76 L\r\n  if idx\u003e1\r\n   idx=idx-1;\r\n   mc(idx)=0;\r\n  end\r\n end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nend\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-09T15:15:26.000Z","deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T13:32:16.000Z","updated_at":"2026-03-31T11:17:56.000Z","published_at":"2024-07-09T15:15:26.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. SF B$ B$ L\\\" B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L$ L# ? B= v# I\\\" v\\\" B. v\\\" B$ v$ B- v# I\\\" Sl I#,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. S3/,6%},!-\\\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of 199 'R's with minimal matlab program size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\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":60608,"title":"ICFP2024 006: Lambda 21 - 3D","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\" B/ v# I% BT I\" BD B% v# I% Sl~aF   in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, a=\u003e#, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\r\nB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\" BD B% vp I% SO\u003eLF\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\n Lambdaman21 was solved by Thirteen Team using tools. ThirteenTeam youtube ICFP2024\r\nThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.","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: 607px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 303.5px; transform-origin: 407px 303.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 338.5px 8px; transform-origin: 338.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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.5px 8px; transform-origin: 206.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\" B/ v# I% BT I\" BD B% v# I% Sl~aF   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, a=\u0026gt;#, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 366px 8px; transform-origin: 366px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\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: 360px 8px; transform-origin: 360px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\" BD B% vp I% SO\u0026gt;LF\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 100px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 50px; text-align: left; transform-origin: 384px 50px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 100px;height: 100px\" src=\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\" data-image-state=\"image-loaded\" width=\"100\" height=\"100\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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.5px 8px; transform-origin: 182.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=Xcm3S9VlqqY\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eThirteenTeam youtube ICFP2024\u003c/span\u003e\u003c/span\u003e\u003c/a\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v=Lambdaman21(m)\r\n%Manual sequence created using a display like ThirteenTeam\r\n%Draw paths from Top edge, right edge and left edge\r\n U='U';D='D';L='L';R='R';\r\n U2=repelem(U,199);\r\n D2=repelem(D,199);\r\n L2=repelem(L,199);\r\n R2=repelem(R,199);\r\n DUR=[D2 U2 R]; % Top edge\r\n LRD=[L2 R2 D]; % Right edge\r\n RLU=[R2 L2 U]; % Left edge Up\r\n RLD=[R2 L2 D]; % Left edge Down\r\n D95=repelem(D,95);\r\n D37=repelem(D,37);\r\n L100=repelem(L,100);\r\n U136=repelem(U,136);\r\n R15=repelem(R,15);\r\n R12=repelem(R,12);\r\n \r\n TE=repmat(DUR,1,200);\r\n RE=[D95 L2 D2 repmat(RLU,1,80) D37 R2 D repmat(LRD,1,104)];\r\n BE=[L100 U136 repmat(LRD,1,85) D D L2];\r\n LE=[repmat(RLU,1,90) D R15 repmat(DUR,1,21) repmat(RLD,1,5)];\r\n B3=[D37 D D R12 repmat(DUR,1,15) D37 repmat(RLU,1,6) ];\r\n v=[U2 L2 TE RE BE LE B3];\r\nend % Lambdaman21","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\nms=['........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'.................................##################.....................................................................................................................................................'\r\n'...........................#############################................................................................................................................................................'\r\n'.....................######################################............................................#########################################........................................................'\r\n'.................#############################################.........................................################################################.................................................'\r\n'...............################################################........................................####################################################.............................................'\r\n'...............##################################################......................................########################################################.........................................'\r\n'...............####################################################....................................###########################################################......................................'\r\n'...............#####################################################...................................#############################################################....................................'\r\n'...............######################################################..................................###############################################################..................................'\r\n'...............#######################################################.................................#################################################################................................'\r\n'...............########################################################................................###################################################################..............................'\r\n'...............####################............#########################...............................####################################################################.............................'\r\n'...............##############.......................####################...............................#####################################################################............................'\r\n'...............##########.............................###################..............................##############........................#################################..........................'\r\n'...............######...................................##################.............................##############...............................###########################.........................'\r\n'...............###.......................................#################.............................##############...................................########################........................'\r\n'..........................................................#################............................##############.....................................#######################.......................'\r\n'...........................................................################............................##############........................................#####################......................'\r\n'............................................................###############............................##############..........................................####################.....................'\r\n'.............................................................###############...........................##############...........................................###################.....................'\r\n'.............................................................###############...........................##############.............................................##################....................'\r\n'..............................................................##############...........................##############..............................................##################...................'\r\n'..............................................................##############...........................##############...............................................#################...................'\r\n'..............................................................##############...........................##############................................................#################..................'\r\n'..............................................................##############...........................##############.................................................################..................'\r\n'...............................................................#############...........................##############..................................................################.................'\r\n'...............................................................#############L..........................##############..................................................################.................'\r\n'...............................................................#############...........................##############...................................................################................'\r\n'...............................................................#############...........................##############...................................................################................'\r\n'...............................................................#############...........................##############....................................................################...............'\r\n'...............................................................#############...........................##############....................................................################...............'\r\n'..............................................................##############...........................##############.....................................................###############...............'\r\n'..............................................................##############...........................##############.....................................................################..............'\r\n'..............................................................##############...........................##############......................................................###############..............'\r\n'.............................................................##############............................##############......................................................###############..............'\r\n'.............................................................##############............................##############......................................................###############..............'\r\n'............................................................##############.............................##############.......................................................###############.............'\r\n'............................................................##############.............................##############.......................................................###############.............'\r\n'...........................................................##############..............................##############.......................................................###############.............'\r\n'..........................................................###############..............................##############.......................................................###############.............'\r\n'........................................................################...............................##############........................................................##############.............'\r\n'.......................................................################................................##############........................................................###############............'\r\n'....................................................##################.................................##############........................................................###############............'\r\n'................................................#####################..................................##############........................................................###############............'\r\n'..............................######################################...................................##############........................................................###############............'\r\n'..............................#####################################....................................##############........................................................###############............'\r\n'..............................###################################......................................##############........................................................###############............'\r\n'..............................#################################........................................##############........................................................###############............'\r\n'..............................##############################...........................................##############........................................................###############............'\r\n'..............................##############################...........................................##############.........................................................##############............'\r\n'..............................#################################........................................##############...................................................................................'\r\n'..............................####################################.....................................##############.........................................................##############............'\r\n'..............................#####################################....................................##############.........................................................##############............'\r\n'..............................#######################################..................................##############.........................................................##############............'\r\n'..............................########################################.................................##############.........................................................##############............'\r\n'...............................................########################................................##############.........................................................##############............'\r\n'....................................................####################...............................##############........................................................###############............'\r\n'......................................................###################..............................##############........................................................###############............'\r\n'........................................................##################.............................##############........................................................###############............'\r\n'..........................................................#################............................##############........................................................###############............'\r\n'...........................................................################............................##############........................................................###############............'\r\n'............................................................################...........................##############........................................................###############............'\r\n'.............................................................###############...........................##############........................................................###############............'\r\n'..............................................................###############..........................##############........................................................###############............'\r\n'...............................................................##############..........................##############........................................................##############.............'\r\n'...............................................................###############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############.....................................................################..............'\r\n'.................................................................##############........................##############.....................................................###############...............'\r\n'.................................................................##############........................##############....................................................################...............'\r\n'.................................................................##############........................##############....................................................################...............'\r\n'.................................................................##############........................##############...................................................################................'\r\n'.................................................................##############........................##############...................................................################................'\r\n'.................................................................##############........................##############..................................................################.................'\r\n'................................................................##############.........................##############..................................................################.................'\r\n'................................................................##############.........................##############.................................................################..................'\r\n'................................................................##############.........................##############................................................#################..................'\r\n'...............................................................###############.........................##############...............................................#################...................'\r\n'...............................................................###############.........................##############..............................................##################...................'\r\n'..............................................................###############..........................##############.............................................##################....................'\r\n'..............................................................###############..........................##############...........................................###################.....................'\r\n'.............................................................################..........................##############..........................................###################......................'\r\n'............##..............................................################...........................##############........................................#####################......................'\r\n'............###............................................#################...........................##############.....................................#######################.......................'\r\n'............######.......................................##################............................##############...................................########################........................'\r\n'............########....................................##################.............................##############...............................###########################.........................'\r\n'............###########...............................####################.............................##############........................#################################..........................'\r\n'............###############........................######################..............................#####################################################################............................'\r\n'............#####################............###########################...............................####################################################################.............................'\r\n'............###########################################################................................##################################################################...............................'\r\n'............##########################################################.................................#################################################################................................'\r\n'............#########################################################..................................###############################################################..................................'\r\n'............########################################################...................................#############################################################....................................'\r\n'............######################################################.....................................##########################################################.......................................'\r\n'............#####################################################......................................########################################################.........................................'\r\n'..............#################################################........................................####################################################.............................................'\r\n'.................############################################..........................................################################################.................................................'\r\n'....................######################################.............................................#########################################........................................................'\r\n'.........................#############################..................................................................................................................................................'\r\n'..............................###################.......................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'];\r\n\r\nsize(ms)\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nv = Lambdaman21(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman10 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nadd 45 rows above\r\n.................................##################.....................................................................................................................................................\r\n...........................#############################................................................................................................................................................\r\n.....................######################################............................................#########################################........................................................\r\n.................#############################################.........................................################################################.................................................\r\n...............################################################........................................####################################################.............................................\r\n...............##################################################......................................########################################################.........................................\r\n...............####################################################....................................###########################################################......................................\r\n...............#####################################################...................................#############################################################....................................\r\n...............######################################################..................................###############################################################..................................\r\n...............#######################################################.................................#################################################################................................\r\n...............########################################################................................###################################################################..............................\r\n...............####################............#########################...............................####################################################################.............................\r\n...............##############.......................####################...............................#####################################################################............................\r\n...............##########.............................###################..............................##############........................#################################..........................\r\n...............######...................................##################.............................##############...............................###########################.........................\r\n...............###.......................................#################.............................##############...................................########################........................\r\n..........................................................#################............................##############.....................................#######################.......................\r\n...........................................................################............................##############........................................#####################......................\r\n............................................................###############............................##############..........................................####################.....................\r\n.............................................................###############...........................##############...........................................###################.....................\r\n.............................................................###############...........................##############.............................................##################....................\r\n..............................................................##############...........................##############..............................................##################...................\r\n..............................................................##############...........................##############...............................................#################...................\r\n..............................................................##############...........................##############................................................#################..................\r\n..............................................................##############...........................##############.................................................################..................\r\n...............................................................#############...........................##############..................................................################.................\r\n...............................................................#############L..........................##############..................................................################.................\r\n...............................................................#############...........................##############...................................................################................\r\n...............................................................#############...........................##############...................................................################................\r\n...............................................................#############...........................##############....................................................################...............\r\n...............................................................#############...........................##############....................................................################...............\r\n..............................................................##############...........................##############.....................................................###############...............\r\n..............................................................##############...........................##############.....................................................################..............\r\n..............................................................##############...........................##############......................................................###############..............\r\n.............................................................##############............................##############......................................................###############..............\r\n.............................................................##############............................##############......................................................###############..............\r\n............................................................##############.............................##############.......................................................###############.............\r\n............................................................##############.............................##############.......................................................###############.............\r\n...........................................................##############..............................##############.......................................................###############.............\r\n..........................................................###############..............................##############.......................................................###############.............\r\n........................................................################...............................##############........................................................##############.............\r\n.......................................................################................................##############........................................................###############............\r\n....................................................##################.................................##############........................................................###############............\r\n................................................#####################..................................##############........................................................###############............\r\n..............................######################################...................................##############........................................................###############............\r\n..............................#####################################....................................##############........................................................###############............\r\n..............................###################################......................................##############........................................................###############............\r\n..............................#################################........................................##############........................................................###############............\r\n..............................##############################...........................................##############........................................................###############............\r\n..............................##############################...........................................##############.........................................................##############............\r\n..............................#################################........................................##############...................................................................................\r\n..............................####################################.....................................##############.........................................................##############............\r\n..............................#####################################....................................##############.........................................................##############............\r\n..............................#######################################..................................##############.........................................................##############............\r\n..............................########################################.................................##############.........................................................##############............\r\n...............................................########################................................##############.........................................................##############............\r\n....................................................####################...............................##############........................................................###############............\r\n......................................................###################..............................##############........................................................###############............\r\n........................................................##################.............................##############........................................................###############............\r\n..........................................................#################............................##############........................................................###############............\r\n...........................................................################............................##############........................................................###############............\r\n............................................................################...........................##############........................................................###############............\r\n.............................................................###############...........................##############........................................................###############............\r\n..............................................................###############..........................##############........................................................###############............\r\n...............................................................##############..........................##############........................................................##############.............\r\n...............................................................###############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############.....................................................################..............\r\n.................................................................##############........................##############.....................................................###############...............\r\n.................................................................##############........................##############....................................................################...............\r\n.................................................................##############........................##############....................................................################...............\r\n.................................................................##############........................##############...................................................################................\r\n.................................................................##############........................##############...................................................################................\r\n.................................................................##############........................##############..................................................################.................\r\n................................................................##############.........................##############..................................................################.................\r\n................................................................##############.........................##############.................................................################..................\r\n................................................................##############.........................##############................................................#################..................\r\n...............................................................###############.........................##############...............................................#################...................\r\n...............................................................###############.........................##############..............................................##################...................\r\n..............................................................###############..........................##############.............................................##################....................\r\n..............................................................###############..........................##############...........................................###################.....................\r\n.............................................................################..........................##############..........................................###################......................\r\n............##..............................................################...........................##############........................................#####################......................\r\n............###............................................#################...........................##############.....................................#######################.......................\r\n............######.......................................##################............................##############...................................########################........................\r\n............########....................................##################.............................##############...............................###########################.........................\r\n............###########...............................####################.............................##############........................#################################..........................\r\n............###############........................######################..............................#####################################################################............................\r\n............#####################............###########################...............................####################################################################.............................\r\n............###########################################################................................##################################################################...............................\r\n............##########################################################.................................#################################################################................................\r\n............#########################################################..................................###############################################################..................................\r\n............########################################################...................................#############################################################....................................\r\n............######################################################.....................................##########################################################.......................................\r\n............#####################################################......................................########################################################.........................................\r\n..............#################################################........................................####################################################.............................................\r\n.................############################################..........................................################################################.................................................\r\n....................######################################.............................................#########################################........................................................\r\n.........................#############################..................................................................................................................................................\r\n..............................###################.......................................................................................................................................................\r\nadd 50 rows below\r\n%}\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-12T05:01:51.000Z","deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-11T16:20:17.000Z","updated_at":"2026-03-11T08:39:22.000Z","published_at":"2024-07-12T05:01:52.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L\\\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\\\" B/ v# I% BT I\\\" BD B% v# I% Sl~aF   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, a=\u0026gt;#, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\\\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\\\" BD B% vp I% SO\u0026gt;LF\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003cw:r\u003e\u003cw:t\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=Xcm3S9VlqqY\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eThirteenTeam youtube ICFP2024\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\u003eThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.\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.gif\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":60638,"title":"ICFP2024 009: Lambdaman Crawler-Backfill","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\r\n\r\nThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.","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: 696px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 348px; transform-origin: 407px 348px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 371px 8px; transform-origin: 371px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [pathbest]=crawler_fill(m)\r\n% This is not crawler_fill_optimal\r\n% Grab UDLR adj2\r\n% Grab UDLR adj3 if no 2s\r\n% Backfill L spot if 3 adj are Wall 0\r\n% No optimal path selection when at intersection of 2s\r\n%Crawler with backfill will solve non-loop mazes, but not guaranteed min moves\r\n%Crawler UDLR score 394\r\n %crawler 1/15 2/33 3/Fail 4/394/.09s 5/Fail 6/199/.09 7/Fail 8/4899/.21s 9/2500/.12  10/Fail\r\n %11[103x103]/9988/.33s\r\n % 12[101x101]/9992  13/9976 14/9994 15[101x101]/9986/.33s Big Unique solutions\r\n % 16[129x129]/8190/.34s 17[141x100]/Fail 18[163x290]/Fail 19[257x?] 20[256x?] 21[200x200]\r\n\r\n pathbest='';\r\n pathv=zeros(10000,1); pathvptr=0;\r\n \r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr]; % UDLR 1234\r\n \r\n% zmap=[0 0 0;1 0 0;0 1 0;0 0 1]; \r\n% figure(1);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n \r\n Lidx=find(m==1);\r\n% ztic=tic;\r\n while nnz(m==2)\u003e0\r\n%  if toc(ztic)\u003e1\r\n%    fprintf('ztic Timeout\\n');\r\n%    break;\r\n%  end\r\n  \r\n  vadj=m(adj+Lidx);\r\n  m(Lidx)=3;\r\n  if nnz(vadj==0)==3\r\n   m(Lidx)=0; % cul-de-sac  Backfill\r\n  end\r\n  \r\n  if nnz(vadj==2)\u003e0\r\n   ptr=find(vadj==2,1,'first');\r\n  else % only 3s adj\r\n   ptr=find(vadj==3,1,'first');\r\n  end\r\n  Lidx=Lidx+adj(ptr);\r\n  m(Lidx)=1;\r\n  pathvptr=pathvptr+1;\r\n  pathv(pathvptr)=ptr;\r\n  \r\n%   if mod(pathvptr,100)==0\r\n%    figure(2);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n%    pause(0.05);\r\n%   end\r\n  \r\n end % while m==2\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(pathv(1:pathvptr));\r\n \r\n %if nnz(m==2)\u003e0\r\n % fprintf('BestPath:');fprintf('%s',pathbest);fprintf(' Uneaten:%i\\n',nnz(m==2));fprintf('\\n')\r\n %else\r\n % fprintf('Solved Path:');fprintf('%s',pathbest);fprintf('\\nLength:%i\\n',length(pathbest));\r\n %end\r\n \r\n%figure(4);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n \r\nend % crawler_fill\r\n\r\n","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=400 % Lambda4\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=400 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26\r\n ms=[ ...\r\n      'L...#.'\r\n      '#.#.#.'\r\n      '##....'\r\n      '...###'\r\n      '.##..#'\r\n      '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=40 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=40 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 9  optimal solution L2499 50x50 L in top lesft\r\n ms=repmat('.',50,50);\r\n ms(1)='L';\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=2500 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=2500 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 11[103x103]/9988/.33s\r\n%Lambdaman 11  optimal solution ?\r\n ms=[ ...\r\n'#####################################################################################################'\r\n'#.#.....#.......#.#.......#...#...#.......#...#.......#.#.......#...#.....#.....#.....#.......#.....#'\r\n'#.###.###.#####.#.###.###.#.###.#.#.#######.#######.###.#.###.###.#####.#.###.#######.#.#.#########.#'\r\n'#...#.#.....#.....#.....#...#...#.....#.........#.#.......#...#.........#.....#...#.#...#.#.........#'\r\n'#.###.###.###.#.#########.#.#.###.#.#.#.###.#.###.###.#################.#######.#.#.###.###.#.###.###'\r\n'#.#.#.....#...#...#.#.#...#.#.#...#.#.#...#.#.#...........#.....#.......#.#.#...#.#.........#...#...#'\r\n'#.#.###.###.#######.#.#.#######.#####.#.#.###.###.#.#####.#####.#.###.#.#.#.###.#.#.#####.#####.#####'\r\n'#.......#.#.#.....#.........#.....#...#.#...#...#.#.#...#.#...#.#...#.#.#.....#.#.....#.....#.#.....#'\r\n'#####.#.#.###.#.###.#.###.#.#.#######.#.#.###.###.#.#.#######.#.###.#####.###.###.#.#.#.###.#.#.###.#'\r\n'#...#.#.#...#.#...#.#...#.#.......#.#.#.#.#.#...#.#.#.......#.......#.....#...#.#.#.#.#.#.....#.#.#.#'\r\n'###.###.#.###.#####.#######.#.#####.#.#.###.#######.#####.#.#####.#.#.#.#####.#.#.###########.#.#.###'\r\n'#...#.........#.........#.#.#.#...#.........#.........#.#.#...#...#...#...#...#.#...#...#.....#.....#'\r\n'###.#.#.#.###.#####.#.###.###.###.###.#############.###.#####.###.###.###.#.###.###.#.###.#########.#'\r\n'#.#...#.#.#...#.....#.#.....#.#.#...#.....#...#...#.#.............#...#...#.#.....#.#...#.........#.#'\r\n'#.###.###.###.###.#####.###.#.#.###.###.###.#####.#.#.###.#############.###.#####.#.#.###.#####.#####'\r\n'#.....#.....#.........#.#.....#...#.........#.#.#...#...#.......#...#.#.#...#...#.....#.....#.......#'\r\n'#.#.###.###.#.#.#################.#.#####.###.#.#.#.#.#####.###.###.#.#######.###.#####.#.###.###.###'\r\n'#.#.#.#.#...#.#...#...#...#...#.......#...#.#...#.#.#.....#.#...#.....#...........#.....#.#.#...#.#.#'\r\n'#.###.###.#.#######.###.#####.#.###.#.#.###.#.###.#############.###.###.###.###.###########.#.#.###.#'\r\n'#.#.....#.#.#.....#.#.......#.#...#.#.#.#...#.......#.#.....#.#.#.....#.#.....#.#.......#...#.#.#.#.#'\r\n'#.###.#######.#####.#.###.###.#.###.#.#####.#.#.#####.###.###.#.#.#######.#####.#.###.###.###.#.#.#.#'\r\n'#.#...#...#.....#.#...#...#.#.#.#...#.#.#.....#.#...#.....#...#.#.....#...#.......#.........#.#.....#'\r\n'###.#.###.#.#.###.#.#.#.#.#.#.###.#####.###.#.#####.###.#.#.###.#####.###.#.###.#######.###########.#'\r\n'#...#.#.#...#...#...#.#.#...#.#.#.#.........#.#...#...#.#.............#...#.#.......#.....#.....#.#.#'\r\n'###.###.#.###.#####.#######.#.#.#.#######.###.#.#####.#.#.#####.###.#.#.###########.#########.#.#.###'\r\n'#...#.#...#.#.#.#...#.....#.....#.......#...#.#...#.....#.#...#...#.#.#.#...#.#.#.....#.....#.#.....#'\r\n'#.###.#.###.#.#.#.#####.###.#####.#.#.#####.###.#####.#####.#######.#######.#.#.#####.#.#.###.#.#.#.#'\r\n'#.....#.#.#...#.#.....#...#...#.#.#.#.......#...............#.....#...#.....#.........#.#...#.#.#.#.#'\r\n'#.###.###.###.#.#.#.###.#####.#.#.#######.#.###########.###.#.#########.#.#########.#.#.###########.#'\r\n'#.#.#...#.#.......#.#...#...#L#.......#.#.#.....#...#...#.#.#.#...#.#...#...#.#.....#.....#.....#.#.#'\r\n'#.#.###.#.#####.###.###.###.#.#.###.###.###########.#.###.###.###.#.#.#######.###.###.#.#####.###.#.#'\r\n'#.#...........#.#.....#.#.#...#...#.#...#.......#.#.#...........#.....#.#.......#.#...#.#.....#.#...#'\r\n'###.###.###.###.###.###.#.#.###.#####.#.#.#.#####.#.#.#########.#.###.#.#.#.#.#####.#########.#.#.###'\r\n'#...#...#.#...#.#...#.#.#.....#.....#.#.#.#.............#.#.....#.#.#.....#.#.#.........#.#.....#...#'\r\n'#######.#.#########.#.#.###.#####.###.###.#######.#####.#.#####.###.#.###.###.#.###.#.###.###.#.#.###'\r\n'#.....#.........#...#.......#...#.#.......#.#...#.#...........#.#.....#.....#.#.#.#.#.....#...#.....#'\r\n'###.###.###.#.###.#.#.#####.###.#.#####.###.###.#.###.#.#.#.#######.#####.###.###.#.###.#####.#.#####'\r\n'#.#...#.#...#.#...#.#.#...#...#.......#.....#.......#.#.#.#...#.......#.....#.#...#...#...#.#.#.....#'\r\n'#.#.#######.###.#########.#.###.#####.###.#.#.#######.#######.#.#.#.#######.#####.#.#.#.#.#.#######.#'\r\n'#.#.......#.....#.....#.....#...#.......#.#.#...#.....#.#...#...#.#.....#.#.#...#...#.#.#...#.#...#.#'\r\n'#.#.#.###.#####.#.#######.#####.#############.#########.###.#.#########.#.#####.#.###.#.#####.#.#.#.#'\r\n'#.#.#.#.#.#.....#.....#.....#.................#...#.....#.........#.........#...#.#...#.........#...#'\r\n'#.###.#.#.#.#.###.###.###############.###.#####.#.#####.#.#.###.#########.###.#####.###.###.#.#######'\r\n'#...#.#.....#...#.#...#.#.........#.....#...#.#.#...#...#.#.#...#...#...#.#.#.#.#.#.#.#.#...#...#...#'\r\n'#.###.###.###.###.###.#.#.###.#.###.#######.#.#.#.#.###.#.#######.#.#.#.###.#.#.#.###.#.#####.#.#.###'\r\n'#.......#.#...#.#...#...#.#.#.#.........#.....#.#.#...#...#...#.#.#...#.#.......#.#.#.......#.#.#...#'\r\n'#.###.###.###.#.#.#####.###.#.###.#.#.###.###########.#.#####.#.#.###.###.#####.#.#.#.#####.###.#.#.#'\r\n'#...#.#.#.#...#...#.....#.#...#...#.#...#.#.........#...#...........#.....#.#...#.........#...#...#.#'\r\n'#.#.###.###.#######.#####.#.###############.#.#.###.#.###.#########.#######.#.#########.###.#####.###'\r\n'#.#.#.........#.#.....#.#.#.#.#...#...#.#.#.#.#...#...........#.#...#.#...........#...#...#...#.....#'\r\n'#####.#########.#.###.#.#.#.#.#.#.###.#.#.#.###############.###.#.###.#####.#.#.#####.#.#######.#.###'\r\n'#.........#.......#...#.......#.#.#...#.......#.....#.....#.#...#.....#.#...#.#.#...........#...#.#.#'\r\n'###.###.#######.###.#####.#####.#.#.#.###.#.###.###.#.#####.#.#####.#.#.#.#.#####.#####.#.#.#####.#.#'\r\n'#.....#.#.#.......#...#.#.....#.#...#...#.#...#.#.#.#.....#.#...#...#...#.#.......#.....#.#...#.....#'\r\n'###.#.###.#.###.#.#####.#.#########.###########.#.###.#########.#######.#########.#####.###########.#'\r\n'#...#.......#...#.....#.#.#.#.#.#.......#...#...#...#.....#...#.#.#...#.......#...#...#.#.......#...#'\r\n'#.#.#########.#.#.#.###.#.#.#.#.#.#.#####.#####.###.###.#####.#.#.###.#.###.###.#.#.#.###.###.###.#.#'\r\n'#.#...#.#.#...#.#.#.........#.#.#.#.#...#...........#.....#.#.#...#...#...#.#.#.#...#...#.#.#.#...#.#'\r\n'#.#####.#.###.#.#######.#.#.#.#.#.###.#######.###.###.#.#.#.#.#.#####.#######.#.###########.#.#####.#'\r\n'#.#.#.#.......#.#.......#.#.#.#...#.......#.....#...#.#.#.#.#...#.#.......#...#.#.....#.#.....#.....#'\r\n'###.#.#####.###########.###.#.#.#.#######.#.###.#.###.#.###.#.###.###.###.#.#.###.#####.#####.#.#.###'\r\n'#.....#.#.#...#.....#...#.#.....#.#.....#...#...#.#.#.#.....#.......#...#...#...#.#.......#.....#.#.#'\r\n'#.#####.#.#.#.#.###.###.#.#.#######.#####.#####.###.#.#######.#######.#.#####.###.#######.#####.###.#'\r\n'#.#...#.#...#...#...#.....#.....#.#.#.#.......#.....#...#.....#...#...#.#.#.#...#...#.#.....#.......#'\r\n'#.###.#.#.#.#.#####.#.#.###.#####.#.#.###.#.###.#######.#.#.#####.#####.#.#.#####.###.#.#.###.#.###.#'\r\n'#.......#.#.#.#.#...#.#.#.......#.#.......#.#.#.......#...#.#.#.#.#...#...............#.#.#...#...#.#'\r\n'#.#####.#.#####.#.#####.#.#.#####.###.#######.###.#.###.#.###.#.#.###.#####.#####.#######.###.#######'\r\n'#.#.#.#.........#...#.#.#.#...#.....#.#...#.....#.#...#.#.#...#.#...#...#...#.#...#.......#.......#.#'\r\n'###.#.#.#####.#######.###.###.#.#####.#.###.###.#.#.###.###.#.#.#.#.###.###.#.#######.###.#.#.###.#.#'\r\n'#.........#.....#.......#.#...#...........#...#...#...#...#.#.....#.#.........#.#.....#.#...#...#...#'\r\n'###.#####.#.#.#####.#####.#############.###.###.#####.#.#########.#########.###.#####.#.#.#######.#.#'\r\n'#...#.....#.#.#...#.#...#.....#...#.#.#...#.#.....#...#.........#...#.#.#...#.#.#.#.#.#...#.#.#.#.#.#'\r\n'###.###.###.#.###.#.#.###.#.#####.#.#.#########.###.###.###.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#'\r\n'#.#.#...#...#.#...#.....#.#.#.....#.....#.#...#.#.#.....#...#...#.......#.....#.#.....#.#.#.......#.#'\r\n'#.#####.#.#######.#.#.###.#.#.#.#.#####.#.#.#####.#.#########.#######.#####.###.#.#.#.#.#.#.#####.###'\r\n'#.....#.#.#...#...#.#.....#...#.#...#.#...#...#.#...#...........#.#.....#...#...#.#.#.#.#...#.#...#.#'\r\n'#.#.#####.#.###.###.#.#.#####.#######.#.###.###.#.#######.#####.#.#.#######.#.#####.#.#.#####.#.###.#'\r\n'#.#...#.#.#.#.#.#...#.#.#.............#.#.....#.....#.#...#.....#.#.....#.#...#.#.#.#...#.#...#.....#'\r\n'#.#.#.#.#.#.#.#.#####.###.#####.#######.#####.#.#####.#####.###.#.###.#.#.#.###.#.#####.#.###.#.###.#'\r\n'#.#.#.#...#...#.#.....#.#...#...#.#.#...#.....#...#.#.#.......#.....#.#...........#.......#.......#.#'\r\n'#.###.###.###.#.#.#####.#####.#.#.#.###.###.#####.#.#.#.###.#.#######.###.###.#.###.#####.#.###.###.#'\r\n'#...#.#.#.#.......#.......#.#.#.#...............#...#.#.#...#...#.#...#.....#.#.#.#.#.#...#...#.#...#'\r\n'#.#.###.#.#######.#.###.#.#.#.###.#########.#.#######.#######.###.#####.#########.###.###.#######.###'\r\n'#.#.#.#...#...#...#...#.#.#...#.#.#.#...#...#.#.....#.#...#.#.....#.#...#.#.......#.#.#.#.#.....#.#.#'\r\n'###.#.#######.#.#.#######.#####.#.#.###.#.###.#.#.#.#.#.###.#.#.###.###.#.#####.#.#.#.#.#.#.###.###.#'\r\n'#.......#.#.#...#...#.#.....#.....#.#.......#.#.#.#.....#.....#.......#.........#.#.........#.....#.#'\r\n'#####.###.#.#####.###.#.###.###.###.#####.#####.#####.#.###.###.###.#.#.#######.#.#.#.###.#######.#.#'\r\n'#.....#.#.....#...#...#...#...#.#.........#.....#.....#...#...#.#...#.....#...#.#...#...#.#.#.#.#...#'\r\n'#####.#.#.#.#.#.#####.#.#.#######.#.###.#.#.###.#.#.#.#.###.#####.#########.#.#####.#####.#.#.#.#.#.#'\r\n'#...#.#...#.#...#.......#.#.......#.#.#.#.#...#.#.#.#.#.....#...#...........#.#...#.#.........#...#.#'\r\n'#.#.#.#.#.#.#.#.#.#.###.#########.###.#.#.###.###.#####.#####.#.#.#.#.#.#######.#######.#.###########'\r\n'#.#.....#.#.#.#...#...#...#...#.......#.#.#.....#.#.#.....#...#.#.#.#.#...#.#.......#...#.#...#.#...#'\r\n'#####.###.#####.#.#########.###.#.#.#########.#####.###.#.#.#.#.#####.###.#.###.###.#.#.###.#.#.#.###'\r\n'#...#.#...#...#.#...#.....#.....#.#.......#.......#.#...#...#.#.#.#...#...........#.#.#.#...#.......#'\r\n'#.#.###.#####.#.#######.###.#######.#.#.#.#####.###.#######.#.###.#####.#.###.#####.#######.#####.#.#'\r\n'#.#.....#.#.......#.........#.......#.#.#...#.........#.....#...#...#...#.#.#...#.........#...#...#.#'\r\n'###.###.#.#######.#.###.#######.#.#.#.###.#.#######.###.#.#.###.#.#########.#.#.###.#####.#####.###.#'\r\n'#...#...#...#...#...#...#.#.....#.#.#...#.#.........#...#.#...#.#...#.........#...#.#.#.#.#.....#.#.#'\r\n'###.#.###.###.#.###.#####.#######.#.#.###.###.#######.###########.#.#.###.#######.#.#.#.#.###.#.#.###'\r\n'#...#.........#.#...........#.....#.#.#.....#...#...............#.#...#.....#.....#...#.......#.....#'\r\n'#####################################################################################################'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 15[101x101]/9986/.33s\r\n%Lambdaman 15  optimal solution ?\r\ns15='######################################################################################################...#.#...#.....#...#.......#...#.#.#.#.#.........#...#.......#.#.#...#...#...#...#.#...#.#.......#.##.###.#.#####.###.#.#####.#.#.###.#.#.#.###.#.#.#.#.###.#######.#.#.#.#.###.#.#.###.#.#.#.#.#.#.###.##.#...#.......#.#.#.......#.#.#.......#.....#.#.#.#.....#...........#...#...#.#.....#.#.#.#.#.#.#...##.###.###.#####.#####.#######.###.#.#####.#.###########.#######.#############.###.###.###.#.#.#####.##.#.#.............#.#.#.#.#.......#...#...#.#.........#.......#...........#...#.#.#.........#.......##.#.#####.###.#####.#.#.#.#.###########.#####.###.#.###.#.#########.###.#.#.###.#.###.###########.#.##...#.....#.....#.....#.....#...#.......#...#...#.#.#.#.#.....#.#.....#.#...#.#.......#.........#.#.####.###.#############.#.#####.###.###.###.#########.#.###.#####.#.###.###.#.#.#.#############.###.####.#.....#.#.#...#...#...........#...#.............#...........#...#.#.#...#.#.#.......#.....#...#...##.#.#####.#.#.###.#######.###.###########.#.#####.###.#.#####.#.#.#.#.###.#.#.###.#.###.#####.########.....#.....#.#.............#.....#.#.....#.#...#.....#...#.#...#...#.#.#.#.#...#.#...........#.....##.###.###.#.#.#.#.#.###.###.###.###.#.#########.#.#.###.#.#.###.#.#.#.#.#####.#####.###.#.###.###.#.##.#.......#.....#.#...#...#.#.....#.#.#...........#.#...#.#.#...#.#.#...#.......#.#.#...#.#.......#.######.#.#.###.#####.#######.#####.#.#.###.#####.#########.#.#########.#.#.###.#.#.#######.#.#.#.######.#.#.#.#...#...#.#...#...#...#.#.#.#.#...#...#.#...#...#...#.....#...#...#...#.........#.#.#.#.....##.#.#.#########.#.###.#.###.#.#.#.#.#.#####.#####.###.#####.###.#####.###########.#.#.###########.####...#.....#.#.#...#.....#...#.#...#.#.#.....#.#.....#.......#.....#...#...#...#.#.#.#.#.#.#.........##.###.###.#.#.#####.#####.#####.###.#.#.#.###.#.#####.#####.#.#.#####.#.#####.#.###.###.#.###.#####.##...#...#.#...#.........#...#...#.....#.#.....#.........#...#.#...#...#.#.#...#.......#...#.#.....#.####.###.###.###.#.#########.#.#########.#############.#.###.#####.#.###.#.###.#####.#.#.###.#####.####.........#.....#.....#...#.#.#.............#.....#...#...#.....#...#.......#.....#.#.#.............####.###.#############.#.#####.#####.#####.#.#.#######.#####.###########.#########.###.#.###.#.#####.##.#.#.....#...#...#.#.#...#.......#.#...#.#.#.....#...#.......#.............#.#...#.#.#...#.#.#...#.##.#######.#.#####.#.#.###.###.#####.###.#.#######.###.#####.#.#######.#######.###.#.#.#.###.#.#.###.##.........#.......#.#.......#.#.....#.#...............#.#.#.#.#.....#.#.#.#...#...#...#.#.#.#.....#.########.#######.###.#####.#####.#####.#.###.#######.###.#.###.###.#.#.#.#.#.#####.#.#.###.#########.##...#...#.............#.#.....#.#.#.....#.......#.#...#.#.#.#.#.#.#.........#...#.#.#.........#.#...##.#.#####.###.#.###.###.#.#.###.#.#.#.###.###.###.#.###.#.#.###.#.#.#####.#.#.#.#.#.#########.#.#.#.##.#.#.....#...#.#...#...#.#.......#.#.#.#.#.#.#.#...#.......#.#...#...#.#.#.#.#...#...#.#...#.....#.####.###.###.#.#.###.###.###.#.#######.#.#.#.###.#######.###.#.#.#.#####.###.#.#.#.#.###.#.###.#.######.......#...#.#.#...........#.#...#.#.#...#.....#.......#...#...#.........#...#.#.#...#.#.....#...#.####.#.#.###.#########.#.#.#.#.###.#.###.#.#.#.#.#.#####.#######.#####.#######.###.###.#.#.#.###.###.##...#.#...#...#...#.#.#.#.#.#.#.......#.#.#.#.#.#...#.....#...#.#.#.#.#.#...#.#.#.....#.#.#.#.#.....##.###.###########.#.#.#######.#####.#####.#####.#####.#.#####.###.#.###.#.###.#.#.###.#.###.#.#.#.####.#...#.#.....#.#.#.#...#.#.....#.#.....#.#.......#...#.......#.....#...#.....#...#.......#.#...#.#.####.#.#.#.###.#.#.#.#.#.#.###.###.###.###.#.###.#.#####.#.#.#.#.#.#.###.#########.###.###.#######.#.##...#.#...#...........#.#.#...#.........#...#...#.#.#...#.#.#...#.#.#.........#...#.....#.#.#.#.#...########.#####.#.###.#####.#.#######.#.###.#.#####.#.###.#.###########.#.###.#.#.#########.#.#.#.###.##.#...#.....#.#.#...#.......#.....#.#.....#...#.#.#.#...#.#.#...#.....#.#...#.#...#.#.#.#.#.#.#.#...##.###.#.#.#######.#.#########.###.###.#####.#.#.#.#.#.#####.###.#.#.#####.#####.###.#.#.###.#.#.#.####.#...#.#.#.#...#.#.............#.#.....#...#.#...#...#...#.....#.#...#.......#.#.........#.........##.#.#.#.###.###.###.###.#.#.###########.#.#####.#####.#.###.###.#.#.#########.#.###.#.#####.#.#.######.#.#.#.#...#.#.....#...#.#...#...#.....#.#...#.........#.#.#.#.#.#...#...#.....#...#.#...#.#.#.#...##.###.#.#.#.#.###.#############.###.#######.###.#.#.###.#.###.#.#.#####.###.###.###.#.#.#######.#.#.##.....#...#...#...#.#.#...#.....#.......#.....#.#.#.#...#...#.#.......#.......#...#.#.......#.....#.####.###.#.###.###.#.#.###.#.###.#########.###.###.#########.#.#.###########.#######.#############.####.#.#...#...#.#...........#...#.........#.#...#.#...#.........#.......#...#...#.#.....#...#.....#...##.#.#####.###.#########.#.###.###.#.###.#.###.#.#.#####.###.###.#.#####.#.###.#.#####.###.#.#######.##...#...#...#.#.........#.#...#.#.#.#.#.....#...#.....#.#...#...#.#.....#.#.........#...............##.#####.#.#########.###.###.###.#####.#.#####.#.###########.#.###.#######.#################.#.#.#.#.##...........#...#...#.#.#.....#.....#.......#.#.#...#.#.#.#.....#.#...........#.......#...#.#.#.#.#.######.#####.###.###.#.###.#.#######.#.#.#.###.###.#.#.#.#.###.#######.###.###.#####.#####.#.##########.........#.#...#.....#.#.#...#.....#.#.#.#.......#.#.#.#.....#.#.......#.#...#.#.#.......#.........############.#.###.#####.###.#####.#####.#######.#####.#.###.#.#.###.###.#####.#.#.###.###.#.###.###.##...#...#.....#.#...#...#.........#.#.#.#...........#...#...#.......#.......#.#.#...#.#.......#...#.####.###.###.#.#.###.#.###.###.#.#.#.#.###.#########.#.###########.###.###.#####.#.###########.########...#.#.....#.#.#.....#.#.#.#.#.#.#...#.....#.#.........#.#.........#.#.......#...#.#.......#.#.#.#.####.#.###.#.###.#.###.#.###.#.###.###.###.#.#.#.###.###.#.###.###.###.###.#.#####.#.#####.#.#.#.#.#.##.#...#...#...#.#.#.#.#...#...#.....#...#.#...#.#...#...#.#...#...#...#...#.#...#.........#.#.......##.#.#.###.#.###.###.###.###########.#.###.#.#########.###.###.#.#.#.###########.#.#########.###.#.####...#.#.#.#.....#.#.........#.#....L#...#.#...#.......#.#.....#.#.#.#.........#...#...#.#.......#...######.#.###.#.###.#######.#.#.#.#####.#.#########.#####.#.#.#####.###.#############.###.###.#####.#.##.#.......#.#.#.....#.....#.........#.#.....#.......#.#...#.#...#.#...#.#.#...........#...#.#.#.#.#.##.###.###.#####.###.#.###########.###.#.#.###.#######.#.#######.###.###.#.###.#.#####.#.#.#.#.#.#.####.......#.#.....#...#...#...........#.#.#.#...........#...#.......#.......#.#.#...#.#...#.#.#.......########.###.#####.#########.###.#.#.#.###############.###.#.###.#######.###.#######.#.#.#.#.##########.........#.#.#.#.......#...#...#.#.........#.....#.......#...#...#...........#.......#.#.#...#.....########.#####.#.#.###.#.#.#####.#######.#.#.###.###.#.###.#.#######.#.#.#.###########.#.#.#.#####.####.......#...#.....#.#.#.....#.....#.....#.#.#.#.....#.#.#.....#...#.#.#.#.....#.......#.#...#.#...#.##.###.#.#.###.#.###.###.#####.#.###.###.#.###.#.#.#.###.###.#.###.#####.#########.#.#######.#.###.#.##.#.#.#.....#.#...#...#...#...#.#.....#.#.....#.#.#...#.....#.#.....#.#.#.#.#.....#...#.#...#.......####.#.#####.#.#.#.###.#.###.#########.#.#.#######.###.#.#.#######.###.#.#.#.###.#######.#.#.#.###.####.#...#.#.#...#.#...#...#.#.#.#.....#.#.#.#...#.#.#...#.#.#.#...#.#.....#.......#.........#...#.#...##.###.#.#.#####.#####.#.#.###.#.#####.#####.###.#.#.#######.###.#.###.#.###.###.#.###.#####.###.###.##.....#...#.#.#.#.....#.#.........#...........#...#.#.#...#.#.#.#...#.#.#.#.#...#.#...#...#...#...#.######.#.###.#.###.#####.#.###.###.#.#.#####.###.#.#.#.###.#.#.#.###.#.#.#.#.###.###.#.#.#.#.###.######.....#...#.#.#.#.#...#.....#.#...#.#...#...#.#.#.#...........#.#.#...#.#.#.#.....#.#.#.#.#.#.#.....####.#####.#.#.#.###.#.###.#####.#.#.#####.###.#.###.#######.#.#.#.#.#.#.#.#.#.#####.#####.#.#.#.#.####.....#...#...#.#...#...#.#.#.#.#.#.....#.#.#.#...#...#...#.#...#.#.#.#...#.#.#.#.....#.....#...#...##.#.#####.###.#.###.#######.#.#############.#.#.#####.#.#.#.#####.#.#########.#.#########.###.#####.##.#...........#.#...#.....#...#.........#.....#.#...#.#.#.......#.......#...........#.#.......#.#.#.##.#.###.#.#.#.#.###.#.###.###.#######.#.#.#.#####.#.#.#######.#####.###.###.#.#####.#.#####.###.#.####.#.#.#.#.#.#...#...#.#.#...#.....#.#.#...#.#.....#.#...#.....#.....#...#...#...#.....#.......#.....##.###.###.#.###.###.###.###.###.###.#######.#.#.###.#####.#.#########.#########.###.#.#.#######.###.##.....#...#...#...#.....#.#...........#...#...#.#.#.#.#...#...#.........#.#.....#...#.#.#.#...#...#.##.#.#.###############.#.#.#.###.###.###.#.#####.#.#.#.###.###.#########.#.#############.#.#.#####.#.##.#.#.....#.......#...#.#...#...#.#...#.#.......#...#.#...#.........#...#...#...#.......#.....#...#.##.#######.#.#####.#.###.#.#.###.#.###########.###.#.#.###.#######.#.#.#####.###.#######.#.###.#####.##.#.#...........#.#.#...#.#...#...#.#.......#...#.#.....#.#.#.....#.........#.#.#...#.#...#.#.....#.##.#.###.###.#.#.###.#######.###.#.#.###.#.###.#####.#######.#.###.###.#####.#.#.#.#.#.###.#.#####.#.##.....#...#.#.#.......#...#.#.#.#.......#...#...#.....#.#.#.#.#.#.#.....#.#.#.....#...#.#.#.....#...##.#.#.###.###.###.#.###.#.#.#.###########.###########.#.#.#.###.#.#.#.###.#######.#####.#.#.###.#.#.##.#.#...#.#...#...#.....#.....#...#.#.......#.#.......#.#.....#...#.#.........#.......#...#...#.#.#.####.#######.#########.#####.#####.#.#.#####.#.#.#######.#.###.###.###.#.#####.#.#######.###.###.###.##...#.....#...#.#...#.....#.........#...#...............#.#.#.....#...#.#.#...#...#.........#.#.#...####.#.#.###.#.#.###.#.#.#.#####.#.###.###########.#.#.#####.#.#########.#.#.###.#.###.###.#.#.#.###.##...#.#.....#.#...#.#.#.#.#.#...#.#.....#...#.....#.#.....#...#.......#...#.#...#.#...#...#.#.#...#.##.#####.#.#.#.#.###.#.#####.#.#####.#.###.#####.###.#.#.#.#####.#.###.#.###.#.#####.#.#.#####.#.#.####.....#.#.#.#.....#.........#.....#.#...#.......#...#.#.#.....#.#...#...#.........#.#.#...#.....#...######################################################################################################';\r\nms=reshape(s15,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n% \r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 14[101x101]/9994\r\n%Lambdaman 14  optimal solution ?\r\ns14='######################################################################################################.......#.......#.......#...#.....#.....#.........#.#.........#.......#.#.....#.#.....#.#.....#.....##.###.#######.#.#####.#####.###.###.#####.#.#.###.#.#.###.###.#.###.###.#.#.###.#.###.#.#.#.#.###.####...#.....#...#...#.#.......#.....#...#.#.#.#.#...#...#.#.#...#.#...#.#...#.#...#.#.#.#.#.#.#.......##.#.###.#.#.#######.#.#.#.#####.#.###.#.#.#####.#######.#.#####.###.#.###.#####.#.#.###.#.#.#####.#.##.#...#.#...........#.#.#.....#.#.#.....#...#.#...#.#.....#.#.#.#.................#.#.....#.#.....#.####.###.#######.###.###.#####.#.#.#.#.#.###.#.###.#.#####.#.#.#######.#.#########.#.#.#.#########.####...#.......#.....#...#.....#...#...#.#.....#.......#.#.....#.....#...#...#...#...#...#.........#...######.#########.#####.#.#.#.#####.#####.#.#####.#####.#.###.#.###########.#.#.###.#.###.#######.###.##.#.#...#.#...#...#.....#.#...#...#.....#.#.....#...#...#.......#.#.....#.#.#.#...#...#.#.#.#...#.#.##.#.#####.###.###########.#############.#.###.###.###.#########.#.#.###.###.#####.#######.#.#.#.#.#.##.....#.....#.......#.............#.#...#.#.#.#.....#...#.....#.#...#.......#.............#...#.#.#.####.#####.###.#####.#########.#####.#.###.#.#####.###.#####.#.#.#.###.###.#####.###.#####.###.#.#.#.##.#.....#.........#.#...#...........#.#...#.....#.#.#.#...#.#.......#...#.....#.#...#.....#.#.#.#.#.##.#####.#.#.#.###.#.###.#####.#######.#######.#.#.#.###.#.###.#.###########.###.#####.#.#.#.#.#.#.#.##.....#.#.#.#...#.#.#...........#.#.....#.....#...#.....#...#.#.#.....#.............#.#.#.....#.#...####.#.#.#.#.#####.#####.###.###.#.#####.#.#####.###.###.#.#.#####.###.#######.#.#.#####.##############...#...#.#...#...#.#.#.#.....#.....#.....#.........#...#.#.#.....#...........#.#.#.........#...#...####.#.#.###.###.#.#.#.#####.#.#.#######.###########.###.#######.#.#######.###.#.#######.#####.#.#.####.#.#.#.#.....#.#.#.#...#...#.#.#...#...#...#.#.#...#.#.....#.#.#.......#...#.#.....#.....#...#.....##.#####.###.#####.#.#.#######.#####.#####.#.#.#.#####.#.###.#.#.#####.#.###.###########.#######.######...#.........#...........#.......#...#...#.#.#.#.#.#.....#...#.....#.#.#...#.....#.#...#.#.#.....#.##.#.#.###.###.#############.###.#.#.#.#####.#.#.#.#.#######.#####.#############.#.#.###.#.#.#.###.#.##.#.#.#.#.#...#...#.......#.#...#.#.#.#.#.#.....#.#.#.#.....#...#.........#.....#.........#.#.#.#...####.#.#.#########.#.#####.#####.###.###.#.#.#.#.#.#.#.###.#.###.#.#################.#######.###.#.####.....#...#.#.......#.#.#...#.#...#...#.....#.#.#...#.#.#.#.#...#...#.#...#.......#.....#...#.#.#...####.###.#.#.#######.#.#.###.#.#####.#####.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.###.#.#######.#.#.#.####.......#...........#.......#...#.....#.#.#...#.#.#...#...........#.#...#.#.#.#.....#.#.#.#...#.....########.###########.#.#######.###.#.###.#######.#.###.#.###.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.##.......#.#...#.#...#.#.....#...#.#.........#...#...#.#.#...#.......#...#.....#.#.#.#.#...#.#...#.#.##.###.###.#.#.#.#.#.#.###.###.#####.#######.#.###.###.#####.#####.###.#####.###.#####.#.#####.#.###.##...#...#.#.#...#.#.#.#.......#...#.#.......#.....#...#...#.....#...#...#...#.#...#.#.#.#...#.#...#.##.#.#####.#.###########.#########.###.#.#####.#.###.#.#.#########.###.#######.#.###.#.#.#.#######.####.#...#.....#.#.#.#...#...#.#.........#...#...#.#...#.....#.#.....#...#.#.....#.........#...#...#...####.#######.#.#.#.#.###.###.###.#.#.#####.###.#.###.#.#####.#.#.#######.###.#########.#.###.###.#.#.##.#...#.#.....#...#.....#.....#.#.#.#.#.#.....#.#...#.#.......#.#.....#.....#.....#.#.#...#.#.....#.##.#.###.###.###.###.#.#####.###.#####.#.#.#####.#####.#.#.#####.#.#.#.###.#.#.###.#.#.#.#.#.###.######...#.....#.......#.#.......#.........#.....#...#.#.#...#.#...#.#.#.#...#.#...#...#...#.#.#.......#.##.###.###.#.###.###.#.#.###.#####.#.#.#####.#.#.#.#.###.#####.#.#.#####.###.#####.###.###.#.#.###.#.##.#.#...#.#...#.#...#.#.#...#.#.#.#.#.#.....#.#...#.......#.#.....#.....#...#.....#.....#.#.#...#...##.#.#.###.#.#####.#.###.#.###.#.#####.#######.###.###.#####.#####.#######.#.#.#########.#.#.##########...#.#.....#...#.#.#...#...#...#...#.#.....#.#..L#...#...#.....#...#.....#.#.#.........#...#.......####.#.###.###.###.###.###.#.#.#.###.#.#.###.#########.#.#######.#.###.###.#####.#.#.###.#######.###.##.#.#...#.#...#...#...#...#.#.#.......#...#...#...#.......#...#.....#.#.......#.#.#.#.....#.......#.##.#.#####.#.#########.#.###.#.#.#####.#######.#.###.#####.###.#.#.#####.#######.#.###.#####.###.######.....#...............#.#.....#.#...#...........#.......#.....#.#.#...........#.#...#...#.#.#...#...##.###.###.#.###.#####.#############.#.#####.###.###.###.#########.#####.#############.###.###.#.###.##...#.....#...#...#.......#.#.#.#...#...#.#...#...#.#.........#.#.....#.#.#...#.....#.....#...#...#.######.#.#######.#######.#.#.#.#.###.###.#.###.#####.#####.#####.###.#.#.#.#.#####.###.#.#.#.#####.#.##.....#.#.....#.#.#...#.#.#.......#.......#.#.#.#.#...#.#.........#.#...............#.#.#.#.....#...####.###.#.#.#.###.###.#.#######.#######.###.###.#.###.#.#.#############.#.###.#.#####.###.#.##########.#.#...#.#.#.#.#.......#...#.......#...#.........#...#.......#.#.#.....#...#.#...#.....#.#.....#...##.#.###.#.#.###.###.#.#####.###.###########.#####.#########.#.#.#.###.#.#.#.#######.#.#.###.#.#.###.##...#.#...#...#.#...#...#.#...#...#.#.....#.#.....#.......#.#.#.......#.#.#.#.......#.#.....#.#.....######.#.###.#.#.#####.###.#.###.#.#.#.###.#####.#.#.###.#########.#######.###.###.#######.###.###.####.......#...#.......#.......#...#.#.#...#.#...#.#...#...#...#...#.#.....#.....#...#.......#.....#...##.#####.###########.###.###.#.#.###.#.#####.#.#######.#.#.###.#.#####.#.#.#####.###.#.#.#######.#.#.##.#.#.......#.....#.#...#.....#...........#.#.#.....#.#.....#.#.#.#.#.#.#.#.#.....#.#.#.#.#...#.#.#.####.#####.#####.#########.#######.#.###.#####.#.#.###.###.###.#.#.#.#.#.###.#.#.#.#.#####.#.###.######...........#...#.#...#.........#.#...#...#.#.#.#.....#.....#.#.#.#.#.#.......#.#.#.#.#.....#.#.#...######.#####.#.###.#.#############.#######.#.#.###.#.#.#####.###.#.#.###########.#####.#.#.#.#.#.#.#.##.........#...#.#.#.#...#.#.#.....#.........#.#...#.#.#...#...#.....#...#.....#.#...#...#.#...#...#.######.#######.#.#.#.###.#.#.###.#.#.###.#.###.###.#.###.#######.###.#.###.#.#####.###.#####.###.###.##.#.#.#.....#.#.............#...#.#...#.#...#...#.#.......#.#...#...#...#.#...#.....#.#.....#.#...#.##.#.#.###.###.#.#########.#.###.#.#####.#####.#.#.###.#.###.#####.###.#####.###.###########.#.###.####...........#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#.........#.......#...#...#...#.....#.#.#.....########.#.###.###.###.#####.#.#####.#.#.###.#.#######.#######.###.#.###.#.###.#.#.#######.#.#.###.####.......#.#.#...#.....#...#...#.#.#...#.....#...#...#...#.....#.#.#.#.#...#...#...#.....#...........####.#######.#.#.#.###.###.###.#.#.#.#############.###.###.###.#.#.###.#.#.#######.#.#.###.#.#######.##.#.....#.....#...#.#...#...#...#.....#...#.....#.....#.#.#.........#.#.#.#.....#.#.#.#...#.#...#...##.#.#.#.###.#######.#####.#.###.#####.###.#.###.###.###.###.#######.#.###.###.#.#.#.###.###.#.###.####...#.#.#.#.#...#.....#...#.......#.#...#.#.#.#...........#.#.....#...#.....#.#.......#.#...#...#.#.##.#.#.###.#.#.#.#####.#.#.#.#.###.#.#####.###.#.#.#.#######.###.###########.#####.###########.###.#.##.#.#.#...#...#.#.....#.#.#.#.#.#.#...#...#.....#.#.....#...#.........#.....#.........#.........#...######.#.#.#.#.#####.###.###.###.#####.#.###.#######.#.###.###.#.#.#.###########.#.#######.#.#.#.#.#.##.....#.#...#...#.....#.#...#...#...#...........#...#.#.....#.#.#.#.#.#.#.......#.....#...#.#.#.#.#.##.#.###.#######.#.###########.#####.#.###.#.###.###.#####.#.#####.###.#.#.#.###.###.#####.#########.##.#...#...#...#...#.....#.#.....#...#.#...#...#...#.#...#.#.......#.#.....#.#.....#...#.....#...#...############.###.#######.#.###.#####.#################.#####.#.###.#.#.#########.###.#.###.###.#.###.##.........#.......#...#.....#.....#.......#.#.#.#...#.......#.#.#...#.#.#.........#.#.........#.....##.#########.#####.###.#.#####.###.#.###.#.#.#.#.###.#####.#####.###.#.#.#########.#.#####.#.#.###.####.#...#.........#...#.....#.#.#.......#.#.#...........#.#.#.......#...#.#...#...#.#.#...#.#.#.#.....##.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#######.#######.###.#.#.###.#.#.#.###.#.#.#.#.#####.##.#.#...#...#.#.......#.........#.#...#...#.#.#...#.#.............#.#...#...#.#.....#.#...#.#.....#.##.#.#.#######.#.#######.###.#######.###.###.#.###.#.#.#######.#.#####.###.#.#############.#.#######.##...#.#.......#.#.......#.#...#...........#.#.#.#...#...#.#...#...#.#.#.#.#.#...#.....#...#.#...#...####.#.#######.###.#.#####.#.#######.###.#.###.#.#.#######.#####.###.#.#.###.###.###.#######.###.#.####...........#.#...#...#...#...#.#.#.#...#.....#.#.......#.#...#.......#.....#.#...#.#.....#.#.#.#.#.######.#####.#.###.###.#.###.###.#.#######.#####.###.###.#.#.#.#####.###.###.#.###.#.#.###.###.#.#.#.##.#.#.#.....#.......#.....#...#.....#...#.......#...#.......#.#.#...#...#...#.#.#...#.#...#.#.......##.#.###.#.#.#.#####.#####.#.#####.###.###.#.#.#######.#.#####.#.#######.###.#.#.#.###.###.#.###.###.##...#...#.#.#.....#.....#.#.#...........#.#.#.#.#...#.#...#.......#.......#...........#...........#.##.###.###.#.#########.#.#######.#.###.#.###.#.#.#.#.#########.###.#.#.#########.###.#######.###.#.####.....#...#...#.....#.#...#.#...#...#.#.#.#.#.#...#.#...#.....#.#.#.#.....#.#...#.......#.#.#...#.#.##.#####.#####.#.###########.#.#####.#.#.#.###.#.#######.###.###.#.#.#.###.#.#.#####.#.#.#.#######.#.##.#.....#.#.#.#.....#.#.........#...#.#.#...#.......#...#.#.#.....#.#.#...#.#...#...#.#.#.#.#...#...####.#.#.#.#.#######.#.#####.###.#.#.#.###.#######.#####.#.###.#####.#####.#.#########.#.#.#.#.###.#.##.#.#.#.........#.#...........#.#.#.#.#.#...#.....#...#...#.#.#.....#.....#.....#.....#.....#.#...#.##.#####.#.#####.#.###.###.###.#######.#.#.#.#.#.#.#.#####.#.#.###.###.#####.###.#.###.#####.#.#.###.##.......#.#.........#.#...#.....#.........#...#.#...#...........#...#.....#...#...#...#.....#.....#.######################################################################################################';\r\nms=reshape(s14,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-17T16:27:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-16T04:45:04.000Z","updated_at":"2025-12-11T05:42:01.000Z","published_at":"2024-07-16T05:31:31.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.\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":60593,"title":"ICFP2024 002: Lambdaman 9","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"  in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\r\nB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u003e B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u003e\r\n\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\r\n\r\nAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.","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: 579px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 289.5px; transform-origin: 407px 289.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 339px 8px; transform-origin: 339px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 380px 8px; transform-origin: 380px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"  in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\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: 287px 8px; transform-origin: 287px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u0026gt; B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u0026gt;\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 364px 8px; transform-origin: 364px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman9(m)\r\n% m is a maze where 2 is cheese to eat, 1 is Lambdaman the token being moved, \r\n% 0 is a wall\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman9 is a string of about 2499 RDLU characters\r\n%Answers may vary if doing rows or columns first\r\n v='R';\r\nend\r\n\r\n%Lambdaman 9 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman9.glx\r\nB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"\r\n\r\nSolution\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman9.sol.glx\r\nB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u003e B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u003e\r\n\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nvalid=0;\r\nm=ones(50)*2; %Cheese bits are 2.  Walls will be 0 but none in this case.\r\nm(1)=1;  %Lambdaman is 1\r\n\r\nv = Lambdaman9(m);\r\nfprintf('Answer Length: %i\\n',length(v))\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman9 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  c=min(c+1,50);\r\n elseif v(i)=='L' % L\r\n  c=max(c-1,1);\r\n elseif v(i)=='U' % U\r\n  r=max(r-1,1);\r\n elseif v(i)=='D' % D\r\n  r=min(r+1,50);\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nend\r\n%mc\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nL.................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n%}\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-09T20:42:07.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T17:08:10.000Z","updated_at":"2025-12-03T18:41:13.000Z","published_at":"2024-07-09T20:42:07.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\\\" B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L$ L# ? B= v# I\\\" v\\\" B. v\\\" B$ v$ B- v# I\\\"  in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. S3/,6%},!-\\\"$!-!.^} B$ B$ L! L\\\" B$ v! B$ v! B$ v! B$ v! B$ v! v\\\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u0026gt; B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\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\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\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":60642,"title":"ICFP2024 010: Lambdaman Optimal-Crawler-Backfill","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\r\n\r\nThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\r\nMaze#/Crawler/OptimalCrawler \r\n1/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\r\nThese are believed to be optimal solutions. Post in comments if any are beat.","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: 786px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 393px; transform-origin: 407px 393px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 371px 8px; transform-origin: 371px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\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: 98.5px 8px; transform-origin: 98.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMaze#/Crawler/OptimalCrawler \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: 313.5px 8px; transform-origin: 313.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\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: 242.5px 8px; transform-origin: 242.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThese are believed to be optimal solutions. Post in comments if any are beat.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [pathbest]=crawler_fill(m)\r\n% This is Optimal crawler_fill\r\n% Optimal Crawler with backfill will solve non-loop mazes with path width of 1\r\n% At intersections the path, UDLR, that is least deep to fill is selected\r\n% Recursive fast move if only one cheese adjacent or one open path\r\n% Backfill L spot if 3 adj are Wall 0\r\n\r\n%crawler 1/15 2/33 4/394/.09s\r\n%11[103x103]/9988/.33s 12[101x101]/9992  13/9976 14/9994 15/9986/.33s\r\n%Optimal crawler 1/15 2/26 4/348 11/9622/.9s 12/9626  13/9562 14/9478 15/9584\r\n\r\n pathv=zeros(1000,1); pathvptr=0;\r\n %zmap=[0 0 0;1 0 0;0 1 0;0 0 1]; \r\n \r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr]; % UDLR 1234\r\n \r\n  %figure(1);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n  %pause(0.05)\r\n \r\n Lidx=find(m==1);\r\n ztic=tic;\r\n while nnz(m==2)\u003e0\r\n  %if toc(ztic)\u003e120\r\n  %  fprintf('ztic Timeout\\n');\r\n  %  break;\r\n  %end\r\n  \r\n  vadj=m(adj+Lidx);\r\n  m(Lidx)=3;\r\n  \r\n  [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr);\r\n  \r\n  if nnz(m==2)==0 %All cheezy bits eaten check post evolve\r\n   break;\r\n  end\r\n  \r\n  %Create path lengths in parallel to UDLR pu,pd,pl,pr\r\n  %evolve all four until one active path has no growth. This is branch to take\r\n  %dir will be called dptr 1 2 3 4\r\n  mUDLR=m;\r\n  mUDLR(m\u003e0)=inf;\r\n  mUDLR(Lidx)=1;\r\n  mU=mUDLR;\r\n  \r\n  % Use cell arrays mUDLRc{1} mU {2} mD {3}mL {4}mR \r\n  mUDLRc{4}=[];\r\n  Mdepth=zeros(1,4);\r\n  depth=2;\r\n  for i=1:4 % Initialize mUDLRc{i}\r\n   mUDLRc{i}=mU; % all same start UDLR\r\n   mUDLRc{i}(Lidx+adj(i))=min(mUDLRc{i}(Lidx+adj(i)),depth);\r\n   if nnz(mUDLRc{i}==depth)\r\n    Mdepth(i)=depth;\r\n   end\r\n  end\r\n    \r\n  % depth=2 at entry with at least 2 at depth 2\r\n  nnzMdepth=nnz(Mdepth); % Base active paths\r\n  while nnz(Mdepth==depth)==nnzMdepth   % 0012 stop  1223 stop  0022  0022 stop\r\n   pdepth=depth;\r\n   depth=depth+1;\r\n   for i=1:4\r\n    if Mdepth(i)==0,continue;end % matrix i never grew\r\n    gptr=find(mUDLRc{i}==pdepth)';\r\n    for j=gptr\r\n     mUDLRc{i}(j+adj)=min(mUDLRc{i}(j+adj),depth); % grow UDLR from each new point\r\n    end % j gptr\r\n    if nnz(mUDLRc{i}==depth) % Search for any new placements, cant use max as use Inf for path\r\n     Mdepth(i)=depth;\r\n    end\r\n   end % i mUDLRc\r\n  \r\n   if nnz(Mdepth==depth)\u003cnnzMdepth % Some path group ended\r\n    dptr=find(Mdepth==depth-1,1,'first'); %New direction\r\n   end\r\n  \r\n  end % while nnz Mdepth depth\r\n  \r\n  Lidx=Lidx+adj(dptr);\r\n  m(Lidx)=1;\r\n  pathvptr=pathvptr+1;\r\n  pathv(pathvptr)=dptr;\r\n \r\n end % while m==2\r\n \r\n UDLR='UDLR';\r\n if nnz(m==2)\u003e0\r\n  pathbest=UDLR(pathv(1:pathvptr));\r\n  fprintf('BestPath:');fprintf('%s',pathbest);fprintf(' Uneaten:%i\\n',nnz(m==2));fprintf('\\n')\r\n else\r\n  pathbest=UDLR(pathv(1:pathvptr));\r\n  fprintf('Solved Path:');fprintf('%s',pathbest);fprintf('\\nLength:%i\\n',length(pathbest));\r\n end\r\n \r\n  %figure(4);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\nend % crawler_fill\r\n \r\nfunction [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr)\r\n  vadj=m(adj+Lidx);\r\n  update=0;\r\n  while nnz(vadj==0)==3 % serial cul-de-sac exit; speed\r\n   m(Lidx)=0; % cul-de-sac  Backfill\r\n   ptr=find(vadj\u003e0,1,'first');\r\n   Lidx=Lidx+adj(ptr);\r\n   pathvptr=pathvptr+1;\r\n   pathv(pathvptr)=ptr;\r\n   vadj=m(adj+Lidx);\r\n   update=1;\r\n  end % while cul-de-sac\r\n  \r\n  while nnz(vadj==2)==1 % serial tunnel cul-de-sac; speed\r\n   m(Lidx)=3; % movement update\r\n   ptr=find(vadj==2,1,'first');\r\n   Lidx=Lidx+adj(ptr);\r\n   pathvptr=pathvptr+1;\r\n   pathv(pathvptr)=ptr;\r\n   vadj=m(adj+Lidx);\r\n   update=1;\r\n  end % while cul-de-sac\r\n  m(Lidx)=3;\r\n  \r\n  if update\r\n   [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr); \r\n  end\r\n  \r\nend % evolve\r\n ","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 1  optimal solution L15\r\n   ms=['###.#...'\r\n       '...L..##'\r\n       '.#######'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=15 % Lambda1 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=15 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26\r\n ms=[ ...\r\n      'L...#.'\r\n      '#.#.#.'\r\n      '##....'\r\n      '...###'\r\n      '.##..#'\r\n      '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=26 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=26 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=348 % Lambda4\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=348 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 11[103x103]/9988/.33s crawler\r\n%Lambdaman 11  optimal solution 9622\r\n ms=[ ...\r\n'#####################################################################################################'\r\n'#.#.....#.......#.#.......#...#...#.......#...#.......#.#.......#...#.....#.....#.....#.......#.....#'\r\n'#.###.###.#####.#.###.###.#.###.#.#.#######.#######.###.#.###.###.#####.#.###.#######.#.#.#########.#'\r\n'#...#.#.....#.....#.....#...#...#.....#.........#.#.......#...#.........#.....#...#.#...#.#.........#'\r\n'#.###.###.###.#.#########.#.#.###.#.#.#.###.#.###.###.#################.#######.#.#.###.###.#.###.###'\r\n'#.#.#.....#...#...#.#.#...#.#.#...#.#.#...#.#.#...........#.....#.......#.#.#...#.#.........#...#...#'\r\n'#.#.###.###.#######.#.#.#######.#####.#.#.###.###.#.#####.#####.#.###.#.#.#.###.#.#.#####.#####.#####'\r\n'#.......#.#.#.....#.........#.....#...#.#...#...#.#.#...#.#...#.#...#.#.#.....#.#.....#.....#.#.....#'\r\n'#####.#.#.###.#.###.#.###.#.#.#######.#.#.###.###.#.#.#######.#.###.#####.###.###.#.#.#.###.#.#.###.#'\r\n'#...#.#.#...#.#...#.#...#.#.......#.#.#.#.#.#...#.#.#.......#.......#.....#...#.#.#.#.#.#.....#.#.#.#'\r\n'###.###.#.###.#####.#######.#.#####.#.#.###.#######.#####.#.#####.#.#.#.#####.#.#.###########.#.#.###'\r\n'#...#.........#.........#.#.#.#...#.........#.........#.#.#...#...#...#...#...#.#...#...#.....#.....#'\r\n'###.#.#.#.###.#####.#.###.###.###.###.#############.###.#####.###.###.###.#.###.###.#.###.#########.#'\r\n'#.#...#.#.#...#.....#.#.....#.#.#...#.....#...#...#.#.............#...#...#.#.....#.#...#.........#.#'\r\n'#.###.###.###.###.#####.###.#.#.###.###.###.#####.#.#.###.#############.###.#####.#.#.###.#####.#####'\r\n'#.....#.....#.........#.#.....#...#.........#.#.#...#...#.......#...#.#.#...#...#.....#.....#.......#'\r\n'#.#.###.###.#.#.#################.#.#####.###.#.#.#.#.#####.###.###.#.#######.###.#####.#.###.###.###'\r\n'#.#.#.#.#...#.#...#...#...#...#.......#...#.#...#.#.#.....#.#...#.....#...........#.....#.#.#...#.#.#'\r\n'#.###.###.#.#######.###.#####.#.###.#.#.###.#.###.#############.###.###.###.###.###########.#.#.###.#'\r\n'#.#.....#.#.#.....#.#.......#.#...#.#.#.#...#.......#.#.....#.#.#.....#.#.....#.#.......#...#.#.#.#.#'\r\n'#.###.#######.#####.#.###.###.#.###.#.#####.#.#.#####.###.###.#.#.#######.#####.#.###.###.###.#.#.#.#'\r\n'#.#...#...#.....#.#...#...#.#.#.#...#.#.#.....#.#...#.....#...#.#.....#...#.......#.........#.#.....#'\r\n'###.#.###.#.#.###.#.#.#.#.#.#.###.#####.###.#.#####.###.#.#.###.#####.###.#.###.#######.###########.#'\r\n'#...#.#.#...#...#...#.#.#...#.#.#.#.........#.#...#...#.#.............#...#.#.......#.....#.....#.#.#'\r\n'###.###.#.###.#####.#######.#.#.#.#######.###.#.#####.#.#.#####.###.#.#.###########.#########.#.#.###'\r\n'#...#.#...#.#.#.#...#.....#.....#.......#...#.#...#.....#.#...#...#.#.#.#...#.#.#.....#.....#.#.....#'\r\n'#.###.#.###.#.#.#.#####.###.#####.#.#.#####.###.#####.#####.#######.#######.#.#.#####.#.#.###.#.#.#.#'\r\n'#.....#.#.#...#.#.....#...#...#.#.#.#.......#...............#.....#...#.....#.........#.#...#.#.#.#.#'\r\n'#.###.###.###.#.#.#.###.#####.#.#.#######.#.###########.###.#.#########.#.#########.#.#.###########.#'\r\n'#.#.#...#.#.......#.#...#...#L#.......#.#.#.....#...#...#.#.#.#...#.#...#...#.#.....#.....#.....#.#.#'\r\n'#.#.###.#.#####.###.###.###.#.#.###.###.###########.#.###.###.###.#.#.#######.###.###.#.#####.###.#.#'\r\n'#.#...........#.#.....#.#.#...#...#.#...#.......#.#.#...........#.....#.#.......#.#...#.#.....#.#...#'\r\n'###.###.###.###.###.###.#.#.###.#####.#.#.#.#####.#.#.#########.#.###.#.#.#.#.#####.#########.#.#.###'\r\n'#...#...#.#...#.#...#.#.#.....#.....#.#.#.#.............#.#.....#.#.#.....#.#.#.........#.#.....#...#'\r\n'#######.#.#########.#.#.###.#####.###.###.#######.#####.#.#####.###.#.###.###.#.###.#.###.###.#.#.###'\r\n'#.....#.........#...#.......#...#.#.......#.#...#.#...........#.#.....#.....#.#.#.#.#.....#...#.....#'\r\n'###.###.###.#.###.#.#.#####.###.#.#####.###.###.#.###.#.#.#.#######.#####.###.###.#.###.#####.#.#####'\r\n'#.#...#.#...#.#...#.#.#...#...#.......#.....#.......#.#.#.#...#.......#.....#.#...#...#...#.#.#.....#'\r\n'#.#.#######.###.#########.#.###.#####.###.#.#.#######.#######.#.#.#.#######.#####.#.#.#.#.#.#######.#'\r\n'#.#.......#.....#.....#.....#...#.......#.#.#...#.....#.#...#...#.#.....#.#.#...#...#.#.#...#.#...#.#'\r\n'#.#.#.###.#####.#.#######.#####.#############.#########.###.#.#########.#.#####.#.###.#.#####.#.#.#.#'\r\n'#.#.#.#.#.#.....#.....#.....#.................#...#.....#.........#.........#...#.#...#.........#...#'\r\n'#.###.#.#.#.#.###.###.###############.###.#####.#.#####.#.#.###.#########.###.#####.###.###.#.#######'\r\n'#...#.#.....#...#.#...#.#.........#.....#...#.#.#...#...#.#.#...#...#...#.#.#.#.#.#.#.#.#...#...#...#'\r\n'#.###.###.###.###.###.#.#.###.#.###.#######.#.#.#.#.###.#.#######.#.#.#.###.#.#.#.###.#.#####.#.#.###'\r\n'#.......#.#...#.#...#...#.#.#.#.........#.....#.#.#...#...#...#.#.#...#.#.......#.#.#.......#.#.#...#'\r\n'#.###.###.###.#.#.#####.###.#.###.#.#.###.###########.#.#####.#.#.###.###.#####.#.#.#.#####.###.#.#.#'\r\n'#...#.#.#.#...#...#.....#.#...#...#.#...#.#.........#...#...........#.....#.#...#.........#...#...#.#'\r\n'#.#.###.###.#######.#####.#.###############.#.#.###.#.###.#########.#######.#.#########.###.#####.###'\r\n'#.#.#.........#.#.....#.#.#.#.#...#...#.#.#.#.#...#...........#.#...#.#...........#...#...#...#.....#'\r\n'#####.#########.#.###.#.#.#.#.#.#.###.#.#.#.###############.###.#.###.#####.#.#.#####.#.#######.#.###'\r\n'#.........#.......#...#.......#.#.#...#.......#.....#.....#.#...#.....#.#...#.#.#...........#...#.#.#'\r\n'###.###.#######.###.#####.#####.#.#.#.###.#.###.###.#.#####.#.#####.#.#.#.#.#####.#####.#.#.#####.#.#'\r\n'#.....#.#.#.......#...#.#.....#.#...#...#.#...#.#.#.#.....#.#...#...#...#.#.......#.....#.#...#.....#'\r\n'###.#.###.#.###.#.#####.#.#########.###########.#.###.#########.#######.#########.#####.###########.#'\r\n'#...#.......#...#.....#.#.#.#.#.#.......#...#...#...#.....#...#.#.#...#.......#...#...#.#.......#...#'\r\n'#.#.#########.#.#.#.###.#.#.#.#.#.#.#####.#####.###.###.#####.#.#.###.#.###.###.#.#.#.###.###.###.#.#'\r\n'#.#...#.#.#...#.#.#.........#.#.#.#.#...#...........#.....#.#.#...#...#...#.#.#.#...#...#.#.#.#...#.#'\r\n'#.#####.#.###.#.#######.#.#.#.#.#.###.#######.###.###.#.#.#.#.#.#####.#######.#.###########.#.#####.#'\r\n'#.#.#.#.......#.#.......#.#.#.#...#.......#.....#...#.#.#.#.#...#.#.......#...#.#.....#.#.....#.....#'\r\n'###.#.#####.###########.###.#.#.#.#######.#.###.#.###.#.###.#.###.###.###.#.#.###.#####.#####.#.#.###'\r\n'#.....#.#.#...#.....#...#.#.....#.#.....#...#...#.#.#.#.....#.......#...#...#...#.#.......#.....#.#.#'\r\n'#.#####.#.#.#.#.###.###.#.#.#######.#####.#####.###.#.#######.#######.#.#####.###.#######.#####.###.#'\r\n'#.#...#.#...#...#...#.....#.....#.#.#.#.......#.....#...#.....#...#...#.#.#.#...#...#.#.....#.......#'\r\n'#.###.#.#.#.#.#####.#.#.###.#####.#.#.###.#.###.#######.#.#.#####.#####.#.#.#####.###.#.#.###.#.###.#'\r\n'#.......#.#.#.#.#...#.#.#.......#.#.......#.#.#.......#...#.#.#.#.#...#...............#.#.#...#...#.#'\r\n'#.#####.#.#####.#.#####.#.#.#####.###.#######.###.#.###.#.###.#.#.###.#####.#####.#######.###.#######'\r\n'#.#.#.#.........#...#.#.#.#...#.....#.#...#.....#.#...#.#.#...#.#...#...#...#.#...#.......#.......#.#'\r\n'###.#.#.#####.#######.###.###.#.#####.#.###.###.#.#.###.###.#.#.#.#.###.###.#.#######.###.#.#.###.#.#'\r\n'#.........#.....#.......#.#...#...........#...#...#...#...#.#.....#.#.........#.#.....#.#...#...#...#'\r\n'###.#####.#.#.#####.#####.#############.###.###.#####.#.#########.#########.###.#####.#.#.#######.#.#'\r\n'#...#.....#.#.#...#.#...#.....#...#.#.#...#.#.....#...#.........#...#.#.#...#.#.#.#.#.#...#.#.#.#.#.#'\r\n'###.###.###.#.###.#.#.###.#.#####.#.#.#########.###.###.###.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#'\r\n'#.#.#...#...#.#...#.....#.#.#.....#.....#.#...#.#.#.....#...#...#.......#.....#.#.....#.#.#.......#.#'\r\n'#.#####.#.#######.#.#.###.#.#.#.#.#####.#.#.#####.#.#########.#######.#####.###.#.#.#.#.#.#.#####.###'\r\n'#.....#.#.#...#...#.#.....#...#.#...#.#...#...#.#...#...........#.#.....#...#...#.#.#.#.#...#.#...#.#'\r\n'#.#.#####.#.###.###.#.#.#####.#######.#.###.###.#.#######.#####.#.#.#######.#.#####.#.#.#####.#.###.#'\r\n'#.#...#.#.#.#.#.#...#.#.#.............#.#.....#.....#.#...#.....#.#.....#.#...#.#.#.#...#.#...#.....#'\r\n'#.#.#.#.#.#.#.#.#####.###.#####.#######.#####.#.#####.#####.###.#.###.#.#.#.###.#.#####.#.###.#.###.#'\r\n'#.#.#.#...#...#.#.....#.#...#...#.#.#...#.....#...#.#.#.......#.....#.#...........#.......#.......#.#'\r\n'#.###.###.###.#.#.#####.#####.#.#.#.###.###.#####.#.#.#.###.#.#######.###.###.#.###.#####.#.###.###.#'\r\n'#...#.#.#.#.......#.......#.#.#.#...............#...#.#.#...#...#.#...#.....#.#.#.#.#.#...#...#.#...#'\r\n'#.#.###.#.#######.#.###.#.#.#.###.#########.#.#######.#######.###.#####.#########.###.###.#######.###'\r\n'#.#.#.#...#...#...#...#.#.#...#.#.#.#...#...#.#.....#.#...#.#.....#.#...#.#.......#.#.#.#.#.....#.#.#'\r\n'###.#.#######.#.#.#######.#####.#.#.###.#.###.#.#.#.#.#.###.#.#.###.###.#.#####.#.#.#.#.#.#.###.###.#'\r\n'#.......#.#.#...#...#.#.....#.....#.#.......#.#.#.#.....#.....#.......#.........#.#.........#.....#.#'\r\n'#####.###.#.#####.###.#.###.###.###.#####.#####.#####.#.###.###.###.#.#.#######.#.#.#.###.#######.#.#'\r\n'#.....#.#.....#...#...#...#...#.#.........#.....#.....#...#...#.#...#.....#...#.#...#...#.#.#.#.#...#'\r\n'#####.#.#.#.#.#.#####.#.#.#######.#.###.#.#.###.#.#.#.#.###.#####.#########.#.#####.#####.#.#.#.#.#.#'\r\n'#...#.#...#.#...#.......#.#.......#.#.#.#.#...#.#.#.#.#.....#...#...........#.#...#.#.........#...#.#'\r\n'#.#.#.#.#.#.#.#.#.#.###.#########.###.#.#.###.###.#####.#####.#.#.#.#.#.#######.#######.#.###########'\r\n'#.#.....#.#.#.#...#...#...#...#.......#.#.#.....#.#.#.....#...#.#.#.#.#...#.#.......#...#.#...#.#...#'\r\n'#####.###.#####.#.#########.###.#.#.#########.#####.###.#.#.#.#.#####.###.#.###.###.#.#.###.#.#.#.###'\r\n'#...#.#...#...#.#...#.....#.....#.#.......#.......#.#...#...#.#.#.#...#...........#.#.#.#...#.......#'\r\n'#.#.###.#####.#.#######.###.#######.#.#.#.#####.###.#######.#.###.#####.#.###.#####.#######.#####.#.#'\r\n'#.#.....#.#.......#.........#.......#.#.#...#.........#.....#...#...#...#.#.#...#.........#...#...#.#'\r\n'###.###.#.#######.#.###.#######.#.#.#.###.#.#######.###.#.#.###.#.#########.#.#.###.#####.#####.###.#'\r\n'#...#...#...#...#...#...#.#.....#.#.#...#.#.........#...#.#...#.#...#.........#...#.#.#.#.#.....#.#.#'\r\n'###.#.###.###.#.###.#####.#######.#.#.###.###.#######.###########.#.#.###.#######.#.#.#.#.###.#.#.###'\r\n'#...#.........#.#...........#.....#.#.#.....#...#...............#.#...#.....#.....#...#.......#.....#'\r\n'#####################################################################################################'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9622 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9622 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 12[101x101]/9994\r\n%Lambdaman 12  optimal solution 9626\r\ns12='######################################################################################################.....#...#.....#.........#.......#...#.#.#.#.....#.#.#.#...#...........#...#...#...#.......#.#...#.####.#####.#.#.#######.###.#.#.#.#.#.###.#.#.#####.#.#.#.###.###.#########.###.###.#########.#.###.#.##...........#.....#...#.....#.#.#...#...#.#.#.#.#...........#.......#.#...#.#.....#.....#...#.#...#.####.#######.#.###.#.#####.#########.#.###.#.#.#.#.#.#.#.#######.#####.###.#.#.#.#.#.#######.#.###.#.##.#.....#...#.#.#.#...#.#.#.....#.#.#...#.........#.#.#...#.....#.....#.....#.#.#.#.........#.....#.##.#####.#.###.#.#.#.###.#.#.###.#.#####.###.###.#####.###.#####.#.#.#####.#####.###.###########.###.##...#...#.#.#...#.#...#.....#.#...#.#.......#.......#.#...#.....#.#.#...#...#.#.......#.#...#.#.#...##.#.#####.#.#########.#######.#####.#####.#.#.###.#######.#.#####.###.###.###.#.#######.#.###.#.#.####.#.....#.#.........#.#...#.#.....#.#.#...#.#.#.#.#.......#.#.....#.......#.........#.....#.......#.####.###.#.#.#.###.###.###.#.#.#####.#.#########.#.###.#####.#.#.#########.#.###.#.#.#.###.#.#######.##...#.#...#.#.#...#.....#...#.....#.#.....#.#...#.#...........#.#.#...#...#...#.#.#...#.........#...##.#.#.#####.#####.#.#######.#.###.#.#####.#.#.###.#####.#.#.#####.#.###.#.#.#####.#######.#.#####.####.#.....#.#.#...#...............#.....#.......#.....#...#.#.....#.......#.....#...#...#...#.#.......######.###.#####.#####.#########.#############.#.###.#######.###.#.#.###.#####.#.###.###.###.#####.#.##.....#.#.......#.#.#...#.#...#.....#.............#.......#.#.....#.#.#...#...#.#.#...#.#.#.#...#.#.######.#.#.#.#####.#.#.#.#.###.#.#.#####.###.#####.###########.#######.###.#.#####.#.###.#.#.#.###.#.##...#.....#...#...#.#.#.#.......#.#...#...#.#.#.#...#...#.....#.#...#.....#...#.......#.#.......#.#.##.#.#.#######.#.#.#.#.#####.###.###.#.#####.#.#.###.###.#######.###.#####.#########.#####.#.#####.#.##.#.#.....#...#.#...#...#...#...#...#.#.#.........#.#...#.............#.#.....#.#.#.......#...#...#.##.#.###.#.#.#.#####.#.###.#.#####.###.#.###.###.#######.#.###.#######.#.#####.#.#.#.#######.#.#.#.####.#.#...#.#.#...#.#.....#.#.#...#...#.#...#...#.......#...#...#.#.........#.#.#...........#.#...#.#.####.#.#.#########.#.#####.###.#.#####.#.#########.#.#.#####.###.#.###.#####.###.#####.#####.###.###.##...#.#.#...........#...#.#.#.#.#...#...#.....#.#.#.#...#...#.#...#.#...#.#.....#.#.#...#.....#.#...##.###.###.###.#.#.#.#.#.###.#.#.###.###.#.###.#.#.#####.#.###.#.###.#####.#.#.#.#.#.#.#.###.#.#####.##...#.#.#.#.#.#.#.#...#.#...#.#.......#.#.#...#.....#.#.....#...#.....#.....#.#.#.....#...#.#...#.#.##.#.#.#.#.#.###.#########.#######.#.###.###.#####.#.#.###########.###.#.#.#########.###########.#.#.##.#...........#.......#.........#.#.#...#.#.#...#.#...#.....#...#.#.....#...#.#.#.......#...#.#.....##.###.#.#.#.###.###.#######.#######.###.#.#.###.#.#.#.###.#####.#.###.#######.#.#.#####.#.###.#####.##...#.#.#.#.#.#...#.#...#.#.....#.......#.....#...#.#.....#.#...#.#...#.....#.#.#.....#...#.....#.#.##.#######.###.#####.#.###.#.#.#.###.#.###.#####.#####.###.#.#.#.#.#.#####.###.#.#.#######.#.#####.#.##.#.....#...#...#.#.#.#.....#.#.#.#.#.........#...#.#...#.#.#.#...#.#...#...........#.........#.....##.#####.#####.#.#.#.#.#.#####.###.#####.###.###.###.###.###.#.#.#####.#.#.#.###.#######.#.#.#####.####.....#...#...#.......#...#.#.....#.#...#.#.........#.....#...#...#...#.#.#.#.#.#.#.....#.#...#.....##.#######.#######.#####.#.#.#.###.#.###.#.#####.#######.###########.#.###.#.#.###.#.#######.##########...#...#.#...#.........#...#.#.#...........#.......#.....#...#.#...#...#.#.#...#...#.#...........#.##.###.#.#.#.#.###.#######.###.#.#.###.#.#.#######.###.#####.###.#####.###.#.###.#.#.#.#.###.###.#.#.##...#.#.....#.#.#.#.....#.#.....#.#...#.#.....#...#...#.#.#.#.#...#.#.....#...#...#...#.#.#...#.#.#.##.#.###.#####.#.#.#####.###.###.###.###.#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#############.#.#.#####.#.##.#.#...#...#.#.........#...#.....#.#...#.....#.#.#.#.#...........#...#.#.#.....#.#.#.#.#.....#...#.##.#.#.#.#.#.#.#####.#.#####.###.#####.#.#############.#.#####.#.#########.#.#.#.#.#.#.#.#####.###.#.##.#...#...#.#.#...#.#.....#...#.#.....#.............#...#...#.#.....#.......#.#.#.#.#...#.#...#.....######.###.#.###.#####.#############.###.###.#############.#.#######.###.#.#######.#.#.###.#####.#.####.#...#...#.#.#...#...............#...#.#...#.....#...#...#...#...#.#...#.#...#.#.....#...#.#...#...##.#####.#####.###.###########.###################.###.#.#.#######.###.#######.#.###.###.###.#.#.###.##.........#.#.#...#.#.#.....#.............#.....#...#...#.#.#.....#.#.#...#.......#.#...#.....#.#.#.####.#.###.#.#.#.###.#.#.###.#.#.#####.#####.#.#.###.#.###.#.#####.#.#.#.###.###.###.###.###.#####.#.##...#.#.....#...#...#.....#...#.#...#...#.#.#.#.........#.#...#.#...#.....#.#.#.#.#.......#.#...#...##########.#.#.#.###.###.#.#####.#.#######.#####.###.#.#.#####.#.#.#########.#.###.#########.###.######.....#...#.#.#.#.......#.#.#.....#.......#.#.....#.#.#...#...#...#...........#.........#...#.#.#.#.##.#####.###.#.#####.###.###.###########.###.#####.#########.###.#####.#################.#####.#.#.#.##.....#.#.#...#...#...#.#.....#.....#.#.....#.......#...........#...#.#.#.....#...............#.#.#.##.###.#.#.#.#.#.###.#.#####.#######.#.#####.#.#########.#####.###.#.#.#.#.#######.#####.#.###.#.#.#.##...#.#.#.#.#.....#.#.#...#.#.....#...#...........#.#.#.#.......#.#...#...#.#.#.....#...#...#.....#.##.#.#.###.#.#######.###.###.#.###.#.#######.###.###.#.#.###.###.#.#.###.###.#.###.#.#.#######.#####.##.#.#...........#.........#.#...#.....#.#...#.#.#.........#.#.#.#.#.......#.......#.#...#.#...#.....##.#######.#######.#.###.#.#.#######.###.###.#.#.###.#########.###########.#.#.###########.###.###.####...#.#.......#...#.#.#.#.#...............#.#...#.#.........#...#.......#...#.....#.......#.........##.###.#.###.#########.#.###.###.#.#.###.#.#.#####.#.#.###.#.###.#####.###.###.###########.#####.#.####.#...#.#.#.....#.#.#.#.......#.#.#...#.#...#.....#.#.#...#.....#.#.........#.#.#.#.........#...#...##.#.#####.###.###.#.#.#.#######.###.###.#.#.#####.#.#############.#.###.#.#####.#.#######.#########.##...#.#...#.#...#.........#...#...#.#...#.#.#.#.....#.......#.#.#.#.#...#...#.....#...#...#.#.#.#...##.###.#.###.###########.#.#.#####.#.#######.#.#.#.#.#.#######.#.#.#######.#####.###.#.#.###.#.#.#.#.##.........#...#.......#.#...#.....#.#.#...#...#.#.#.....#.....#.......#.....#...#.#.#.#.#.....#...#.##.#.#########.#####.#.###.#####.#.#.#.###.#.#.#####.#####.#####.#########.###.###.###.#.###.###.######.#...#.........#...#.....#.#...#.#.#.......#...........#.#.#.#.........#.#.#...#.......#...#.#.....##.#.#########.###.#.#######.###.#.#.#.#####.#.#.#.#######.#.#.#.#######.#.#.#.###.#.#.#.#.###.#.###.##.#.#...#.......#.#.......#.#.#.#.#.#...#...#.#.#...#...#.......#.#...........#...#.#.#...#.......#.####.#.#######.#####.#.#.###.#.#.#############.#####.###.#.#####.#.#####.#.###.#.###.#.#.##############...#.#...#...#.....#.#.#...#...#.#.........#.#...#.....#...#.#.#.#.....#...#...#...#.#.....#...#...######.#.#####.#######.#.###.#.#.#.#.#.###.#.#.###.#.###.#.###.###.#.#.#######.#.#####.###.###.#.#.####.#.#.#.......#.....#.#.....#.#.#.#.#...#.#.....#.#...#.#.#.......#.#.#.....#.#.....#.#.....#.#...#.##.#.#.#.#.#.#.#.###.#.#.###.#####.#########.#####.###.###.###.#.###.#.#.###########.#####.#.#.###.#.##...#.#.#.#.#.#...#.#.#.#.#.#...#.#.......#.#...............#.#...#.#.....#.......#...#...#.#...#.#.####.#.#.#####.#.###.#.###.#.###.#.###.#######.#######.###########.#.#####.#######.#.###.#########.#.##...#.......#...#.....#.#.....#.....#.#.#.#.#...#.#.......#.#.....#.#...#.#...#.#.....#.............####.###.#####.###.#.#.#.#.###.#.#.###.#.#.#.#####.###.###.#.#.#.#####.#######.#.#.#.###.#.#.##########.......#.......#.#.#.#.#...#.#.#...#...#.#.......#.#.#.......#.......#.#.....#...#...#.#.#...#.....##########.#############.###.#.#.#.#.#.###.#####.#.#.#######.###.#######.###.#.###########.#####.#.####.......#...#...#.#.........#.#.#.#.......#.....#.......#.....#...#...#.#...#...#.......#.#...#.#...######.###.#.###.#.#######.###.###.#.#############.#########.###.#.#.###.#######.#######.###.#.#.###.##.....#...#.#.#.#.#.#.......#...#.#.......#.......#.....#...#...#.........#.......#.........#.#.#...######.#.#####.#.#.#.###.#####.###.#.#######.###.#####.###.#######.###.#####.#####.#.#####.#####.#.####.#.......#.............#.#.#.#.#.#...#.....#...#.......#.#...#.#...#.#...#.#.#.....#.#.....#...#.#.##.#.#.###############.###.#.#.#.#.#######.#.###.###.###.###.#.#.#.###.###.###.#.###.#.#.#####.#.###.##...#..L....#.#.....#.#.....#...........#.#.#.#...#...#.#...#.#.....#.......#...#.....#.#.....#.#.#.##.###########.###.#####.#####.#######.###.###.###.###.#####.###########.#######.#.#####.#####.###.#.##.#...#.....#.....#.#.......#.......#.......#.#.#.......#.#...#.....#.......#...#.....#...#.......#.####.#.###.#####.###.#.###.#####.###.#####.###.#.###.###.#.#.#.#.###.#.#####.#####.#####.###.#####.#.##.#.#.#.#.#.......#.....#.......#.....#...#...#.....#.......#.....#.#.#...#.#...#...#...#.#.#...#...##.#.###.#.#####.#.###.#############.#####.#.###.#######.###.#.#.#########.#.#.#.#.###.#.#.#.#.########.......#...#.#.#...........#.#...#...#.#.#...#.....#...#...#.#...#...#.......#.....#.#.#.....#.#...##.#.#######.#.#########.#####.#.#.#####.#.###.#####.#.###.###.#######.#########.#.###.#######.#.#.####.#.......#.#...#.......#.#...#.#.#...........#.#...#.#.....#.#...#...........#.#...#.#.......#.....####.###.###.#.###.#####.#.###.#.###.###.###.###.#.#.#.#######.###.###.###.###.#####.#########.###.####.....#.....#.#.#.....#.#...#.#...#.#...#...#.....#.#.....#.....#...#...#.#.#.#.#.#.....#.....#.....##.#.#.#.###.#.#.###.###.###.#.###.###.#####.#.#####.#.#.#####.#####.#######.#.#.#.###.#####.###.#.#.##.#.#.#...#.....#.....#.........#.#.#...#.#.#...#.#.#.#...#.#.#.........#...........#.......#...#.#.##########.#.###.###.###.#######.#.#.#.###.#.#.###.###.###.#.###.###.###.#.#.#######.#.#.###.#.###.####.........#...#.......#.......#.....#.....#.#.....#.....#.#.....#...#.....#.....#.....#...#...#.....######################################################################################################';\r\nms=reshape(s12,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9626 % Lambda12 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9626 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 13[101x101]/9994\r\n%Lambdaman 13  optimal solution 9562\r\ns13='######################################################################################################...#...#.........#.#.........#.#.#.#...........#.#.#.#...#.........#.#...#.......#.#.........#.#...##.#.###.#.#########.#####.#####.#.#.###.#######.#.#.#.#.#########.###.#.#.###.#####.#.###.###.#.###.##.#...#.....#.#.....#.#.#.#...#.....#.....#.#...#...#...#.#...#...#.#...#.#...#...#.#...#...#.#.....##.#####.###.#.#.#####.#.#.###.###.#.#.###.#.###.#.###.#.#.#.#####.#.###.###.#.#.#.#.#.#######.###.#.##.........#...#.....#...#.#...#.#.#...#...#.#.......#.#...#.....#.........#.#.#.#...#...#.......#.#.##.#.#########.#.###.###.#.#.###.#######.#.#.###.#.###.#.#.###.#.###.#######.#.#.#.###.#######.#.#.####.#.....#...#.....#.#.#.#.#.#.........#.#.....#.#.#...#.#...#.#.......#.....#...#...........#.#.#...######.#.#.#.#.#######.#.#.#.###.###.###.#.#####.#.###.###.###.###.###.#########.#.#.#############.####...#.#...#.#.#.#.#...#...#.....#.....#.#.....#.#.#.#.#.....#...#.#.....#.......#.#.............#.#.####.#####.#.###.#.###.#.#.#.#.#.#####.#.#######.###.#####.###.###.#.###.#.#####.#####.#######.###.#.##...#.....#.#.#.#...#.#.#.#.#.#.#.#...#.#.....#...#.#.........#.#.#.#.#.#.#.......#.....#...#...#...####.###.#####.#.###.#.###.#####.#.#######.#####.###.###.#.#####.#.###.###.#.#.#.#########.###.###.#.##...........#...#.....#...........#.....#...#.......#...#.#...#...#.#.#...#.#.#.......#.......#...#.##.#.#.###.#.#.#####.#.#.#####.#######.###.###.#.#.#.#########.###.#.#.#########.###.#.#######.###.####.#.#.#...#.#.......#.......#.#...#.........#.#.#.#.#.#.#.#.....#.#...#.#.#.#.#.#...#.#.#.#.....#...####.#######.#.#.#.###.#########.#.#.#####.#########.#.#.#.#.###.#.#.#.#.#.#.#.#####.###.#.#####.#.####.....#.......#.#.#.....#.#...#.#...#.......#.......#.#.#.....#.#...#.#.....#...#...#...#.........#.##.#.#.###.###.#####.#.###.#.#######.###.#######.#.#.#.#.#.#.#####.###.###.#####.###.#.#####.#####.#.##.#.#.#...#.....#...#.....#...........#.#.#.....#.#.......#...#...#.#.............#.#.........#.....######.###.#########.#.###.###.#.###.#.###.#.###.#.#.#########.#.###.###.###.#.###.###.#####.#######.##...#...#.#.......#.#.#.....#.#...#.#.#.#...#.#.#.#.#...#...#.#.#...#.#...#.#.#...........#...#.....####.#####.#.#####.#########.#.#.#.#####.#.###.#.#.#####.#.###.#.#.###.###.#######.###.#.##############.....#...#.#...#.#...#...#...#.#...#.......#...#.#.#.......#.#.#...#.....#.#.......#.#.....#...#...##.###.###.#.#.#.#.###.###.###.#.###.###.#######.###.###.#####.#####.#.#####.#.#.#####.###.###.###.#.##...#...#...#.#.#...#.#.....#.#...#...#...#.#...#...#...#.#...#.#.#.....#.#...#.#.......#.....#...#.####.#.###.#####.#####.#.#####.#####.###.###.#######.###.#.###.#.#.#.###.#.#.#######.#####.#####.######...#...........#.#.#.#.........#.....#...#.#...#...#...#...#.#.....#.#.#.#.#...#.....#.#...#.#.#...######.#######.###.#.#.###.#.#######.###.###.#.###.###.#.#.###.#.###.#.#.#.###.#######.#.#.#.#.#.#.####.....#.#.#.....#.#.....#.#.#.#.#...#.#.#...#.........#...#.....#.#...#.#.#...#.......#...#.#.......####.###.#.#.###.#.#.###.#.###.#.#.#.#.#.#.###########.#####.###.#.#.#####.#.#####.#####.#.#####.#.####.....#...#.#.#.#...#.#...#...#...#.....#.....#.#...#.....#.#.....#.#.#.#...........#...#.#.....#...######.#.#.###.#######.#####.#.#.#.#.#####.###.#.###.###.#####.#.#####.#.#.#####.###.###.#.#####.###.##.#.#...#...#.........#.#.#.#...#.#.......#...#.#.......#.....#.#...........#.#.#...#...#...#...#...##.#.###.#.#.#.#.#####.#.#.#.#.#######.#########.#.#####.#.#########.###.###.#.###.#.#.###.###.###.####.......#.#.#.#.#.#.#.#.#...#.....#...#...#.#...#.#...#.#.....#...#.#.#...#.#.....#.#.#.........#.#.####.#.###.#######.#.#.#.#.#.###.###.#####.#.#.###.###.#.#.#.#.#.###.#.#.#.###.#########.#.#########.##...#.#.....#.......#.#.#.#.#.#.#...#.#.#...#.#.#...#...#.#.#.....#...#.#...#.......#.#.#.#...#.#...##.#.#####.###.#######.#.#####.#####.#.#.#.###.#.#######.###.#########.#.#############.#.#.###.#.###.##.#.#.#.....#...#.#.....#.......#.#.#.......#.#.............#.......#.#...#.......#.#...#...#.......####.#.#.###.#.###.#####.###.###.#.#.#####.###.#.#.###.#########.###.#########.#.#.#.#####.#######.####.#.#.#.#.#.#.#.........#.#.#...#.#.#.#.....#.#.#.#...#...#.......#.#...#.....#.#.#.....#.#.........##.#.#.###.#.#.#####.#.###.###.#.#.#.#.#.#####.#######.#.#########.#.###.#########.###.#.###.#######.##.......#.#...#...#.#...#.....#.....#.....#.#.#.#...........#.....#.....#...#.......#.#...#.....#...######.###.###.###.#.#.###############.#####.#.#.#######.###.#######.#######.#.#.#######.#######.###.##...#.#.#...#.....#.#.#.....#.....#.#...#.#.#.#...........#.......#.....#.#.#.#.#.................#.####.###.#.###.###.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#####.###.###.#.#.###.###.#.#######.###.####...#.....#...#.#...#...#.....#.#.....#.#.........#.#.#...#.......#...#.....#.....#.#.....#...#.#.#.####.#.#.###.###.#.###.###.#.###.###.#.###.#.#######.#.#####.###.###.#.#######.#.###########.###.###.##.....#.........#...#.....#...#.#.#.#.#.#.#...#...#.#.....#...#.....#.#...#...#...#.........#...#...########.#######.###.#.###.#.###.#.#.#.#.#.#####.###.#######.###.#.#####.#########.#.#.#.#.###.#.#.####.#.#.#...#...#...#...#...#.#.#.#...#...#.#.#.......#.......#.#.#...#...#...#.#.#...#.#.#.#...#...#.##.#.#.#.#.###.#.#######.#.###.#.###.###.###.#####.###.#.#####.#.###.###.#.###.#.###.#############.#.##.....#.#.#.......#...#.#.#.......#.#.#...#...........#.#...#...#.........#.....#...#...........#...######.###.###.#######.#######.###.###.#.#.#####.#.#####.#.#########.#######.#######.#######.#.#####.##.........#.#.........#...#...#.........#.....#.#.#...#.#.............#.........#.......#.#.#...#.#.####.###.###.###.#.#.#####.#######.###.###.#####.###.###.#####.#################.#.#.#.###.###.###.#.##.#...#.#.....#.#.#.#.....#.....#.#...#...#.......#.#.#.....#.#.#...#...#.........#.#.#.......#.....##.#####.#.#.#####.###.###.###.#########.###########.#.###.#####.#.#.#.###.#####.#.#####.#####.#.######.#.......#...#...#.....#.#...#.#.#...#.#.....#...#.......#...#...#...#.#.#.....#.....#.....#.......##.###.###.#####.###.#####.###.#.#.###.#.#.###.#.#####.#####.#####.#####.#####.###.#.#####.###.########...#.#...#...#...#...#.............#.......#.......#...#.....#.....#...#.#.#.#...#.#.#.#...#.....#.##.#####.###.###.###.#####.#####.#####.###.#####.###.#########.###.#.#.#.#.#.#######.#.#.###.#######.##.......#.....#...#.....#...#.....#.#.#.#...#...#...#.....#...#...#.#.#.....#.....#...#...#.....#.#.##.#.#####.###.#.#######.#######.###.#.#.#####.#######.#####.#####.#.###.###.#.###.###.#.###.#.#.#.#.##.#.#.#.....#...#.........#.......#.....#...#...#.....#...#.....#.#...#.#.#.#.#.#...#.#...#.#.#.#...####.#.#####.###.#.#####.#########.#########.#.#.#.###.#.#######.#.#.#.###.#.###.#.###.###.###.###.####...#.......#...#.....#.#.............#.#.....#.#.#.......#.#...#.#.#.#.#.#.#...#...#.........#.....##########.###.#.#.###.#.###############.#.#####.#########.#.###.#.#.###.#.#.#.#####.#.###.###.###.####.........#.#.#.....#.#...#.........#.........#...#.....#.....#...#...#.......#...#.#.#...#.#.......##.###.###.#.#.###.#############.###.#.#######.###.###.#####.###.#.#####.###.###.###.###.#.#.###.###.##...#...#.#.#.#...........#.....#...........#.#.#.#.....#...#.#.#.#.#...#...............#.....#...#.##.###.#####.#####.###.###########.###.#####.###.#######.###.#.#.###.#.#.#.###.###.#.###.#####.#####.##...#.#.#...........#.#.....#.#...#.#...#.....#.......#.#.........#.#.#.#.#.....#.#.#.....#.#.....#.########.###.#.#######.#.#.###.#.#.#.#.###.#.###.#####.#.#.#.###.#.#.#####.###########.#.###.###.#.####...........#.#...#.....#.#.#...#...#.#...#.#.....#.#L....#.#...#...#.........#.#.....#...#...#.#.#.##.###.#.#######.#########.#.#####.#####.#.#####.###.###.#######.#.#.#.#######.#.#.###.#####.###.#.#.##...#.#.#.#.....................#.....#.#.#...#.#...#.....#.....#.#.#.#.....#...#.#.#.......#.#.#...####.#####.###.#.#.###############.#######.###.###.#####.#######.#.###.#.###.#####.#.#.#.#.###.#.######.#...#...#...#.#...#.#.........#.#.#.............#.#...#.#.#...#.....#...#.....#...#.#.#...#...#.#.##.###.#.#.###########.#.###.#######.#.###.#.#.###.#.#####.#.###.###.#.#.###############.###.#####.#.##.#.....#.#...#.#...#.#.#.#.....#.....#.#.#.#...#.........#.......#.#.....#...#.#.#.#...#.#.......#.##.#.#.#####.###.#.###.###.#.#.#######.#.#.#.#.#######.#.#.#############.###.#.#.#.#.#.###.#####.###.##...#.....#.....#.....#.....#.....#.....#.#.#.#.....#.#.#.................#.#.....#.#.#...#...#...#.######.#.###.#.###.#####.#############.###.#.#.#####.###.###.#.#########.#########.#.###.###.#.#.###.##.....#...#.#...........#.#...#.#.#.#.#.#.#.#.#.#...#.#.#.#.#.#.#.#...#...#.......#...#...#.#.......####.#.#####.###.#####.#.#.#.#.#.#.#.#.#.#####.#.###.#.###.###.#.#.#.#######.#########.###.#.#####.####.#.#...#...#...#...#.#.#.#.#...#...#.#.....#.......#.#.....#...#...#.#.......#.........#...#.......##.###.#.#.###.###.#####.#.#.#.#####.#.#.#############.#.###.#####.#.#.#.#.#.#####.#####.###.###.#.####...#.#.#...#.#...#...#.#.#.#.................#.#.#.#.....#.....#.#...#.#.#.......#...#.......#.#...##.#.###########.###.#.#.#.#.#.#####.###########.#.#.#.###.#.#####.#####.#.###.###.#.#.#.#####.###.#.##.#...#.#.#.....#...#.......#.#...#.........#.#...#.#.#...#...#.......#.#.#.....#.#.#.#.....#.#...#.####.###.#.#####.#####.###.###.#.###.#####.###.#.#.#.#########.#.#######.###########.#.#########.######.#.#.......#...........#...#.#.........#.......#.#...#...............#.............#...#.#.#.......##.#.#.###.#.#####.#####.#######.#####.###.#######.###.#.#.#####.###.#######.#.###.#.#####.#.#.#.###.##.....#.#.#.....#.#...#.#...#...#...#.#.#.......#.#.....#.#.......#.........#...#.#.#...#.#...#...#.########.###.#.###.#.#.#.###.#.###.#.###.#.#.###########.#######.#######.###.#######.#.###.#####.#.####.....#.....#...#...#.#.#.#.#.....#.#.....#.....#.......#.......#.#...#.#...#.....#.......#...#.#...##.#.#.###.###.#.###.#####.#.#.###.#####.#.#.#####.###.#.#####.###.#.#.#.#.#####.#.#.#.#.###.#.###.####.#.#.....#...#.............#.#.......#.#.#.#.....#...#.....#...#...#...#.#.....#...#.#.....#.#.....######################################################################################################';\r\nms=reshape(s13,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9562 % Lambda13 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9562 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 14[101x101]/9994\r\n%Lambdaman 14  optimal solution 9478\r\ns14='######################################################################################################.......#.......#.......#...#.....#.....#.........#.#.........#.......#.#.....#.#.....#.#.....#.....##.###.#######.#.#####.#####.###.###.#####.#.#.###.#.#.###.###.#.###.###.#.#.###.#.###.#.#.#.#.###.####...#.....#...#...#.#.......#.....#...#.#.#.#.#...#...#.#.#...#.#...#.#...#.#...#.#.#.#.#.#.#.......##.#.###.#.#.#######.#.#.#.#####.#.###.#.#.#####.#######.#.#####.###.#.###.#####.#.#.###.#.#.#####.#.##.#...#.#...........#.#.#.....#.#.#.....#...#.#...#.#.....#.#.#.#.................#.#.....#.#.....#.####.###.#######.###.###.#####.#.#.#.#.#.###.#.###.#.#####.#.#.#######.#.#########.#.#.#.#########.####...#.......#.....#...#.....#...#...#.#.....#.......#.#.....#.....#...#...#...#...#...#.........#...######.#########.#####.#.#.#.#####.#####.#.#####.#####.#.###.#.###########.#.#.###.#.###.#######.###.##.#.#...#.#...#...#.....#.#...#...#.....#.#.....#...#...#.......#.#.....#.#.#.#...#...#.#.#.#...#.#.##.#.#####.###.###########.#############.#.###.###.###.#########.#.#.###.###.#####.#######.#.#.#.#.#.##.....#.....#.......#.............#.#...#.#.#.#.....#...#.....#.#...#.......#.............#...#.#.#.####.#####.###.#####.#########.#####.#.###.#.#####.###.#####.#.#.#.###.###.#####.###.#####.###.#.#.#.##.#.....#.........#.#...#...........#.#...#.....#.#.#.#...#.#.......#...#.....#.#...#.....#.#.#.#.#.##.#####.#.#.#.###.#.###.#####.#######.#######.#.#.#.###.#.###.#.###########.###.#####.#.#.#.#.#.#.#.##.....#.#.#.#...#.#.#...........#.#.....#.....#...#.....#...#.#.#.....#.............#.#.#.....#.#...####.#.#.#.#.#####.#####.###.###.#.#####.#.#####.###.###.#.#.#####.###.#######.#.#.#####.##############...#...#.#...#...#.#.#.#.....#.....#.....#.........#...#.#.#.....#...........#.#.#.........#...#...####.#.#.###.###.#.#.#.#####.#.#.#######.###########.###.#######.#.#######.###.#.#######.#####.#.#.####.#.#.#.#.....#.#.#.#...#...#.#.#...#...#...#.#.#...#.#.....#.#.#.......#...#.#.....#.....#...#.....##.#####.###.#####.#.#.#######.#####.#####.#.#.#.#####.#.###.#.#.#####.#.###.###########.#######.######...#.........#...........#.......#...#...#.#.#.#.#.#.....#...#.....#.#.#...#.....#.#...#.#.#.....#.##.#.#.###.###.#############.###.#.#.#.#####.#.#.#.#.#######.#####.#############.#.#.###.#.#.#.###.#.##.#.#.#.#.#...#...#.......#.#...#.#.#.#.#.#.....#.#.#.#.....#...#.........#.....#.........#.#.#.#...####.#.#.#########.#.#####.#####.###.###.#.#.#.#.#.#.#.###.#.###.#.#################.#######.###.#.####.....#...#.#.......#.#.#...#.#...#...#.....#.#.#...#.#.#.#.#...#...#.#...#.......#.....#...#.#.#...####.###.#.#.#######.#.#.###.#.#####.#####.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.###.#.#######.#.#.#.####.......#...........#.......#...#.....#.#.#...#.#.#...#...........#.#...#.#.#.#.....#.#.#.#...#.....########.###########.#.#######.###.#.###.#######.#.###.#.###.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.##.......#.#...#.#...#.#.....#...#.#.........#...#...#.#.#...#.......#...#.....#.#.#.#.#...#.#...#.#.##.###.###.#.#.#.#.#.#.###.###.#####.#######.#.###.###.#####.#####.###.#####.###.#####.#.#####.#.###.##...#...#.#.#...#.#.#.#.......#...#.#.......#.....#...#...#.....#...#...#...#.#...#.#.#.#...#.#...#.##.#.#####.#.###########.#########.###.#.#####.#.###.#.#.#########.###.#######.#.###.#.#.#.#######.####.#...#.....#.#.#.#...#...#.#.........#...#...#.#...#.....#.#.....#...#.#.....#.........#...#...#...####.#######.#.#.#.#.###.###.###.#.#.#####.###.#.###.#.#####.#.#.#######.###.#########.#.###.###.#.#.##.#...#.#.....#...#.....#.....#.#.#.#.#.#.....#.#...#.#.......#.#.....#.....#.....#.#.#...#.#.....#.##.#.###.###.###.###.#.#####.###.#####.#.#.#####.#####.#.#.#####.#.#.#.###.#.#.###.#.#.#.#.#.###.######...#.....#.......#.#.......#.........#.....#...#.#.#...#.#...#.#.#.#...#.#...#...#...#.#.#.......#.##.###.###.#.###.###.#.#.###.#####.#.#.#####.#.#.#.#.###.#####.#.#.#####.###.#####.###.###.#.#.###.#.##.#.#...#.#...#.#...#.#.#...#.#.#.#.#.#.....#.#...#.......#.#.....#.....#...#.....#.....#.#.#...#...##.#.#.###.#.#####.#.###.#.###.#.#####.#######.###.###.#####.#####.#######.#.#.#########.#.#.##########...#.#.....#...#.#.#...#...#...#...#.#.....#.#..L#...#...#.....#...#.....#.#.#.........#...#.......####.#.###.###.###.###.###.#.#.#.###.#.#.###.#########.#.#######.#.###.###.#####.#.#.###.#######.###.##.#.#...#.#...#...#...#...#.#.#.......#...#...#...#.......#...#.....#.#.......#.#.#.#.....#.......#.##.#.#####.#.#########.#.###.#.#.#####.#######.#.###.#####.###.#.#.#####.#######.#.###.#####.###.######.....#...............#.#.....#.#...#...........#.......#.....#.#.#...........#.#...#...#.#.#...#...##.###.###.#.###.#####.#############.#.#####.###.###.###.#########.#####.#############.###.###.#.###.##...#.....#...#...#.......#.#.#.#...#...#.#...#...#.#.........#.#.....#.#.#...#.....#.....#...#...#.######.#.#######.#######.#.#.#.#.###.###.#.###.#####.#####.#####.###.#.#.#.#.#####.###.#.#.#.#####.#.##.....#.#.....#.#.#...#.#.#.......#.......#.#.#.#.#...#.#.........#.#...............#.#.#.#.....#...####.###.#.#.#.###.###.#.#######.#######.###.###.#.###.#.#.#############.#.###.#.#####.###.#.##########.#.#...#.#.#.#.#.......#...#.......#...#.........#...#.......#.#.#.....#...#.#...#.....#.#.....#...##.#.###.#.#.###.###.#.#####.###.###########.#####.#########.#.#.#.###.#.#.#.#######.#.#.###.#.#.###.##...#.#...#...#.#...#...#.#...#...#.#.....#.#.....#.......#.#.#.......#.#.#.#.......#.#.....#.#.....######.#.###.#.#.#####.###.#.###.#.#.#.###.#####.#.#.###.#########.#######.###.###.#######.###.###.####.......#...#.......#.......#...#.#.#...#.#...#.#...#...#...#...#.#.....#.....#...#.......#.....#...##.#####.###########.###.###.#.#.###.#.#####.#.#######.#.#.###.#.#####.#.#.#####.###.#.#.#######.#.#.##.#.#.......#.....#.#...#.....#...........#.#.#.....#.#.....#.#.#.#.#.#.#.#.#.....#.#.#.#.#...#.#.#.####.#####.#####.#########.#######.#.###.#####.#.#.###.###.###.#.#.#.#.#.###.#.#.#.#.#####.#.###.######...........#...#.#...#.........#.#...#...#.#.#.#.....#.....#.#.#.#.#.#.......#.#.#.#.#.....#.#.#...######.#####.#.###.#.#############.#######.#.#.###.#.#.#####.###.#.#.###########.#####.#.#.#.#.#.#.#.##.........#...#.#.#.#...#.#.#.....#.........#.#...#.#.#...#...#.....#...#.....#.#...#...#.#...#...#.######.#######.#.#.#.###.#.#.###.#.#.###.#.###.###.#.###.#######.###.#.###.#.#####.###.#####.###.###.##.#.#.#.....#.#.............#...#.#...#.#...#...#.#.......#.#...#...#...#.#...#.....#.#.....#.#...#.##.#.#.###.###.#.#########.#.###.#.#####.#####.#.#.###.#.###.#####.###.#####.###.###########.#.###.####...........#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#.........#.......#...#...#...#.....#.#.#.....########.#.###.###.###.#####.#.#####.#.#.###.#.#######.#######.###.#.###.#.###.#.#.#######.#.#.###.####.......#.#.#...#.....#...#...#.#.#...#.....#...#...#...#.....#.#.#.#.#...#...#...#.....#...........####.#######.#.#.#.###.###.###.#.#.#.#############.###.###.###.#.#.###.#.#.#######.#.#.###.#.#######.##.#.....#.....#...#.#...#...#...#.....#...#.....#.....#.#.#.........#.#.#.#.....#.#.#.#...#.#...#...##.#.#.#.###.#######.#####.#.###.#####.###.#.###.###.###.###.#######.#.###.###.#.#.#.###.###.#.###.####...#.#.#.#.#...#.....#...#.......#.#...#.#.#.#...........#.#.....#...#.....#.#.......#.#...#...#.#.##.#.#.###.#.#.#.#####.#.#.#.#.###.#.#####.###.#.#.#.#######.###.###########.#####.###########.###.#.##.#.#.#...#...#.#.....#.#.#.#.#.#.#...#...#.....#.#.....#...#.........#.....#.........#.........#...######.#.#.#.#.#####.###.###.###.#####.#.###.#######.#.###.###.#.#.#.###########.#.#######.#.#.#.#.#.##.....#.#...#...#.....#.#...#...#...#...........#...#.#.....#.#.#.#.#.#.#.......#.....#...#.#.#.#.#.##.#.###.#######.#.###########.#####.#.###.#.###.###.#####.#.#####.###.#.#.#.###.###.#####.#########.##.#...#...#...#...#.....#.#.....#...#.#...#...#...#.#...#.#.......#.#.....#.#.....#...#.....#...#...############.###.#######.#.###.#####.#################.#####.#.###.#.#.#########.###.#.###.###.#.###.##.........#.......#...#.....#.....#.......#.#.#.#...#.......#.#.#...#.#.#.........#.#.........#.....##.#########.#####.###.#.#####.###.#.###.#.#.#.#.###.#####.#####.###.#.#.#########.#.#####.#.#.###.####.#...#.........#...#.....#.#.#.......#.#.#...........#.#.#.......#...#.#...#...#.#.#...#.#.#.#.....##.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#######.#######.###.#.#.###.#.#.#.###.#.#.#.#.#####.##.#.#...#...#.#.......#.........#.#...#...#.#.#...#.#.............#.#...#...#.#.....#.#...#.#.....#.##.#.#.#######.#.#######.###.#######.###.###.#.###.#.#.#######.#.#####.###.#.#############.#.#######.##...#.#.......#.#.......#.#...#...........#.#.#.#...#...#.#...#...#.#.#.#.#.#...#.....#...#.#...#...####.#.#######.###.#.#####.#.#######.###.#.###.#.#.#######.#####.###.#.#.###.###.###.#######.###.#.####...........#.#...#...#...#...#.#.#.#...#.....#.#.......#.#...#.......#.....#.#...#.#.....#.#.#.#.#.######.#####.#.###.###.#.###.###.#.#######.#####.###.###.#.#.#.#####.###.###.#.###.#.#.###.###.#.#.#.##.#.#.#.....#.......#.....#...#.....#...#.......#...#.......#.#.#...#...#...#.#.#...#.#...#.#.......##.#.###.#.#.#.#####.#####.#.#####.###.###.#.#.#######.#.#####.#.#######.###.#.#.#.###.###.#.###.###.##...#...#.#.#.....#.....#.#.#...........#.#.#.#.#...#.#...#.......#.......#...........#...........#.##.###.###.#.#########.#.#######.#.###.#.###.#.#.#.#.#########.###.#.#.#########.###.#######.###.#.####.....#...#...#.....#.#...#.#...#...#.#.#.#.#.#...#.#...#.....#.#.#.#.....#.#...#.......#.#.#...#.#.##.#####.#####.#.###########.#.#####.#.#.#.###.#.#######.###.###.#.#.#.###.#.#.#####.#.#.#.#######.#.##.#.....#.#.#.#.....#.#.........#...#.#.#...#.......#...#.#.#.....#.#.#...#.#...#...#.#.#.#.#...#...####.#.#.#.#.#######.#.#####.###.#.#.#.###.#######.#####.#.###.#####.#####.#.#########.#.#.#.#.###.#.##.#.#.#.........#.#...........#.#.#.#.#.#...#.....#...#...#.#.#.....#.....#.....#.....#.....#.#...#.##.#####.#.#####.#.###.###.###.#######.#.#.#.#.#.#.#.#####.#.#.###.###.#####.###.#.###.#####.#.#.###.##.......#.#.........#.#...#.....#.........#...#.#...#...........#...#.....#...#...#...#.....#.....#.######################################################################################################';\r\nms=reshape(s14,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9478 % Lambda14 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9478 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\n\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 15[101x101]/9986/.33s\r\n%Lambdaman 15  optimal solution 9584\r\ns15='######################################################################################################...#.#...#.....#...#.......#...#.#.#.#.#.........#...#.......#.#.#...#...#...#...#.#...#.#.......#.##.###.#.#####.###.#.#####.#.#.###.#.#.#.###.#.#.#.#.###.#######.#.#.#.#.###.#.#.###.#.#.#.#.#.#.###.##.#...#.......#.#.#.......#.#.#.......#.....#.#.#.#.....#...........#...#...#.#.....#.#.#.#.#.#.#...##.###.###.#####.#####.#######.###.#.#####.#.###########.#######.#############.###.###.###.#.#.#####.##.#.#.............#.#.#.#.#.......#...#...#.#.........#.......#...........#...#.#.#.........#.......##.#.#####.###.#####.#.#.#.#.###########.#####.###.#.###.#.#########.###.#.#.###.#.###.###########.#.##...#.....#.....#.....#.....#...#.......#...#...#.#.#.#.#.....#.#.....#.#...#.#.......#.........#.#.####.###.#############.#.#####.###.###.###.#########.#.###.#####.#.###.###.#.#.#.#############.###.####.#.....#.#.#...#...#...........#...#.............#...........#...#.#.#...#.#.#.......#.....#...#...##.#.#####.#.#.###.#######.###.###########.#.#####.###.#.#####.#.#.#.#.###.#.#.###.#.###.#####.########.....#.....#.#.............#.....#.#.....#.#...#.....#...#.#...#...#.#.#.#.#...#.#...........#.....##.###.###.#.#.#.#.#.###.###.###.###.#.#########.#.#.###.#.#.###.#.#.#.#.#####.#####.###.#.###.###.#.##.#.......#.....#.#...#...#.#.....#.#.#...........#.#...#.#.#...#.#.#...#.......#.#.#...#.#.......#.######.#.#.###.#####.#######.#####.#.#.###.#####.#########.#.#########.#.#.###.#.#.#######.#.#.#.######.#.#.#.#...#...#.#...#...#...#.#.#.#.#...#...#.#...#...#...#.....#...#...#...#.........#.#.#.#.....##.#.#.#########.#.###.#.###.#.#.#.#.#.#####.#####.###.#####.###.#####.###########.#.#.###########.####...#.....#.#.#...#.....#...#.#...#.#.#.....#.#.....#.......#.....#...#...#...#.#.#.#.#.#.#.........##.###.###.#.#.#####.#####.#####.###.#.#.#.###.#.#####.#####.#.#.#####.#.#####.#.###.###.#.###.#####.##...#...#.#...#.........#...#...#.....#.#.....#.........#...#.#...#...#.#.#...#.......#...#.#.....#.####.###.###.###.#.#########.#.#########.#############.#.###.#####.#.###.#.###.#####.#.#.###.#####.####.........#.....#.....#...#.#.#.............#.....#...#...#.....#...#.......#.....#.#.#.............####.###.#############.#.#####.#####.#####.#.#.#######.#####.###########.#########.###.#.###.#.#####.##.#.#.....#...#...#.#.#...#.......#.#...#.#.#.....#...#.......#.............#.#...#.#.#...#.#.#...#.##.#######.#.#####.#.#.###.###.#####.###.#.#######.###.#####.#.#######.#######.###.#.#.#.###.#.#.###.##.........#.......#.#.......#.#.....#.#...............#.#.#.#.#.....#.#.#.#...#...#...#.#.#.#.....#.########.#######.###.#####.#####.#####.#.###.#######.###.#.###.###.#.#.#.#.#.#####.#.#.###.#########.##...#...#.............#.#.....#.#.#.....#.......#.#...#.#.#.#.#.#.#.........#...#.#.#.........#.#...##.#.#####.###.#.###.###.#.#.###.#.#.#.###.###.###.#.###.#.#.###.#.#.#####.#.#.#.#.#.#########.#.#.#.##.#.#.....#...#.#...#...#.#.......#.#.#.#.#.#.#.#...#.......#.#...#...#.#.#.#.#...#...#.#...#.....#.####.###.###.#.#.###.###.###.#.#######.#.#.#.###.#######.###.#.#.#.#####.###.#.#.#.#.###.#.###.#.######.......#...#.#.#...........#.#...#.#.#...#.....#.......#...#...#.........#...#.#.#...#.#.....#...#.####.#.#.###.#########.#.#.#.#.###.#.###.#.#.#.#.#.#####.#######.#####.#######.###.###.#.#.#.###.###.##...#.#...#...#...#.#.#.#.#.#.#.......#.#.#.#.#.#...#.....#...#.#.#.#.#.#...#.#.#.....#.#.#.#.#.....##.###.###########.#.#.#######.#####.#####.#####.#####.#.#####.###.#.###.#.###.#.#.###.#.###.#.#.#.####.#...#.#.....#.#.#.#...#.#.....#.#.....#.#.......#...#.......#.....#...#.....#...#.......#.#...#.#.####.#.#.#.###.#.#.#.#.#.#.###.###.###.###.#.###.#.#####.#.#.#.#.#.#.###.#########.###.###.#######.#.##...#.#...#...........#.#.#...#.........#...#...#.#.#...#.#.#...#.#.#.........#...#.....#.#.#.#.#...########.#####.#.###.#####.#.#######.#.###.#.#####.#.###.#.###########.#.###.#.#.#########.#.#.#.###.##.#...#.....#.#.#...#.......#.....#.#.....#...#.#.#.#...#.#.#...#.....#.#...#.#...#.#.#.#.#.#.#.#...##.###.#.#.#######.#.#########.###.###.#####.#.#.#.#.#.#####.###.#.#.#####.#####.###.#.#.###.#.#.#.####.#...#.#.#.#...#.#.............#.#.....#...#.#...#...#...#.....#.#...#.......#.#.........#.........##.#.#.#.###.###.###.###.#.#.###########.#.#####.#####.#.###.###.#.#.#########.#.###.#.#####.#.#.######.#.#.#.#...#.#.....#...#.#...#...#.....#.#...#.........#.#.#.#.#.#...#...#.....#...#.#...#.#.#.#...##.###.#.#.#.#.###.#############.###.#######.###.#.#.###.#.###.#.#.#####.###.###.###.#.#.#######.#.#.##.....#...#...#...#.#.#...#.....#.......#.....#.#.#.#...#...#.#.......#.......#...#.#.......#.....#.####.###.#.###.###.#.#.###.#.###.#########.###.###.#########.#.#.###########.#######.#############.####.#.#...#...#.#...........#...#.........#.#...#.#...#.........#.......#...#...#.#.....#...#.....#...##.#.#####.###.#########.#.###.###.#.###.#.###.#.#.#####.###.###.#.#####.#.###.#.#####.###.#.#######.##...#...#...#.#.........#.#...#.#.#.#.#.....#...#.....#.#...#...#.#.....#.#.........#...............##.#####.#.#########.###.###.###.#####.#.#####.#.###########.#.###.#######.#################.#.#.#.#.##...........#...#...#.#.#.....#.....#.......#.#.#...#.#.#.#.....#.#...........#.......#...#.#.#.#.#.######.#####.###.###.#.###.#.#######.#.#.#.###.###.#.#.#.#.###.#######.###.###.#####.#####.#.##########.........#.#...#.....#.#.#...#.....#.#.#.#.......#.#.#.#.....#.#.......#.#...#.#.#.......#.........############.#.###.#####.###.#####.#####.#######.#####.#.###.#.#.###.###.#####.#.#.###.###.#.###.###.##...#...#.....#.#...#...#.........#.#.#.#...........#...#...#.......#.......#.#.#...#.#.......#...#.####.###.###.#.#.###.#.###.###.#.#.#.#.###.#########.#.###########.###.###.#####.#.###########.########...#.#.....#.#.#.....#.#.#.#.#.#.#...#.....#.#.........#.#.........#.#.......#...#.#.......#.#.#.#.####.#.###.#.###.#.###.#.###.#.###.###.###.#.#.#.###.###.#.###.###.###.###.#.#####.#.#####.#.#.#.#.#.##.#...#...#...#.#.#.#.#...#...#.....#...#.#...#.#...#...#.#...#...#...#...#.#...#.........#.#.......##.#.#.###.#.###.###.###.###########.#.###.#.#########.###.###.#.#.#.###########.#.#########.###.#.####...#.#.#.#.....#.#.........#.#....L#...#.#...#.......#.#.....#.#.#.#.........#...#...#.#.......#...######.#.###.#.###.#######.#.#.#.#####.#.#########.#####.#.#.#####.###.#############.###.###.#####.#.##.#.......#.#.#.....#.....#.........#.#.....#.......#.#...#.#...#.#...#.#.#...........#...#.#.#.#.#.##.###.###.#####.###.#.###########.###.#.#.###.#######.#.#######.###.###.#.###.#.#####.#.#.#.#.#.#.####.......#.#.....#...#...#...........#.#.#.#...........#...#.......#.......#.#.#...#.#...#.#.#.......########.###.#####.#########.###.#.#.#.###############.###.#.###.#######.###.#######.#.#.#.#.##########.........#.#.#.#.......#...#...#.#.........#.....#.......#...#...#...........#.......#.#.#...#.....########.#####.#.#.###.#.#.#####.#######.#.#.###.###.#.###.#.#######.#.#.#.###########.#.#.#.#####.####.......#...#.....#.#.#.....#.....#.....#.#.#.#.....#.#.#.....#...#.#.#.#.....#.......#.#...#.#...#.##.###.#.#.###.#.###.###.#####.#.###.###.#.###.#.#.#.###.###.#.###.#####.#########.#.#######.#.###.#.##.#.#.#.....#.#...#...#...#...#.#.....#.#.....#.#.#...#.....#.#.....#.#.#.#.#.....#...#.#...#.......####.#.#####.#.#.#.###.#.###.#########.#.#.#######.###.#.#.#######.###.#.#.#.###.#######.#.#.#.###.####.#...#.#.#...#.#...#...#.#.#.#.....#.#.#.#...#.#.#...#.#.#.#...#.#.....#.......#.........#...#.#...##.###.#.#.#####.#####.#.#.###.#.#####.#####.###.#.#.#######.###.#.###.#.###.###.#.###.#####.###.###.##.....#...#.#.#.#.....#.#.........#...........#...#.#.#...#.#.#.#...#.#.#.#.#...#.#...#...#...#...#.######.#.###.#.###.#####.#.###.###.#.#.#####.###.#.#.#.###.#.#.#.###.#.#.#.#.###.###.#.#.#.#.###.######.....#...#.#.#.#.#...#.....#.#...#.#...#...#.#.#.#...........#.#.#...#.#.#.#.....#.#.#.#.#.#.#.....####.#####.#.#.#.###.#.###.#####.#.#.#####.###.#.###.#######.#.#.#.#.#.#.#.#.#.#####.#####.#.#.#.#.####.....#...#...#.#...#...#.#.#.#.#.#.....#.#.#.#...#...#...#.#...#.#.#.#...#.#.#.#.....#.....#...#...##.#.#####.###.#.###.#######.#.#############.#.#.#####.#.#.#.#####.#.#########.#.#########.###.#####.##.#...........#.#...#.....#...#.........#.....#.#...#.#.#.......#.......#...........#.#.......#.#.#.##.#.###.#.#.#.#.###.#.###.###.#######.#.#.#.#####.#.#.#######.#####.###.###.#.#####.#.#####.###.#.####.#.#.#.#.#.#...#...#.#.#...#.....#.#.#...#.#.....#.#...#.....#.....#...#...#...#.....#.......#.....##.###.###.#.###.###.###.###.###.###.#######.#.#.###.#####.#.#########.#########.###.#.#.#######.###.##.....#...#...#...#.....#.#...........#...#...#.#.#.#.#...#...#.........#.#.....#...#.#.#.#...#...#.##.#.#.###############.#.#.#.###.###.###.#.#####.#.#.#.###.###.#########.#.#############.#.#.#####.#.##.#.#.....#.......#...#.#...#...#.#...#.#.......#...#.#...#.........#...#...#...#.......#.....#...#.##.#######.#.#####.#.###.#.#.###.#.###########.###.#.#.###.#######.#.#.#####.###.#######.#.###.#####.##.#.#...........#.#.#...#.#...#...#.#.......#...#.#.....#.#.#.....#.........#.#.#...#.#...#.#.....#.##.#.###.###.#.#.###.#######.###.#.#.###.#.###.#####.#######.#.###.###.#####.#.#.#.#.#.###.#.#####.#.##.....#...#.#.#.......#...#.#.#.#.......#...#...#.....#.#.#.#.#.#.#.....#.#.#.....#...#.#.#.....#...##.#.#.###.###.###.#.###.#.#.#.###########.###########.#.#.#.###.#.#.#.###.#######.#####.#.#.###.#.#.##.#.#...#.#...#...#.....#.....#...#.#.......#.#.......#.#.....#...#.#.........#.......#...#...#.#.#.####.#######.#########.#####.#####.#.#.#####.#.#.#######.#.###.###.###.#.#####.#.#######.###.###.###.##...#.....#...#.#...#.....#.........#...#...............#.#.#.....#...#.#.#...#...#.........#.#.#...####.#.#.###.#.#.###.#.#.#.#####.#.###.###########.#.#.#####.#.#########.#.#.###.#.###.###.#.#.#.###.##...#.#.....#.#...#.#.#.#.#.#...#.#.....#...#.....#.#.....#...#.......#...#.#...#.#...#...#.#.#...#.##.#####.#.#.#.#.###.#.#####.#.#####.#.###.#####.###.#.#.#.#####.#.###.#.###.#.#####.#.#.#####.#.#.####.....#.#.#.#.....#.........#.....#.#...#.......#...#.#.#.....#.#...#...#.........#.#.#...#.....#...######################################################################################################';\r\nms=reshape(s15,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9584 % Lambda15 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9584 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-17T17:24:01.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-17T16:18:16.000Z","updated_at":"2025-12-12T15:14:10.000Z","published_at":"2024-07-17T17:24:01.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMaze#/Crawler/OptimalCrawler \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThese are believed to be optimal solutions. Post in comments if any are beat.\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":60623,"title":"ICFP2024 007: Lambdaman 1, 2, 3 Breadth Solver","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, respectively.\r\n\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\nThis challenge is to solve Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.","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: 315px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 157.5px; transform-origin: 407px 157.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 356.5px 8px; transform-origin: 356.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 332px 8px; transform-origin: 332px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, 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: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\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: 379.5px 8px; transform-origin: 379.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pathbest = Lambdaman_123(m)\r\n% Maze 1 solves in 15 so max states is 4^15=1.07e9\r\n% Each depth loop creates all new legal states from prior depth states\r\n% Maze 3 Fails miserably for pure breadth so key throat points checked for uneaten cheese\r\n%History of prior states maintained to eliminate duplicated states\r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr];\r\n bn2=nnz(m(:)==2);\r\n stateh=zeros(20000,nr*nc,'int8');\r\n spath=zeros(20000,15,'uint8');\r\n c2=nnz(m(:)==2);\r\n statec2=ones(20000,1)*c2;\r\n stateh(1,:)=m(:);\r\n sptr=1; eptr=1;\r\n enptr=eptr;\r\n depth=0;\r\n \r\n m3=nr*nc==72; % Hack for Lambdaman3\r\n \r\n while c2\u003e0\r\n  depth=depth+1;\r\n  fprintf('Depth:%i sptr:%i eptr:%i\\n',depth,sptr,eptr)\r\n  for hptr=sptr:eptr\r\n   ms=stateh(hptr,:);\r\n   \r\n   Lidx=find(ms==1);\r\n   \r\n   if m3 % Hack for Lambdaman3: Check chokepoints for completion\r\n    if Lidx==26 \u0026\u0026 nnz(ms([62 52 34])==2),continue;end %Lower grp\r\n    if Lidx==26 \u0026\u0026 ms(17)==3,continue;end % turn aroud\r\n    if Lidx==12 \u0026\u0026 nnz(ms([24 22 32 14])==2),continue;end %Left grp\r\n    if Lidx==12 \u0026\u0026 ms(11)==3,continue;end % turn aroud\r\n    if Lidx==20 \u0026\u0026 ms(29)==3,continue;end % turn aroud\r\n   end\r\n   \r\n   Cadj=ms(adj+Lidx);\r\n   msn=ms;\r\n   msn(Lidx)=3; %Lambdaman will move\r\n   for i=1:4 % UDLR\r\n    if Cadj(i)==0,continue;end % Ignore into wall Cadj==0 movement\r\n     Lidxn=Lidx+adj(i);\r\n     msn(Lidxn)=1;\r\n     \r\n     c2=nnz(msn==2);\r\n     ptr1=find(msn==2,1,'first');\r\n     ptr2=find(msn==2,1,'last');\r\n     cvec=statec2(1:enptr)==c2; % Reduce vector check only to c2 qty vectors\r\n     cvec=cvec \u0026 stateh(1:enptr,Lidxn)==1 \u0026 stateh(1:enptr,ptr1)==2 \u0026 stateh(1:enptr,ptr2)==2;\r\n     if nnz(cvec) % Perform a check\r\n      if nnz(sum(abs(stateh(cvec,:)-msn),2)==0) %23K/1.9s Pre-exist state check\r\n        msn(Lidxn)=ms(Lidxn); % Reset msn\r\n       continue; %Abort when create an existing prior state\r\n      end\r\n     end\r\n     \r\n     enptr=enptr+1; % new valid state\r\n     spath(enptr,:)=spath(hptr,:);\r\n     spath(enptr,depth)=i; % UDLR as 1 2 3 4\r\n     stateh(enptr,:)=msn;\r\n     msn(Lidxn)=ms(Lidxn); % Reset msn\r\n     statec2(enptr)=c2;\r\n          \r\n     if c2==0,break;end\r\n   end % UDLR\r\n   if c2==0\r\n    eptr=enptr;\r\n    break;\r\n   end\r\n   \r\n  end % hptr\r\n  sptr=eptr+1; % update wave\r\n  eptr=enptr;\r\n   \r\n end % while  c2\u003e0\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(spath(eptr,1:depth));\r\n fprintf('BestPath:');fprintf('%s',pathbest);fprintf('\\n')\r\n  \r\nend %maze_breadth","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 1  optimal solution L15 LLLDURRRUDRRURR\r\nms=['###.#...'\r\n    '...L..##'\r\n    '.#######'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==15\r\n  valid=1;\r\n else\r\n  fprintf('Length 15 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26 RDURRDDRRUUDDLLLDLLDDRRRUR\r\nms=['L...#.'\r\n    '#.#.#.'\r\n    '##....'\r\n    '...###'\r\n    '.##..#'\r\n    '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\n\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==26\r\n  valid=1;\r\n else\r\n  fprintf('Length 26 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 3  optimal solution L40 DRDRLLLUDLLUURURLLURLUURRDRDRDRDUUUULDLU\r\nms=[  '......'\r\n      '.#....'\r\n      '..#...'\r\n      '...#..'\r\n      '..#L#.'\r\n      '.#...#'\r\n      '......'];\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==40\r\n  valid=1;\r\n else\r\n  fprintf('Length 40 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-14T03:49:34.000Z","deleted_by":null,"deleted_at":null,"solvers_count":12,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-13T14:56:14.000Z","updated_at":"2025-12-08T21:14:18.000Z","published_at":"2024-07-14T03:49:34.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, 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\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.\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":60603,"title":"ICFP2024 003: Lambdaman 5","description":"The ICFP2024 contest was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\nThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\r\nB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  The usage B$ v\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\r\nThe big hint here is that ICFP O is U, \u003e is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\r\n\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nI will be posting the entire ICFP2024 contest challenges and best solutions.\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: 728.767px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 364.383px; transform-origin: 407px 364.383px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 302px 8px; transform-origin: 302px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 372.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 186px 8px; transform-origin: 186px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 230.267px; 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 115.133px; transform-origin: 391px 115.133px; 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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.....########...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e....#...........\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e...#..######....\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e..#..#......#...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#..#...##...#..\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#..#..#L.#...#.\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#...#....#...#.\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e..#...####...#..\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e...#........#...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e....########....\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e................\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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\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: 375px 8px; transform-origin: 375px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  The usage B$ v\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\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: 377px 8px; transform-origin: 377px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe big hint here is that ICFP O is U, \u0026gt; is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 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.75px; text-align: left; transform-origin: 384px 10.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 0px 8.5px; transform-origin: 0px 8.5px; \"\u003e\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 235.5px 8px; transform-origin: 235.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eI will be posting the entire ICFP2024 contest challenges and best solutions.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman5(m)\r\n% m is a maze where 2 is cheese to eat, 1 is Lambdaman the token being moved, and\r\n% 0 is a wall\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman5 is a string of about 220 RDLU characters\r\n%Answers may vary wildly\r\n v='RDLLLU';\r\nend\r\n\r\n%Lambdaman 5 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nSlllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\n\r\nSolution\r\nB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO \r\nL! B. B. v! v! v! \r\n\r\nwhich defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  \r\nThe usage B$ v\" invokes triple(x) \r\nthus the main becomes triple(triple(triple(SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO) )) \r\nor 27 repeats of the string.\r\nThe big hint here is that ICFP O is U, \u003e is D, F is L, and L is R when decrypted. \r\nRunning into walls causes no movement and since this is a spiral maze there appears to be \r\na short sequence that spans all the cheesy bits when repeated.  \r\nTo me it was nuts that someone devised this short sequence.\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}\r\n\r\n","test_suite":"%%\r\nvalid=0;\r\n%   # Wall 0   L lambdaman 1,   . Cheese 2,   \r\n%11x16\r\nms=['.....########...'\r\n'....#...........'\r\n'...#..######....'\r\n'..#..#......#...'\r\n'.#..#...##...#..'\r\n'.#..#..#L.#...#.'\r\n'.#...#....#...#.'\r\n'..#...####...#..'\r\n'...#........#...'\r\n'....########....'\r\n'................'];\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\nfprintf('\\n');\r\n\r\nv = Lambdaman5(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman start point\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n%mc\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\n%}","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-10T06:39:55.000Z","deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-10T05:41:35.000Z","updated_at":"2025-12-16T01:40:53.000Z","published_at":"2024-07-10T06:39:55.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e.#..#..#L.#...#.\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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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\u003eThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ L\\\" B. S3/,6%},!-\\\"$!-!.Z} B$ v\\\" B$ v\\\" B$ v\\\" SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\\\" as triple(x) from B$ L\\\" and L! B. B. v! v! v!  The usage B$ v\\\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 big hint here is that ICFP O is U, \u0026gt; is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\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":60628,"title":"ICFP2024 008: Lambdaman4 Breadth Solver","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\r\n\r\nThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.","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: 675px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 337.5px; transform-origin: 407px 337.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 381.5px 8px; transform-origin: 381.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pathbest = Lambdaman4_Breadth(m)\r\n% Maze 4 Fails miserably for pure breadth so key throat points checked for uneaten cheese\r\n% Work maze 4 via smallest cul-de-sac from any multi-choice path node\r\n%History of prior states maintained to eliminate duplicated states\r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr];\r\n %bn2=nnz(m(:)==2);\r\n stateh=zeros(95000,nr*nc,'int8');\r\n spath=zeros(95000,15,'uint8');\r\n c2=nnz(m(:)==2);\r\n statec2=ones(95000,1)*c2;\r\n stateh(1,:)=m(:);\r\n sptr=1; eptr=1;\r\n enptr=eptr;\r\n depth=0;\r\n \r\n %m3=nr*nc==72; % Hack for Lambdaman3\r\n m4=nr*nc==21*21;\r\n \r\n tic;\r\n while c2\u003e0\r\n  depth=depth+1;\r\n  if mod(depth,5)==0\r\n   fprintf('Depth:%i sptr:%i eptr:%i  Time:%.1f\\n',depth,sptr,eptr,toc)\r\n  end\r\n  for hptr=sptr:eptr\r\n   ms=stateh(hptr,:);\r\n   \r\n   Lidx=find(ms==1);\r\n   \r\n%    if m3 % Hack for Lambdaman3: Check chokepoints for completion\r\n%     if Lidx==26 \u0026\u0026 nnz(ms([62 52 34])==2),continue;end %Lower grp\r\n%     if Lidx==26 \u0026\u0026 ms(17)==3,continue;end % turn aroud\r\n%     if Lidx==12 \u0026\u0026 nnz(ms([24 22 32 14])==2),continue;end %Left grp\r\n%     if Lidx==12 \u0026\u0026 ms(11)==3,continue;end % turn aroud\r\n%     if Lidx==20 \u0026\u0026 ms(29)==3,continue;end % turn aroud\r\n%    end\r\n   \r\n% Lambdaman4\r\n% BR first L358  5.6s\r\n% BL first L348 11.3s\r\n% based on distance back to node after filling, max dist from node?\r\n    if m4 % Hack for Lambdaman4: Check chokepoints for completion\r\n    if Lidx==152 \u0026\u0026 nnz(ms([65 107 113 195])==2),continue;end %TL\r\n    if Lidx==152 \u0026\u0026 ms(5+7*21-1)==3,continue;end % turn aroud\r\n    \r\n     %if Lidx==172 \u0026\u0026 ms(401)==2,continue;end % TR\r\n     %if Lidx==276 \u0026\u0026 ms(317)==2,continue;end % TR\r\n     %if Lidx==360 \u0026\u0026 ms(403)==2,continue;end % TR\r\n    if Lidx==172 \u0026\u0026 nnz(ms([317 401 403])==2),continue;end %TL\r\n    if Lidx==172 \u0026\u0026 ms(193)==3,continue;end %Turn around\r\n    \r\n    if (Lidx==240 || Lidx==260) \u0026\u0026 ms(197)==2,continue;end  % Force shortest first\r\n\r\n%Go BL First\r\n    if Lidx==281 \u0026\u0026 ms(27)==2,continue;end %Abort BR before BL\r\n    \r\n     if Lidx==202 \u0026\u0026 ms(157)==2,continue;end % Mid BL LU Big slow down without\r\n     if Lidx==204 \u0026\u0026 ms(245)==2,continue;end % Mid BL\r\n    if Lidx==206 \u0026\u0026 nnz(ms([27 35 41 77 83  167])==2),continue;end % BL\r\n    \r\n    if Lidx==162 \u0026\u0026 ms(167)==2,continue;end % BL\r\n    if Lidx==118 \u0026\u0026 nnz(ms([77 41 83])==2),continue;end % BL\r\n    if Lidx==54 \u0026\u0026 nnz(ms([71 115])==2),continue;end % BL L 8,4 10,6\r\n    \r\n    if Lidx==96 \u0026\u0026 ms(54)==3 \u0026\u0026 nnz(ms([27 35])==2),continue;end % Missed 6,2 or 14,2\r\n    if Lidx==204 \u0026\u0026 ms(27)==3 \u0026\u0026 nnz(ms([209 251 293])==2),continue;end % Missed 20 [10 12 14]\r\n\r\n    \r\n    if Lidx==280 \u0026\u0026 ms(323)==2,continue;end % BR\r\n      if Lidx==281 \u0026\u0026 ms(280)==3,continue;end % turn around\r\n      \r\n     if Lidx==364 \u0026\u0026 ms(405)==2,continue;end % BR\r\n       if Lidx==363 \u0026\u0026 ms(364)==3,continue;end % turn around\r\n     if Lidx==368 \u0026\u0026 ms(325)==2,continue;end % BR\r\n       if Lidx==367 \u0026\u0026 ms(368)==3,continue;end % turn around\r\n     if Lidx==388 \u0026\u0026 nnz(ms([373 371])==2),continue;end %BR\r\n     if Lidx==286 \u0026\u0026 nnz(ms([283 243])==2),continue;end % BR 10.7s\r\n        \r\n   end % BL first\r\n   \r\n   \r\n   \r\n   Cadj=ms(adj+Lidx);\r\n   msn=ms;\r\n   msn(Lidx)=3; %Lambdaman will move\r\n   for i=1:4 % UDLR\r\n    if Cadj(i)==0,continue;end % Ignore into wall Cadj==0 movement\r\n     Lidxn=Lidx+adj(i);\r\n     msn(Lidxn)=1;\r\n     \r\n     c2=nnz(msn==2);\r\n     ptr1=find(msn==2,1,'first');\r\n     ptr2=find(msn==2,1,'last');\r\n     cvec=statec2(1:enptr)==c2; % Reduce vector check only to c2 qty vectors\r\n     cvec=cvec \u0026 stateh(1:enptr,Lidxn)==1 \u0026 stateh(1:enptr,ptr1)==2 \u0026 stateh(1:enptr,ptr2)==2;\r\n     if nnz(cvec) % Perform a check\r\n      if nnz(sum(abs(stateh(cvec,:)-msn),2)==0) %23K/1.9s Pre-exist state check\r\n        msn(Lidxn)=ms(Lidxn); % Reset msn\r\n       continue; %Abort when create an existing prior state\r\n      end\r\n     end\r\n     \r\n     enptr=enptr+1; % new valid state\r\n     spath(enptr,:)=spath(hptr,:);\r\n     spath(enptr,depth)=i; % UDLR as 1 2 3 4\r\n     stateh(enptr,:)=msn;\r\n     msn(Lidxn)=ms(Lidxn); % Reset msn\r\n     statec2(enptr)=c2;\r\n          \r\n     if c2==0,break;end\r\n   end % UDLR\r\n   if c2==0\r\n    eptr=enptr;\r\n    break;\r\n   end\r\n   \r\n  end % hptr\r\n  sptr=eptr+1; % update wave\r\n  eptr=enptr;\r\n   \r\n end % while  c2\u003e0\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(spath(eptr,1:depth));\r\n fprintf('BestPath:');fprintf('%s',pathbest);fprintf('\\n')\r\n  \r\nend","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman4_Breadth(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\nfprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=348\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=348 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-15T04:13:17.000Z","deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-15T03:21:20.000Z","updated_at":"2024-07-15T04:13:17.000Z","published_at":"2024-07-15T04:11: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\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.\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":60598,"title":"ICFP2024 004: Lambdaman 10","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"   in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\r\nB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u003e I8\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\n Lambdaman21 was solved by Thirteen Team using tools. ThirteenTeam youtube ICFP2024\r\nThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.","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: 544px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 272px; transform-origin: 407px 272px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 369.5px 8px; transform-origin: 369.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 354px 8px; transform-origin: 354px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\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: 360px 8px; transform-origin: 360px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u0026gt; I8\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 100px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 50px; text-align: left; transform-origin: 384px 50px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 100px;height: 100px\" src=\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\" data-image-state=\"image-loaded\" width=\"100\" height=\"100\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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.5px 8px; transform-origin: 182.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=Xcm3S9VlqqY\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eThirteenTeam youtube ICFP2024\u003c/span\u003e\u003c/span\u003e\u003c/a\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v=Lambdaman10(m)\r\n%Simple solver going donw/up columns based upon apriori knowledge of wall structure.\r\n%\r\n%m wall-0  L-1  Cheezy-2  Empty-3\r\n v='';\r\n [nr,nc]=size(m);\r\n [tr,tc]=find(m==1);\r\n%Process Lambda10\r\n\r\n%'L..........#..........#..........#..........#.....' top\r\n%'.....#..........#..........#..........#..........#'\r\n%'..........#..........#..........#..........#......'\r\n\r\n%'....#..........#..........#..........#..........#.'  bottom\r\n%'.........#..........#..........#..........#.......'\r\n%'...#..........#..........#..........#..........#..'];\r\n\r\n%Down odd\r\n% Obstacle - go RDDL , special bottom cases \r\n%Up Even\r\n% Obstacle - go LUUR , special top cases\r\n\r\nwhile nnz(m==2) % Any remaining cheezy bits\r\n%Down odd\r\n while tr\u003cnr\r\n  % 'D'\r\n  m(tr,tc)=3;\r\n  if m(tr+1,tc)\u003e0 % 'D'\r\n   tr=tr+1;m(tr,tc)=1;v=[v 'D'];\r\n  else % wall \r\n   if tr==nr-1 %RD\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr+1;m(tr,tc)=1;v=[v 'D'];\r\n   else % RDDL\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tc=tc-1; m(tr,tc)=1;v=[v 'L'];\r\n   end\r\n  end\r\n end % tr\r\n \r\n %tr=nr\r\n if mod(tc,2)==1 % sitting at (nr,odd) \r\n   if m(nr,tc+1)\u003e0 % shift right\r\n    % 'R'\r\n    m(tr,tc)=3;\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   else % madj r is a wall (nr,tc+1)\r\n    %need to go up and right to get to even (nr-1,even)\r\n    % 'UR'\r\n    m(tr,tc)=3;\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n end %mod(tc,2)==1  odd column\r\n\r\n%Up Even\r\n while tr\u003e1  % case tr==2 and tr==1 has a wall?\r\n  % 'U'\r\n  m(tr,tc)=3;\r\n  if m(tr-1,tc)\u003e0 % 'U'\r\n   tr=tr-1;m(tr,tc)=1;v=[v 'U'];\r\n  else % wall\r\n   if tr==2 %RU\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr-1;m(tr,tc)=1;v=[v 'U'];\r\n   else % LUUR\r\n    tc=tc-1; m(tr,tc)=3;v=[v 'L'];\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tc=tc+1; m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n  end\r\n end % tr \r\n \r\n if nnz(m==2)==0,break;end\r\n \r\n %tr=1\r\n if mod(tc,2)==0 % sitting at (1,even) \r\n   if m(1,tc+1)\u003e0 % shift right\r\n    % 'R'\r\n    m(tr,tc)=3;\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   else % madj r is a wall (nr,tc+1)\r\n    %need to go down and right to get to odd (2,odd)\r\n    % 'DR'\r\n    m(tr,tc)=3;\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n end %mod(tc,2)==1  odd column\r\nend % while nnz(m==2)\r\n\r\nend % Lambdaman10\r\n\r\n%Lambdaman 10 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman10.glx\r\nB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"\r\n\r\nSolution\r\nB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u003e I8\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\nms=['L..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'];\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nv = Lambdaman10(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman10 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nL..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n%}\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-11T04:23:05.000Z","deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T20:47:10.000Z","updated_at":"2024-07-11T04:23:06.000Z","published_at":"2024-07-11T04: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\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. SF B$ B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L\\\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\\\" B+ v# I\\\" I\\\"   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ B$ L$ B$ v$ v$ L# L\\\" ? B= v\\\" Id S3/,6%},!-\\\"$!-!.VU} B. B$ B$ v# v# B% B* v\\\" I9 I,2X BT I\\\" BD B% v\\\" I% SFOL\u0026gt; I8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003cw:r\u003e\u003cw:t\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=Xcm3S9VlqqY\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eThirteenTeam youtube ICFP2024\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\u003eThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.\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.gif\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1903,"title":"GJam 2014 China Rd A: Maze with a Left Hand Rule","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2924486/dashboard#s=p3 GJam 2014 China Cross the Maze\u003e.\r\n\r\nThe Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as moves.\r\n\r\n\r\n*Input:* [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\r\n\r\n*Output:* Path, a string of Movements {N,S,E,W}. If Path is \u003e10,000 moves or No solution return a null string.\r\n\r\n*Examples:*\r\n\r\n  .##.#\r\n  .....\r\n  ...#.\r\n  .###.\r\n  ...#.\r\n  1 1 5 3\r\n\r\nNote: (1,1) is Top Left and start point for this case. \r\n\r\nThe # are replaced by 1s and '.' will be 0s.\r\n\r\nOutput: SEEENSESSSNNNWWSWWSSEE\r\n\r\n*Contest Performance:* Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\r\n","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2924486/dashboard#s=p3\"\u003eGJam 2014 China Cross the Maze\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as moves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Path, a string of Movements {N,S,E,W}. If Path is \u003e10,000 moves or No solution return a null string.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e.##.#\r\n.....\r\n...#.\r\n.###.\r\n...#.\r\n1 1 5 3\r\n\u003c/pre\u003e\u003cp\u003eNote: (1,1) is Top Left and start point for this case.\u003c/p\u003e\u003cp\u003eThe # are replaced by 1s and '.' will be 0s.\u003c/p\u003e\u003cp\u003eOutput: SEEENSESSSNNNWWSWWSSEE\u003c/p\u003e\u003cp\u003e\u003cb\u003eContest Performance:\u003c/b\u003e Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\u003c/p\u003e","function_template":"function Path=Maze_CH(m,sf);\r\n  Path='';;\r\nend","test_suite":"%%\r\ntic\r\nzm=[0 1 ;1 0 ];\r\nzsf=[1 1 2 2 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 1 0 1 ;0 0 0 0 0 ;0 0 0 1 0 ;0 1 1 1 0 ;0 0 0 1 0 ];\r\nzsf=[1 1 5 3 ];\r\nvexp='SEEENSESSSNNNWWSWWSSEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 ;0 1 0 ;0 0 0 ];\r\nzsf=[1 1 3 3 ];\r\nvexp='EESS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 2 2 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 1 0 1 0 1 ;0 0 0 0 0 0 0 0 ;1 1 1 1 1 1 1 0 ;0 0 0 0 0 0 0 0 ;0 1 0 1 0 1 0 1 ;0 1 1 1 1 1 1 1 ;0 1 0 1 0 1 0 1 ;0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 8 8 ];\r\nvexp='SEENSEENSEENSESSWSNWWSNWWSNWWSSSSEENSEENSEENSE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 3 1 ];\r\nvexp='EEEEEEEESESSSSSSSSWWWWWWWWWNNNNNNN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 7 1 ];\r\nvexp='EEEEEEEEESSSSSSSSSWWWWWWWWWNNN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 1 0 0 ;0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 1 ;0 0 0 1 0 0 0 0 0 0 ;0 1 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 3 ];\r\nvexp='NNNNNENNWNNEEEEEEEEESSSSSWSSESSWWWWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 2 ];\r\nvexp='NNNNNNNNNEEEEEEEEESWSSESSSSSSWWWWWNWWSW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 1 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 1 10 ];\r\nvexp='WWWWWWWWWNNNNNNNNNEEWSSEENENEEEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 5 10 ];\r\nvexp='WWWWWWWWWNNNNNNNNNEEEEEEEEESSSS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 1 0 1 0 0 0 ;0 0 0 0 0 1 0 1 0 1 ;0 0 0 0 1 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 1 ;0 0 0 1 0 0 0 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 9 1 ];\r\nvexp='SEENEEEEEEESWSSESSSWSSESWWWWWWWWNW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 1 0 0 0 0 0 1 1 ;0 1 0 0 0 1 0 1 1 0 ;0 0 0 1 0 1 0 1 0 1 ;0 0 1 0 1 0 1 0 0 1 ;0 0 0 1 0 0 0 0 0 1 ;0 1 0 0 1 0 0 1 1 1 ;0 0 0 1 0 1 0 0 0 1 ;0 1 0 0 0 1 0 0 0 0 ;1 0 0 1 0 0 1 0 0 0 ;0 1 0 1 1 0 0 0 0 1 ];\r\nzsf=[10 1 9 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 1 0 0 0 0 0 0 ;0 1 0 0 0 0 1 0 0 0 ;1 0 0 1 0 0 1 0 0 0 ;1 0 0 1 1 0 0 0 0 0 ;0 1 1 0 1 0 1 1 1 0 ;1 1 1 0 0 0 0 0 0 0 ;1 0 0 0 1 0 1 0 0 0 ;1 1 1 1 0 1 0 0 1 0 ;1 1 0 1 1 0 1 1 1 1 ;0 1 1 1 1 0 1 1 1 0 ];\r\nzsf=[1 1 10 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 0 0 0 0 1 1 ;1 0 0 1 1 0 0 1 0 1 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 0 1 ;0 0 1 0 0 1 0 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ;0 0 1 1 1 1 1 1 0 0 ;1 0 0 0 1 0 1 1 1 0 ;1 0 0 0 1 1 0 1 1 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 3 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ;1 0 0 1 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 1 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 1 0 0 ];\r\nzsf=[10 1 10 3 ];\r\nvexp='NNNNNSESEENNWNWNNWNESEENEEEEEESSSSSSSSSWNNWWSSWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 1 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 1 0 0 0 0 1 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 1 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 0 0 0 1 0 1 ;0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ];\r\nzsf=[1 1 5 3 ];\r\nvexp='EESEENSEENEEESWSSEWSWSWSSEENSESSNWWSWWWWWWWNNNNNEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 1 1 ;0 1 0 0 0 0 0 1 0 0 ;0 0 0 1 0 0 1 1 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 1 0 0 ;0 0 0 0 1 0 0 0 0 0 ];\r\nzsf=[10 10 8 10 ];\r\nvexp='WWWWNWWSWWWNNNNNNNNNEEEEEEEWSWSWSSEENEENNESSSSWWSSEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;1 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 1 1 0 ;0 0 0 0 0 0 1 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 1 0 0 0 0 ;1 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 10 ];\r\nvexp='ENSEENNWNWWSNNNENENNWWNEEESEENEEEESSSSNWWWSWSSEENESESSS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 1 0 0 0 0 0 ;1 1 1 0 0 0 1 0 0 0 ;0 0 1 1 1 0 1 0 0 0 ;0 0 0 1 1 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 1 0 ;0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 6 10 ];\r\nvexp='WWWWWWNWWSWNNNNNNNESEWSSEENEENNNWWNWWWEEESEENEEEESSSWSSE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 1 1 0 0 1 ;0 0 0 0 0 0 0 1 0 0 ;1 0 0 0 0 1 0 0 1 0 ;0 0 0 0 0 0 0 0 0 1 ;0 0 0 1 1 0 1 0 0 0 ;0 1 1 1 0 0 0 1 0 0 ;0 0 0 0 1 0 1 0 0 0 ];\r\nzsf=[1 10 6 2 ];\r\nvexp='SSWSSESNWNWNNWWSWSSEESESESESSWWENNWNWWSSEWSNWENNWWWSWWSSEEEWWWNNNEN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 0 0 0 ;0 0 0 1 0 1 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 1 0 ;0 0 0 0 0 0 0 1 1 0 ;1 1 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 2 8 ];\r\nvexp='SSSSSSSSSWWWWWWWNWWSNEENNWWNEENNWWNNNEEEEEWSSEWSSEENENN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[1 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 1 0 ;0 0 1 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 1 ;1 0 0 0 1 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 1 0 0 1 0 0 0 0 ;0 0 0 0 0 1 0 1 0 0 ;0 0 1 0 0 0 1 0 1 0 ];\r\nzsf=[1 10 1 6 ];\r\nvexp='SSSWSSESSSSNWNWWSNNWWSSSEWWNWWSWNNNENNWNENNWENEEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 0 1 0 1 0 ;0 0 0 0 0 0 0 0 1 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ;1 0 0 1 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 1 0 ];\r\nzsf=[1 1 7 4 ];\r\nvexp='EEEEESSEENNEESSSSSSSSSNNWWSSWWNWWSWWWNNEENNWNWESESE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 1 1 1 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 1 0 0 ;0 0 0 1 1 1 0 0 0 0 ;1 1 1 0 0 0 0 0 1 0 ;0 1 0 0 0 1 0 0 0 1 ;0 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 1 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 5 ];\r\nvexp='NNNNSESEENNWENEEENNWWWNWWSSEWWNNNSEENESEEEENSEENSSSSNWWSSESESSSWWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 1 0 1 ;0 0 1 0 0 0 0 0 0 0 ;0 1 0 1 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 1 ;0 0 0 0 1 0 0 1 0 0 ;0 0 0 0 1 0 0 1 0 1 ;0 0 0 0 0 1 0 0 1 0 ;0 0 0 0 0 1 1 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ];\r\nzsf=[10 1 9 2 ];\r\nvexp='NNNNNNNNNEEEEESEEENSESSWSSEWSNNWWSSSESEENSSWWNNWNWNNWWSSSESSEWWNWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 1 0 0 0 ;1 0 0 0 0 1 1 0 0 1 ;0 0 1 1 0 0 0 0 1 0 ;0 1 0 1 0 0 0 0 1 0 ;1 1 0 0 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ;1 0 0 0 1 0 0 0 0 1 ;0 0 0 0 0 1 0 1 0 0 ];\r\nzsf=[10 1 8 4 ];\r\nvexp='ENNWNEENNNSEENNNWWWSWSNENNWEESEENEWSSEEENNEEWSWSSSEENNSSSSSWSSEWNWWSNWNWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\ntoc","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-09-30T03:46:21.000Z","updated_at":"2026-02-10T13:15:01.000Z","published_at":"2013-09-30T04:01: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\u003eThis Challenge is derived 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://code.google.com/codejam/contest/2924486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 China Cross the Maze\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 Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as 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\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\u003c/w:t\u003e\u003c/w:r\u003e\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 Path, a string of Movements {N,S,E,W}. If Path is \u0026gt;10,000 moves or No solution return a null string.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eExamples:\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[.##.#\\n.....\\n...#.\\n.###.\\n...#.\\n1 1 5 3]]\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\u003eNote: (1,1) is Top Left and start point for this case.\u003c/w:t\u003e\u003c/w:r\u003e\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 # are replaced by 1s and '.' will be 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:t\u003eOutput: SEEENSESSSNNNWWSWWSSEE\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eContest Performance:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\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":1944,"title":"GJam 2014 China Rd B: Dragon Maze","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2929486/dashboard#s=p3 GJam 2014 China Dragon Maze\u003e. Small Case.\r\n\r\nThe Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path. \r\n\r\nThe input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)).\r\nEntrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no diagonals.\r\n\r\n\r\n*Input:* [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u003c=10).\r\n\r\n*Output:* [P] maximum Points. If Impossible P=-1;\r\n\r\n*Examples:*\r\n\r\n  [VEE] [M]   [P]\r\n  [0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]\r\n\r\n \r\n*Contest Performance:* Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\r\n\r\n\r\n*Strategy:*\r\n\r\n  1) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \r\n  2) A ring of Zeros around the array may simplify processing.\r\n  3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2929486/dashboard#s=p3\"\u003eGJam 2014 China Dragon Maze\u003c/a\u003e. Small Case.\u003c/p\u003e\u003cp\u003eThe Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path.\u003c/p\u003e\u003cp\u003eThe input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)).\r\nEntrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no diagonals.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u0026lt;=10).\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [P] maximum Points. If Impossible P=-1;\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[VEE] [M]   [P]\r\n[0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eContest Performance:\u003c/b\u003e Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\u003c/p\u003e\u003cp\u003e\u003cb\u003eStrategy:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \r\n2) A ring of Zeros around the array may simplify processing.\r\n3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.\r\n\u003c/pre\u003e","function_template":"function P=Dragon_CH(ee,m)\r\n  P=0;\r\nend","test_suite":"%%\r\ntic\r\nzee=[0 0 0 1];\r\nzm=[97 68 ];\r\nvexp=165;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[1 0 0 0];\r\nzm=[11 ;92 ];\r\nvexp=103;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 1 1];\r\nzm=[47 -1 ;-1 41 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[9541 9311 1035 9921 9342 2262 8685 7151 184 8189 ;3885 4455 8295 4011 4030 7427 4325 7756 3404 3014 ;4402 9158 999 4298 6612 1696 5965 1822 9039 12 ;6015 8579 9322 7049 4851 5015 5663 9888 8517 5846 ;4428 2402 6653 9074 2764 682 6500 3440 8437 6256 ;6453 9191 1765 7452 3488 8377 5499 9452 6550 4537 ;5815 8916 9467 1489 5965 4317 2855 1627 556 1372 ;3824 1335 125 476 409 9240 1158 6908 2679 5946 ;9515 9131 5136 1280 2934 8623 6008 8432 4427 8909 ;2968 241 7825 8786 8081 3789 9455 936 1767 10 ];\r\nvexp=135772;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[2307 5590 1345 8783 2418 1753 4374 9927 5012 7052 ;5872 879 2534 7360 2158 1820 5982 4517 251 6760 ;3425 9571 3353 1249 8356 1433 1389 7810 2368 9507 ;4172 1026 1449 1868 9808 3866 3620 533 3792 4983 ;7584 6015 5861 6470 3374 4370 8289 5708 8886 4891 ;8819 2311 813 2171 9911 5521 3604 1300 9682 5971 ;806 3853 6997 2254 5720 3156 2471 5691 3689 2614 ;7026 7624 8629 9238 445 8354 3608 5085 413 8845 ;9976 9232 7507 7140 1402 7418 2660 5005 5069 8694 ;976 5874 8898 7972 4480 4618 7479 3302 6660 1167 ];\r\nvexp=113799;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[5916 -1 5143 4544 9275 5587 9249 9234 672 9662 ;-1 6999 8893 5585 490 6646 9354 9502 1651 4422 ;8195 2626 6647 7092 6949 7478 8061 779 780 1073 ;1946 6695 1109 3440 7590 6735 9026 6838 5968 6049 ;2851 398 3047 8095 2334 3537 4741 1687 9390 6391 ;6108 7584 5368 2754 1027 8668 232 9088 9446 1011 ;6512 7743 4057 3972 1182 1646 707 6560 4835 3026 ;2608 4038 3423 2007 2132 5756 1895 6872 7442 1284 ;9614 9901 8867 1333 2655 6245 6352 9238 1684 2150 ;6600 8195 6244 656 2167 3778 8653 2873 337 3487 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[5898 9296 7524 5673 1302 6008 7780 3196 9231 5222 ;4479 5197 5122 9697 6529 4128 5942 9233 3365 7625 ;7734 9964 5820 3977 6971 4338 7754 5623 3562 4442 ;5462 5811 3738 9337 1483 1391 5344 9263 4587 4575 ;836 5417 9771 2309 1466 2651 6437 7407 8235 6153 ;1383 5968 2469 3554 6297 9439 7891 402 1414 7804 ;4844 6875 3615 4933 2563 1449 6323 7907 7063 7261 ;8833 7898 9030 4955 6559 495 3957 9347 7901 2192 ;5499 5635 4511 4319 9189 807 110 3431 7561 -1 ;1235 8756 4749 4849 3688 7311 6297 6362 -1 9712 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 2 0 9];\r\nzm=[-1 3591 -1 9384 6034 8580 2003 -1 8780 1295 ;5605 1377 2240 559 -1 -1 4017 4895 4437 -1 ;-1 -1 -1 9865 -1 1505 2777 -1 436 8170 ;1900 6344 8059 9498 8256 -1 7952 7551 -1 5927 ;-1 -1 7609 -1 1257 1902 -1 8040 4203 -1 ;1361 2292 1143 769 -1 -1 -1 -1 2197 -1 ;3846 -1 2480 -1 -1 -1 -1 -1 -1 -1 ;4444 -1 6690 489 813 8790 -1 -1 -1 -1 ;3729 5436 -1 8544 -1 -1 -1 -1 -1 -1 ;-1 3743 -1 6213 -1 -1 -1 -1 -1 -1 ];\r\nvexp=85015;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 4 3 9];\r\nzm=[256 -1 6593 -1 4076 -1 8308 8531 8388 1339 ;6280 8079 6556 5099 3523 1967 7424 -1 1469 -1 ;-1 9317 -1 6682 -1 2996 -1 3140 3913 -1 ;2927 2797 -1 9032 9111 -1 1637 5917 -1 5971 ;3285 -1 6158 5977 -1 -1 -1 6944 5424 6439 ;2389 7565 -1 5558 5485 588 -1 -1 4093 -1 ;-1 8297 -1 -1 7995 -1 -1 -1 6639 8591 ;-1 -1 -1 -1 -1 2803 5365 7702 9610 -1 ;-1 -1 -1 -1 -1 6383 -1 -1 8763 3884 ;-1 -1 -1 -1 -1 -1 4980 966 7330 -1 ];\r\nvexp=81434;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 7 0 9];\r\nzm=[9117 4644 7637 2065 8336 9446 7761 9053 -1 3232 ;-1 9846 -1 898 -1 1074 -1 1715 4774 5778 ;-1 8864 -1 -1 5687 9951 5462 -1 4536 -1 ;-1 -1 -1 -1 -1 7870 -1 7507 1777 4773 ;-1 -1 89 3307 79 1280 -1 -1 -1 2898 ;-1 -1 -1 -1 4952 -1 2748 572 1991 5243 ;-1 -1 -1 -1 2706 4551 -1 8752 -1 7862 ;-1 -1 -1 5293 6847 -1 -1 4293 -1 308 ;-1 -1 -1 -1 -1 8374 5932 3627 -1 9426 ;-1 -1 -1 -1 -1 -1 -1 983 -1 3561 ];\r\nvexp=24552;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 3 9 0];\r\nzm=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 3869 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 7888 2830 -1 -1 -1 -1 -1 -1 ;-1 257 4329 -1 2131 -1 -1 -1 -1 -1 ;-1 2582 -1 6446 8398 -1 -1 6063 6484 -1 ;8837 9043 5373 9819 -1 8087 -1 6474 -1 1335 ;866 -1 4087 -1 424 8975 1557 4839 -1 5800 ;868 7116 -1 6357 8115 -1 8722 -1 1184 5178 ;-1 8558 9689 2863 -1 3838 -1 1762 -1 6184 ;9784 3468 -1 6082 8935 7345 1958 7935 9830 2768 ];\r\nvexp=40444;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1 2 3 4 5 6 7 8 9 10 ;11 12 13 14 15 16 17 18 19 20 ;21 22 23 24 25 26 27 28 29 30 ;31 32 33 34 35 36 37 38 39 40 ;41 42 43 44 45 46 47 48 49 50 ;51 52 53 54 55 56 57 58 59 60 ;61 62 63 64 65 66 67 68 69 70 ;71 72 73 74 75 76 77 78 79 80 ;81 82 83 84 85 86 87 88 89 90 ;91 92 93 94 95 96 97 98 99 100 ];\r\nvexp=1324;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1 11 21 31 41 51 61 71 81 91 ;2 12 22 32 42 52 62 72 82 92 ;3 13 23 33 43 53 63 73 83 93 ;4 14 24 34 44 54 64 74 84 94 ;5 15 25 35 45 55 65 75 85 95 ;6 16 26 36 46 56 66 76 86 96 ;7 17 27 37 47 57 67 77 87 97 ;8 18 28 38 48 58 68 78 88 98 ;9 19 29 39 49 59 69 79 89 99 ;10 20 30 40 50 60 70 80 90 100 ];\r\nvexp=1324;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 1 4 1];\r\nzm=[-1 -1 1134 9086 5787 -1 -1 9759 -1 ;-1 5195 1440 5405 6267 9573 4021 -1 -1 ;-1 8437 7138 1518 3828 -1 4927 7037 5390 ;4445 9948 -1 -1 8054 5367 -1 -1 6378 ;2675 6263 1410 8224 1185 1056 6214 -1 -1 ;3465 4891 179 -1 8233 3186 3146 4940 -1 ;9212 -1 622 9232 2128 -1 4591 -1 -1 ;853 2385 8569 3381 -1 31 9357 1202 -1 ;9153 437 481 3041 9860 -1 802 -1 5243 ;-1 3979 1226 -1 3966 8037 -1 7564 -1 ];\r\nvexp=11154;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[6 1 5 4];\r\nzm=[8935 7055 9523 5947 9420 1029 1519 9655 7310 -1 ;5347 6550 956 3676 -1 -1 1605 165 9339 924 ;7608 -1 -1 -1 9106 2457 7428 1436 1464 -1 ;-1 8605 753 3273 -1 5557 -1 4895 86 471 ;6830 5364 -1 -1 -1 8767 -1 -1 1753 8126 ;1440 -1 -1 -1 7917 7380 870 -1 -1 8426 ;9518 1719 246 1756 1823 -1 -1 6500 9647 6158 ;-1 3753 9179 3752 -1 -1 3927 -1 28 8762 ;3442 1154 -1 2977 -1 -1 -1 -1 497 -1 ;5046 4922 8565 5170 9416 7140 4702 5262 5264 8821 ];\r\nvexp=13461;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 9 0 7];\r\nzm=[-1 -1 -1 -1 5591 -1 6865 6361 -1 9574 ;5326 2417 -1 -1 6193 9084 1910 5890 9530 4249 ;5130 -1 -1 -1 2376 -1 -1 3886 8309 1892 ;-1 4623 6047 744 2180 817 6660 2425 2867 4950 ;-1 -1 -1 7617 1260 2832 4751 -1 -1 5698 ;-1 2864 4297 8644 3112 1812 2562 5793 4826 1341 ;737 4961 6790 3341 876 9914 9275 -1 9924 756 ;7283 3200 4971 4962 -1 8083 -1 8819 -1 7409 ;7651 5137 -1 1403 6483 -1 6406 7515 -1 -1 ;7345 1246 2469 3331 251 -1 8029 6777 3210 -1 ];\r\nvexp=43605;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 6 9 8];\r\nzm=[4471 2340 6565 -1 -1 3663 -1 -1 4562 8294 ;8432 -1 -1 383 9745 3207 944 340 7820 3426 ;2977 97 5374 1193 4024 2963 2227 2262 6405 2380 ;4866 6164 3694 178 1313 4376 6297 6060 4583 9330 ;9358 7274 6389 6195 2179 -1 3397 7809 557 2087 ;1977 -1 2617 9973 -1 907 -1 5864 -1 -1 ;-1 6127 2119 7554 3268 7556 -1 4465 1297 3716 ;-1 -1 730 1361 5616 -1 -1 7981 7319 3103 ;-1 -1 6599 4345 -1 5421 7790 4406 876 1764 ;7527 -1 -1 8441 7260 9243 9942 -1 8987 -1 ];\r\nvexp=46698;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[3 5 3 4];\r\nzm=[5297 1690 2134 6500 -1 378 99 -1 7714 7786 ;1895 -1 5584 1030 1354 3108 9637 -1 4744 4892 ;-1 7743 6128 3847 -1 9009 -1 -1 9951 -1 ;9108 2993 -1 4347 2520 1147 3077 8541 5470 2062 ;-1 6534 4545 1801 -1 -1 1137 8521 -1 7866 ];\r\nvexp=3667;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[7 6 4 6];\r\nzm=[199 9295 8751 5145 2157 3343 -1 -1 7184 -1 ;3780 3730 6605 -1 8658 -1 3573 -1 -1 -1 ;6749 6135 -1 7631 -1 4179 -1 -1 4080 -1 ;3592 1382 9020 -1 6831 -1 6736 8383 -1 2258 ;1674 -1 4663 -1 6161 2406 268 -1 931 4237 ;100 6649 6439 -1 -1 5266 3204 4114 5940 5908 ;1230 -1 4134 6819 3172 8035 6784 -1 6391 -1 ;9181 -1 -1 7310 -1 1576 1892 5821 4469 2080 ];\r\nvexp=12148;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 3 2 0];\r\nzm=[290 -1 5107 7466 7064 ;6249 -1 3213 6568 -1 ;1037 -1 4971 4915 -1 ;6851 9043 8163 1379 6540 ;2051 8939 1483 -1 4184 ;7062 137 -1 5275 9462 ;-1 -1 4316 3265 2838 ;-1 -1 1471 9758 7724 ;-1 -1 3883 -1 4987 ;6843 7025 6749 7147 1906 ];\r\nvexp=51934;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[7 2 5 2];\r\nzm=[3900 9521 7343 2759 -1 ;5239 -1 1132 4911 3520 ;1517 9058 -1 -1 -1 ;-1 -1 -1 -1 8097 ;-1 7717 4099 5529 7959 ;-1 6950 9579 5029 -1 ;6687 9672 -1 -1 -1 ;1507 5064 2149 1922 7228 ;-1 8639 6134 -1 933 ;-1 511 -1 -1 744 ];\r\nvexp=33414;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 5 6 0];\r\nzm=[6137 3305 6360 4891 6396 4463 8888 7982 ;7881 -1 4743 6730 360 4945 9032 -1 ;7273 3476 8679 -1 3569 2493 -1 7527 ;5487 562 9739 813 6484 6067 -1 9545 ;-1 5162 -1 4989 8112 -1 8032 1019 ;-1 -1 5009 404 1699 1676 5849 8070 ;1003 4164 2297 4730 4313 6194 5684 -1 ];\r\nvexp=24377;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 2 6 7];\r\nzm=[8353 7263 7609 -1 2120 5314 -1 9477 1416 3433 ;-1 590 7657 2619 -1 -1 4684 9284 -1 -1 ;3862 -1 2692 4001 1891 -1 7719 6477 -1 5973 ;-1 8015 -1 -1 148 2255 3535 -1 1866 1644 ;1340 1620 3925 5165 -1 3694 4100 1434 3612 -1 ;7843 -1 -1 1391 7637 -1 5855 -1 7250 9629 ;1768 2379 -1 -1 3330 410 -1 9549 -1 -1 ;9493 9719 4813 1231 -1 -1 -1 5478 -1 5106 ;82 8285 251 6695 8652 -1 4552 79 -1 3502 ;3118 7594 8758 -1 -1 -1 8470 4711 -1 2424 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 4 7 0];\r\nzm=[6808 5848 -1 9349 6503 5045 2772 -1 -1 8778 ;9668 4184 2263 -1 1288 1153 2705 7033 2495 -1 ;5880 2410 -1 7454 -1 2978 2427 4378 -1 4913 ;208 2853 -1 4005 3964 -1 9828 -1 4786 7602 ;-1 -1 -1 -1 -1 329 7985 -1 -1 28 ;-1 -1 -1 -1 4433 4085 9221 6038 7258 3834 ;9013 -1 5560 2745 5061 -1 3495 -1 -1 -1 ;2760 6565 7246 6924 -1 2700 -1 -1 4588 -1 ;9953 4344 8740 -1 152 8435 6756 3520 3078 9535 ;9930 9193 2399 246 4552 5468 -1 -1 -1 -1 ];\r\nvexp=35734;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 0 7 0];\r\nzm=[919 3728 6660 -1 5410 4513 8419 6070 482 6421 ;111 -1 4828 8468 -1 3201 -1 4659 -1 4738 ;-1 361 8017 4673 8999 4687 852 -1 7981 -1 ;-1 1520 9557 5945 8837 3767 9832 9775 -1 9935 ;5796 9072 -1 -1 392 341 3808 4109 4905 -1 ;9614 -1 8450 977 247 2107 7400 6786 -1 -1 ;4341 -1 4733 2658 -1 6043 8860 1838 6912 523 ;2432 4045 -1 -1 5361 895 -1 3895 1321 6672 ;2026 5899 1723 1201 1691 9580 1387 -1 -1 1689 ];\r\nvexp=22183;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[1 2 2 1];\r\nzm=[-1 -1 -1 -1 7201 7409 -1 9659 2860 9119 ;-1 9984 7612 9104 607 -1 9877 -1 2932 1986 ;5397 1618 2580 -1 69 2446 -1 -1 1160 7900 ;-1 9269 -1 6227 5896 200 5386 8138 -1 8909 ;7316 1699 -1 3087 -1 -1 -1 4699 -1 3670 ;8428 9133 3314 3461 4829 6483 7198 8227 8516 5217 ;325 54 8642 8561 -1 8582 -1 6678 3552 -1 ;7012 3037 6339 9407 6933 -1 9350 1820 5500 -1 ];\r\nvexp=19214;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1505 3402 2754 9713 414 2610 2749 8975 8948 1456 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 8381 ;2838 4740 4009 1596 442 4853 3416 6467 6705 1640 ;9059 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;7197 4825 212 7826 2129 6298 2502 1979 9061 4006 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 1733 ;1814 3718 8498 4423 2818 7472 9722 625 2204 8912 ;5365 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;6212 507 5806 7416 274 8624 4120 1914 7683 7669 ;3090 4246 1846 5219 6895 4347 3549 5955 8352 5281 ];\r\nvexp=259550;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 0];\r\nzm=[4120 8421 130 8543 1238 7601 4616 1863 6156 3527 ;3579 8719 386 9384 6135 7011 4359 6606 5276 8393 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 626 ;8366 2638 2471 3584 5884 6817 3484 8190 5168 8765 ;2310 9940 5246 7204 1178 2847 1819 9392 5354 1698 ;2970 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;4073 8435 8705 6559 1797 3063 9516 7073 1456 142 ;1790 445 2612 1725 6329 9429 5208 4518 948 3972 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 6827 ;888 5570 382 8417 4768 2201 7808 121 250 7129 ];\r\nvexp=243332;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 0 0 9];\r\nzm=[4193 5036 5833 7103 6832 8895 6619 3904 350 6760 ;2045 7147 9371 3769 3475 8799 8977 4344 9747 9300 ;7523 6986 4869 7904 5402 9636 104 3209 9757 6705 ;337 301 1740 6169 7404 8572 1415 4022 8827 8117 ;7133 872 5263 6503 4640 8737 1654 3616 9432 7752 ;9268 6954 4737 4136 4858 138 3772 1313 9698 3528 ;8018 6386 180 6109 8906 7583 1032 320 7956 9859 ;8436 5088 7082 50 1591 8073 5138 9596 8041 4570 ;7347 7308 1523 2083 1443 6380 8572 1566 4045 4621 ;1445 2062 1006 1625 4522 9911 5559 5554 230 3515 ];\r\nvexp=137679;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[3 7 3 6];\r\nzm=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 2896 5067 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ];\r\nvexp=7963;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\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":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-19T03:06:44.000Z","updated_at":"2026-02-10T13:28:34.000Z","published_at":"2013-10-19T03:25:25.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 Challenge is derived 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://code.google.com/codejam/contest/2929486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 China Dragon Maze\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Small Case.\u003c/w:t\u003e\u003c/w:r\u003e\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 Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path.\u003c/w:t\u003e\u003c/w:r\u003e\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 input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)). Entrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no 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: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 [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u0026lt;=10).\u003c/w:t\u003e\u003c/w:r\u003e\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 [P] maximum Points. If Impossible P=-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\u003eExamples:\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[[VEE] [M]   [P]\\n[0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]]]\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\u003eContest Performance:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eStrategy:\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) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \\n2) A ring of Zeros around the array may simplify processing.\\n3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.]]\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":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":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,/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":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":283,"title":"Give the Shortest Path Through The Maze","description":"*Description*\r\n\r\nThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size _M_ x _N_ where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\r\n\r\n                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \r\n\r\n                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\r\n                                           \r\n                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\r\n\r\n                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\r\n\r\n_Note: all outer boundaries are walls. My test cases provide for this already. You do *not* need to account for this._\r\n\r\nThe path will always start at the NorthWest corner (subscript |(1,1)|) and end at the SouthEast corner (subscript |(M,N)|). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\r\n\r\n    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\r\n\r\nwhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\r\n\r\nYou are *NOT* guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\r\n\r\n*Example*\r\n\r\nInput maze:\r\n\r\n    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\r\n    \r\nGraphical Representation:\r\n\r\n    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\r\n\r\nSolution:\r\n\r\n    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\r\n\r\nGraphical Representation:\r\n\r\n    \r\n    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+","description_html":"\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\u003c/p\u003e\u003cpre\u003e                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \u003c/pre\u003e\u003cpre\u003e                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\u003c/pre\u003e\u003cp\u003e\u003ci\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do \u003cb\u003enot\u003c/b\u003e need to account for this.\u003c/i\u003e\u003c/p\u003e\u003cp\u003eThe path will always start at the NorthWest corner (subscript \u003ctt\u003e(1,1)\u003c/tt\u003e) and end at the SouthEast corner (subscript \u003ctt\u003e(M,N)\u003c/tt\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\u003c/p\u003e\u003cpre\u003e    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\u003c/pre\u003e\u003cp\u003ewhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/p\u003e\u003cp\u003eYou are \u003cb\u003eNOT\u003c/b\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eInput maze:\u003c/p\u003e\u003cpre\u003e    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\u003c/pre\u003e\u003cp\u003eSolution:\u003c/p\u003e\u003cpre\u003e    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+\u003c/pre\u003e","function_template":"function path = solve_maze(maze)\r\n  path = zeros( size( maze ) );\r\nend","test_suite":"%%\r\nassert(isequal(solve_maze([3 2;1 2]),[1 0;2 3]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2;3 3 1;1 1 1]),[1 2 3;0 0 4;0 0 5]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 3 2 2 2;1 0 1 2 1;3 2 3 3 0;1 0 2 2 0;1 1 1 0 1]),[1 4 5 6 7;2 3 0 0 8;0 0 0 0 9;0 0 0 0 10;0 0 0 0 11]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3;3 1 2 1 1 3 1 3;1 0 3 0 0 1 3 3;1 1 0 2 0 0 1 1;3 1 3 3 2 1 2 1;3 2 2 1 3 0 1 0;3 3 2 3 1 2 2 0;1 3 3 0 0 2 0 2;1 2 3 1 0 2 1 3;1 1 3 2 3 1 1 0]),[1 2 0 0 0 0 0 0;0 3 0 0 0 0 0 0;0 4 0 0 0 0 0 0;0 5 6 7 8 9 0 0;0 0 0 0 0 10 11 0;0 0 0 0 12 11 12 13;0 0 0 0 13 14 15 14;0 0 0 0 14 15 16 0;0 0 0 0 0 0 17 0;0 0 0 0 0 0 18 19]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 2 3 3 2 3 3 3 2 3 2 3 2 3;3 0 3 3 1 2 2 3 3 0 2 1 0 1 2 2 0;1 0 2 3 2 1 1 0 0 3 1 0 2 1 1 0 2;3 1 1 2 0 0 2 0 2 3 3 1 0 3 1 0 3;1 0 1 0 3 0 1 0 0 2 2 1 0 2 1 2 1;1 2 0 0 3 1 2 1 2 3 1 1 0 1 3 1 1;3 1 1 3 2 2 2 2 2 1 2 3 2 0 3 1 2;1 3 0 1 0 3 0 2 1 3 2 2 2 1 1 1 2;1 3 3 1 1 1 2 3 2 2 2 2 3 3 2 0 1;3 1 3 0 2 0 2 0 1 0 3 1 2 3 2 0 0;1 1 0 2 3 3 1 2 2 1 3 0 2 3 2 2 0;3 0 0 2 3 3 0 0 2 2 0 0 1 3 1 3 1]),[1 2 0 0 0 0 0 0 0 0 0 0 21 22 0 0 0;0 3 0 0 0 0 0 0 14 15 16 19 20 23 24 0 0;0 4 5 0 0 0 0 12 13 0 17 18 0 0 25 0 0;0 0 6 7 8 9 10 11 0 0 0 0 0 0 26 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 32;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 33;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 34;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 3 3 2 2 2 3 2 3 3 2 2 2 2 2 2 2 2 3 3 2 3 2 3;1 2 2 2 1 1 1 3 0 3 1 1 0 2 3 0 2 0 0 3 3 0 3 1 3;3 1 3 2 3 1 2 2 2 3 3 0 3 3 3 3 3 3 0 0 2 0 3 0 3;3 1 1 1 3 3 3 1 0 1 1 3 3 2 2 2 3 1 3 1 3 1 3 1 0;3 1 3 0 1 3 2 1 1 2 1 0 3 1 3 2 1 0 1 0 2 0 3 2 0;3 0 2 2 2 3 2 1 2 2 0 3 0 0 1 1 0 1 3 1 3 0 2 0 0;3 3 0 0 2 0 3 0 1 1 2 3 1 0 3 1 3 3 0 1 2 3 1 3 2;1 0 2 0 3 1 1 0 3 2 0 0 0 0 0 0 1 3 3 2 2 0 0 2 2;1 2 1 3 2 1 3 1 0 3 2 3 3 3 1 0 1 2 0 1 3 3 0 2 1;1 0 3 2 0 0 3 3 2 2 0 0 3 3 0 1 2 0 2 1 2 0 2 3 3;3 0 2 3 3 2 3 2 1 3 3 1 2 0 3 2 1 0 2 0 1 3 1 2 0;1 0 1 1 2 2 1 2 2 1 3 1 0 3 3 2 3 2 1 2 3 3 3 1 2;1 2 1 0 0 3 3 3 0 1 2 1 1 2 2 0 2 3 3 3 1 0 3 1 3;3 3 2 3 1 2 2 2 1 0 2 0 3 1 3 0 0 2 1 3 0 1 3 0 1;1 2 2 0 0 3 1 1 1 3 1 0 3 3 1 0 2 0 3 3 1 0 0 0 3;1 2 1 2 1 1 0 0 2 0 3 0 0 1 0 0 1 3 0 0 1 3 2 0 1;3 3 1 2 0 1 1 1 1 2 2 0 1 2 1 1 3 0 0 0 1 1 3 0 0;3 2 2 0 0 0 0 3 2 2 1 1 0 0 2 3 1 3 3 3 0 3 1 3 0;1 2 2 0 3 1 2 0 3 1 3 2 3 3 2 1 2 3 3 2 2 1 2 0 0;1 3 1 3 2 1 3 1 2 1 0 0 0 2 1 3 0 3 0 2 3 0 0 0 0]),[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 10 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;13 14 0 0 0 0 0 0 0 0 0 0 0 0 43 44 0 0 0 0 0 0 0 0 0;14 15 0 0 0 0 0 0 0 0 0 0 0 41 42 45 46 47 0 51 52 53 54 0 0;0 16 17 0 0 0 0 0 0 0 0 38 39 40 0 0 47 48 49 50 0 0 55 56 0;0 0 18 0 0 0 0 0 0 0 0 37 38 0 0 0 0 0 0 0 0 0 0 57 0;0 0 19 20 21 0 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 58 0;0 0 0 0 22 23 24 25 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 59 0;0 0 0 0 0 0 25 26 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 60 0;0 0 0 0 0 0 26 27 28 0 0 33 0 0 0 0 0 0 0 0 0 0 0 61 0;0 0 0 0 0 0 0 0 29 30 31 32 0 0 0 0 0 0 0 0 0 0 0 62 63;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3 2 3 2 3 2 3 2 2 2 2 3 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 2 3 3 3 2 2 3 2 3;3 2 0 1 3 2 1 0 1 2 2 1 2 1 1 0 2 1 0 2 1 3 3 2 3 3 0 0 3 2 3 1 3 1 3 3 0 3 1 0 0 2 1 1 0;1 1 3 0 3 3 0 1 2 2 3 0 0 2 2 3 3 0 0 1 3 3 3 1 3 2 3 1 3 3 1 0 0 0 0 2 2 2 0 3 3 0 1 1 2;1 0 2 2 0 1 0 2 2 3 2 1 0 3 1 3 1 1 1 3 3 2 1 1 2 0 1 1 2 1 3 0 3 3 0 1 1 2 2 3 1 1 1 1 3;1 1 0 0 0 3 0 2 2 0 0 2 1 3 2 3 2 1 3 2 0 2 3 0 0 0 3 0 0 1 0 1 0 2 0 1 1 1 2 3 0 2 1 3 1;3 3 1 1 2 0 3 0 0 3 2 1 1 1 3 1 3 0 1 0 1 0 3 1 3 1 2 3 1 2 1 1 3 3 2 1 2 1 3 0 2 3 2 0 2;3 1 2 0 0 3 3 1 1 2 1 0 3 3 3 0 2 1 3 0 3 0 0 2 2 3 2 1 0 1 3 2 0 2 3 3 3 0 1 2 1 1 1 0 2;3 1 2 0 0 3 1 0 3 3 2 3 2 0 2 3 2 2 0 0 2 0 1 1 3 1 1 3 2 0 1 0 0 2 2 1 2 1 0 0 3 0 2 2 1;3 0 0 2 0 0 1 0 3 2 2 0 0 3 1 1 2 0 0 0 3 2 0 2 1 1 2 0 3 2 3 2 0 3 3 3 1 3 2 1 0 2 0 1 2;1 0 1 0 1 2 3 2 0 1 0 0 0 1 1 2 1 3 0 2 0 0 0 3 2 0 0 1 2 0 2 1 2 3 2 1 0 3 2 0 2 1 1 2 2;3 0 0 1 0 2 0 2 0 2 3 2 3 0 2 3 3 1 0 2 3 2 0 3 0 0 2 0 2 3 0 3 1 0 3 1 0 2 2 1 0 1 2 2 3;1 3 3 1 2 3 1 2 2 3 3 3 3 0 2 1 2 1 1 3 0 2 2 2 0 3 3 2 0 3 0 0 0 0 3 2 2 0 0 1 3 3 0 0 0;1 0 3 1 2 1 0 3 0 0 0 0 3 2 3 0 2 2 0 0 1 1 1 2 3 3 1 0 2 1 2 1 3 1 2 0 2 3 0 0 0 3 1 0 3;3 2 0 0 1 1 2 3 1 1 2 1 2 2 0 3 2 1 2 0 0 1 3 1 3 2 2 3 3 3 3 0 3 1 2 0 0 1 1 3 3 2 2 1 2;1 3 3 1 3 0 0 2 0 3 0 3 1 2 2 3 0 3 0 2 0 3 1 1 0 2 3 2 1 2 0 0 2 0 3 1 0 3 2 1 0 1 1 1 2;3 1 3 3 2 1 2 1 1 3 1 3 1 0 3 3 2 3 1 3 0 0 1 2 1 3 0 2 2 2 2 1 2 3 2 0 3 2 0 2 1 2 1 1 2;1 2 2 1 3 2 0 3 1 1 1 0 2 3 1 2 0 0 2 0 0 2 3 2 3 1 1 3 2 1 1 3 3 3 0 1 3 3 1 0 2 0 1 1 0;1 2 0 0 2 1 1 0 2 2 0 2 0 3 1 2 2 0 2 0 3 2 0 0 2 1 1 1 0 1 2 0 0 2 3 1 0 0 1 2 0 3 2 1 2;1 2 2 1 0 2 1 1 3 1 2 3 1 2 2 3 1 2 2 2 1 1 0 0 1 2 0 2 0 3 2 1 0 2 3 1 1 0 2 1 1 0 0 0 2;3 0 2 0 1 1 2 0 3 3 3 3 0 1 0 1 3 1 1 2 1 1 1 3 0 0 3 0 0 3 1 0 2 3 2 0 2 2 0 3 0 1 1 3 0;3 1 3 0 2 1 3 1 0 3 0 3 1 2 1 3 2 3 0 1 0 3 3 3 0 1 2 0 0 1 2 2 3 2 0 2 1 2 2 3 1 0 0 3 1;3 1 2 0 1 2 3 0 1 0 0 1 2 0 1 1 1 2 1 1 3 1 1 2 0 1 3 0 3 0 0 0 0 1 1 2 1 3 0 2 0 3 2 2 1;3 0 2 1 0 3 2 2 1 0 2 3 1 1 2 1 1 1 1 3 3 2 2 3 2 1 2 2 0 1 3 3 0 3 3 0 1 2 0 0 3 2 1 0 1;3 3 2 2 3 3 2 0 2 1 1 3 3 3 1 2 0 3 0 1 1 3 3 1 0 3 0 1 0 2 1 2 2 0 0 0 2 1 2 1 0 3 0 3 2;1 0 3 2 1 0 2 3 1 1 3 1 3 2 2 2 3 0 2 1 3 2 1 1 1 3 1 0 0 0 0 0 3 2 3 3 3 1 2 2 1 2 0 3 0;1 0 3 3 3 2 2 3 0 0 0 3 3 3 0 0 3 3 0 0 2 3 1 3 3 3 1 1 3 2 3 0 0 2 2 1 0 0 2 3 3 3 3 3 0;3 0 1 1 0 1 2 3 1 3 1 3 0 3 3 1 2 3 3 2 3 3 2 3 1 3 2 1 0 1 0 1 3 1 0 2 2 0 0 3 1 0 3 0 0;1 3 3 2 2 2 1 0 1 0 3 3 2 0 2 3 0 1 0 0 3 1 0 1 2 1 0 2 1 3 2 3 2 0 0 2 0 3 2 1 3 1 0 0 3;3 2 3 2 2 3 1 3 0 1 2 0 3 3 2 3 3 1 0 1 1 1 0 2 2 2 3 3 2 0 2 0 1 1 0 2 0 1 0 2 1 0 3 2 0;3 0 3 1 0 3 3 3 0 2 1 2 2 2 0 2 0 3 1 1 0 2 2 0 0 2 2 1 0 1 0 0 2 3 3 0 0 0 0 2 2 0 3 2 0;3 1 3 0 1 2 3 3 1 1 3 1 2 0 1 1 0 3 1 1 0 2 3 1 3 2 1 1 3 0 3 3 3 0 1 3 2 0 0 3 2 3 2 0 1;3 2 2 2 2 3 3 0 1 2 1 2 3 3 2 2 2 2 3 0 1 2 0 3 2 2 3 0 2 2 3 1 1 0 0 3 2 3 0 0 1 2 2 0 0;3 1 3 2 1 3 1 2 3 2 2 2 2 0 1 3 0 2 3 0 0 3 3 2 3 3 1 2 1 1 0 0 3 2 0 3 0 2 1 0 2 3 2 1 3;3 1 0 0 1 2 3 2 2 3 1 0 1 2 2 0 3 2 1 0 1 1 0 2 1 3 0 1 1 0 1 2 1 3 1 3 3 0 2 0 0 1 0 0 2;3 0 0 3 0 2 2 1 1 0 0 2 0 3 0 2 1 0 3 2 0 3 3 3 3 0 3 0 0 1 2 0 1 3 2 3 0 3 0 2 3 1 2 0 0;3 3 0 2 0 0 2 0 0 0 1 2 2 0 0 1 0 2 2 1 0 2 2 2 3 3 2 3 0 2 0 2 1 2 0 1 1 3 3 0 3 2 1 2 3;3 2 0 2 1 3 3 0 3 0 1 1 0 3 0 2 0 3 1 2 0 0 3 2 2 1 1 2 1 0 2 0 0 1 3 2 2 2 2 1 2 1 2 3 1;1 3 1 2 2 0 2 0 3 3 3 2 1 0 2 3 1 2 3 3 2 3 2 1 2 0 3 3 1 1 1 0 3 2 0 0 1 2 2 2 0 2 1 3 3;1 3 3 3 0 0 3 2 2 1 2 0 2 3 1 2 0 2 1 3 3 2 0 1 3 0 0 2 3 1 3 3 1 0 0 0 2 2 3 3 2 0 1 2 1;3 3 2 0 0 0 1 2 0 0 3 1 2 1 0 1 0 2 1 0 2 1 2 2 2 1 0 1 1 3 1 3 2 3 3 1 3 2 0 3 3 0 2 2 2;1 1 1 0 3 1 0 0 3 2 3 2 2 0 2 2 3 0 1 2 0 1 3 3 2 1 3 1 1 0 2 1 0 0 0 0 2 3 1 3 0 1 1 2 0;3 1 0 1 0 1 3 3 2 2 3 2 1 3 2 0 1 1 2 0 0 2 2 2 2 1 1 3 3 1 0 3 0 2 0 1 2 2 2 2 2 0 1 3 1;1 0 3 1 1 2 3 1 3 1 0 1 1 1 3 0 2 3 1 3 1 0 3 3 3 2 0 1 3 3 1 3 0 0 2 3 0 2 3 1 3 2 1 3 2;3 0 3 2 3 3 2 3 3 1 0 0 3 2 0 1 0 3 1 1 2 0 0 3 2 1 1 2 2 1 1 1 2 1 3 1 3 3 3 2 0 1 0 2 2;1 3 3 1 3 2 2 3 2 0 2 3 3 1 3 1 0 3 0 1 2 2 1 1 1 2 2 2 0 3 0 2 1 0 3 1 2 0 1 0 0 3 0 3 0;3 2 3 1 0 0 0 0 2 3 1 3 3 2 2 1 2 1 3 2 2 1 0 2 2 1 0 3 1 3 1 3 2 0 1 3 2 2 3 0 2 1 3 1 3;1 3 3 1 3 0 3 1 0 3 1 1 2 0 3 2 1 2 1 2 3 0 1 2 3 0 1 2 1 0 0 3 1 3 0 2 3 2 2 2 0 1 0 3 3;3 0 0 0 0 0 3 0 0 1 3 0 1 3 3 3 1 0 1 2 1 0 1 0 3 1 0 1 2 1 3 1 0 2 0 3 0 3 0 2 2 0 2 0 3;3 2 0 3 2 3 3 1 1 3 0 0 0 3 3 2 2 3 1 3 3 2 1 3 3 2 0 2 0 3 2 0 1 1 2 2 1 1 2 0 0 2 0 1 1;1 1 1 2 0 1 0 0 2 0 2 2 3 3 3 3 0 3 0 3 1 3 3 1 3 0 3 3 0 1 0 1 1 2 2 0 3 3 0 3 0 3 3 0 0]),[1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 8 9 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 13 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 48 49 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 17 18 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 44 45 46 0 0 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 20 21 22 0 0 0 0 0 0 0 0 0 0 37 38 39 40 41 42 0 0 0 0 0 52 53 54 55 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 23 24 25 26 0 0 31 32 33 34 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 56 57 58 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 27 28 29 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 58 59 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 66 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 70 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 74 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 79 80 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 81 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 83 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 84 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 85 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 88 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 91 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 93 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 96 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 101 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 106 107 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 109 110]))","published":true,"deleted":false,"likes_count":14,"comments_count":0,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":57,"test_suite_updated_at":"2012-02-08T22:51:09.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2012-02-08T03:01:26.000Z","updated_at":"2026-02-07T15:43:43.000Z","published_at":"2012-02-09T00: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\":[],\"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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\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 purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size\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\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That 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[                                           +   +\\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \\n                 NW                        +   + \\n\\n                                           +   +\\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\\n                                           +   +]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003enot\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e need to account for this.\u003c/w:t\u003e\u003c/w:r\u003e\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 path will always start at the NorthWest corner (subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(1,1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) and end at the SouthEast corner (subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(M,N)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. 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[    path = [  1   2   0   0   0   0 \\n              4   3   0   9  10   0\\n              5   6   7   8  11   0 \\n              0   0   0   0  12  13 ]]]\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 represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/w:t\u003e\u003c/w:r\u003e\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\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNOT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output 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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput maze:\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[    maze = [  3  2  2  2  3\\n              1  3  2  2  3\\n              1  3  2  3  1\\n              1  1  0  2  0\\n              1  0  2  1  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\u003eGraphical Representation:\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[    +---+---+---+---+---+\\n    |               |   |\\n    +   +---+---+---+---+\\n    |   |           |   |\\n    +   +---+---+---+   +\\n    |   |       |   |   |\\n    +   +   +   +---+   +\\n    |   |               |\\n    +   +   +---+   +   +\\n    |           |   |   |\\n    +---+---+---+---+---+]]\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\u003eSolution:\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[    soln = [  1   0   0   0   0\\n              2   0   0   0   0\\n              3   0   0   0   0\\n              4   7   8   9  10\\n              5   6   0   0  11 ]]]\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\u003eGraphical Representation:\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[    +---+---+---+---+---+\\n    | 1             |   |\\n    +   +---+---+---+---+\\n    | 2 |           |   |\\n    +   +---+---+---+   +\\n    | 3 |       |   |   |\\n    +   +   +   +---+   +\\n    | 4 | 7   8   9  10 |\\n    +   +   +---+   +   +\\n    | 5   6     |   |11 |\\n    +---+---+---+---+---+]]\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":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":44378,"title":"Five-dimensional maze","description":"*Description*\r\n\r\nThe traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes _x_ and _y_. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\r\n\r\nThis problem is a generalization of \u003chttps://www.mathworks.com/matlabcentral/cody/problems/283 Problem 283\u003e. If you haven't solved that yet, I would recommend solving it first.\r\n\r\n*Encoding*\r\n\r\n* The maze will be represented by an [ _M_ x _N_ x _O_ x _P_ x _Q_ ] matrix. \r\n* Each element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\r\n* Walls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\r\n* The start position is at the origin: subscript |(1,1,1,1,1)|.\r\n* The end position is at the furthest extent: subscript |(M,N,O,P,Q)|.\r\n* The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/283 Problem 283\u003e for a 2-D example.\r\n* You are *NOT* guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.","description_html":"\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes \u003ci\u003ex\u003c/i\u003e and \u003ci\u003ey\u003c/i\u003e. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\u003c/p\u003e\u003cp\u003eThis problem is a generalization of \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/283\"\u003eProblem 283\u003c/a\u003e. If you haven't solved that yet, I would recommend solving it first.\u003c/p\u003e\u003cp\u003e\u003cb\u003eEncoding\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe maze will be represented by an [ \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e x \u003ci\u003eO\u003c/i\u003e x \u003ci\u003eP\u003c/i\u003e x \u003ci\u003eQ\u003c/i\u003e ] matrix.\u003c/li\u003e\u003cli\u003eEach element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\u003c/li\u003e\u003cli\u003eWalls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\u003c/li\u003e\u003cli\u003eThe start position is at the origin: subscript \u003ctt\u003e(1,1,1,1,1)\u003c/tt\u003e.\u003c/li\u003e\u003cli\u003eThe end position is at the furthest extent: subscript \u003ctt\u003e(M,N,O,P,Q)\u003c/tt\u003e.\u003c/li\u003e\u003cli\u003eThe output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/283\"\u003eProblem 283\u003c/a\u003e for a 2-D example.\u003c/li\u003e\u003cli\u003eYou are \u003cb\u003eNOT\u003c/b\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/li\u003e\u003c/ul\u003e","function_template":"function path = solve_maze5(maze)\r\n    path = zeros(size(maze));\r\n    path(1) = 1;\r\nend","test_suite":"%%\r\nmaze = reshape([15 15 15 15 15 15 15 15 15 31], [1 1 1 1 10]);\r\ntruth = reshape([1 2 3 4 5 6 7 8 9 10], [1 1 1 1 10]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([28 28 30 28 30 30 29 30 28 29 29 30 31 29 28 29 30 30 31 29 29 28 30 29 29 29 28 30 31 29 29 30 29 31 29 29 30 30 28 31 30 29 28 30 31 30 30 29 30 29 28 31 30 29 28 30 29 29 28 31 29 28 30 31 30 29 30 31 29 29 29 29 28 30 30 31 28 30 31 29 29 31 29 28 29 28 31 30 30 29 30 30 31 31 30 30 30 30 30 31], [10 10 1 1 1]);\r\ntruth = reshape([1 2 3 4 5 6 7 0 11 12 0 0 0 0 0 0 8 9 10 13 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 16 15 0 0 0 0 0 0 0 0 17 18 0 0 0 0 0 0 0 0 20 19 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 24 23 22 0 0 0 0 0 0 26 25 0 0 0 0 0 0 0 0 27 28 29 30 31], [10 10 1 1 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([20 29 22 23 23 23 22 30 29 21 28 29 23 29 29 29 30 29 29 29 23 22 31 30 31 23 23 29 23 21 29 29 23 22 31 23 23 22 22 31 28 23 21 28 29 31 23 30 31 23 30 22 31 23 23 28 30 31 29 21 31 29 31 21 29 22 31 29 29 29 23 23 23 31 23 22 31 22 31 31 28 23 28 23 23 23 22 31 30 23 28 23 23 28 23 31 30 31 23 23 28 31 29 28 29 31 29 29 31 31 29 31 30 29 31 29 30 31 30 31 30 30 30 31 31], [5 5 1 5 1]);\r\ntruth = reshape([1 2 0 0 0 0 3 0 0 0 13 14 0 0 0 12 15 16 0 0 11 18 17 0 0 0 0 0 0 0 0 4 0 0 0 0 5 0 0 0 9 8 25 28 29 10 19 26 27 30 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 7 24 0 0 0 20 23 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 22 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33], [5 5 1 5 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([18 23 19 28 27 22 23 22 31 19 25 22 29 25 21 27 25 29 27 29 30 30 31 22 31 29 23 29 29 29 29 21 29 21 31 31 30 31 31 29 29 29 21 29 29 23 23 23 30 31 23 23 29 27 19 27 27 31 22 31 30 23 28 23 27 22 29 29 19 25 19 30 31 27 23 30 22 30 28 31 29 31 21 23 23 30 29 29 21 29 22 31 31 31 31 31 30 31 30 23 27 23 22 23 29 17 19 29 23 29 25 23 19 27 29 31 22 30 31 29 18 31 19 27 31 23 31 21 28 29 31 23 31 31 29 30 29 29 31 29 23 29 30 28 31 23 30 31 31 23 19 27 29 23 27 31 30 31 27 25 19 27 30 30 31 22 31 21 26 27 31 19 31 22 23 31 30 31 22 29 28 31 28 31 31 31 29 23 21 21 23 30 23 31 31 23 23 22 30 31 29 26 31 30 29 27 26 30 29 29 30 30 30 31 27 29 26 31 25 25 30 31 27 31 31 30 30 28 31 29 30 31 30 30 31 28 29 30 31 31 31 31 30 31 29 30 31 30 30 31], [5 5 2 5 1]);\r\ntruth = reshape([1 2 0 0 0 0 0 0 0 0 0 24 23 0 0 0 19 22 0 0 0 20 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 13 0 0 0 17 14 0 0 0 3 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 11 0 0 0 0 12 0 0 0 16 15 0 0 0 4 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 35 36 0 6 7 0 0 0 0 0 0 0 0 28 0 0 0 0 29 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 38 0 0 0 34 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 32 39 0 0 0 0 40], [5 5 2 5 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([21 5 22 29 19 23 31 7 30 15 21 26 23 7 19 23 22 29 11 11 14 15 30 30 23 11 7 11 25 15 13 13 15 15 27 23 31 28 29 27 13 14 31 31 15 23 14 23 30 19 30 30 31 29 25 7 14 29 23 31 25 27 30 29 23 30 29 12 31 19 7 23 31 19 11 28 30 15 26 27 15 13 25 26 23 27 23 23 28 15 19 20 23 27 15 7 31 19 23 27 28 23 22 31 15 30 23 29 30 15 15 28 31 23 21 23 30 23 29 23 22 15 15 23 23 26 15 23 7 29 23 28 31 25 15 23 27 27 31 23 29 23 14 29 25 23 7 15 23 31 27 30 15 25 21 28 23 19 31 15 31 27 23 19 23 22 30 30 27 15 30 15 27 7 23 30 27 26 31 25 23 19 30 31 23 29 29 14 31 27 23 30 23 15 23 23 23 30 31 19 7 23 23 25 27 26 27 23 13 23 21 31 23 27 15 31 15 29 26 23 15 19 31 23 15 29 23 30 31 15 31 31 7 28 31 14 23 13 23 15 29 21 31 30 31 31 31 23 30 31 26 27 25 31 21 15 21 31 28 31 15 23 21 29 29 26 31 29 27 29 30 31 27 15 15 27 23 23 13 27 25 23 23 29 19 30 27 27 31 19 31 28 27 15 29 15 23 23 23 15 15 26 31 5 15 31 30 15 29 31 26 31 30 31 29 15 13 31 17 31 27 31 27 15 15 27 31 30 30 27 11 13 23 19 29 31 27 29 14 31 28 29 27 27 15 31 31 27 30 23 30 31 15 13 15 15 15 29 31 13 13 31 15 31 29 29 29 23 23 23 15 23 30 23 7 22 27 7 19 29 25 30 30 30 31 23 29 23 30 25 11 29 7 22 31 26 31 26 30 27 29 31 27 28 27 15 15 27 27 27 28 30 27 19 31 31 14 15 27 21 30 31 31 23 31 19 28 31 27 15 21 21 23 31 29 27 31 29 23 15 22 29 29 31 25 27 23 15 7 15 29 25 13 30 29 15 27 21 27 23 30 15 29 26 23 28 29 15 22 31 27 23 3 14 31 13 15 14 30 29 29 15 23 23 29 31 14 30 31 23 22 23 15 15 29 23 15 23 15 31 15 30 28 30 29 28 27 31 11 27 31 13 30 15 11 13 28 31 15 11 15 27 14 30 15 28 27 28 15 11 30 31 15 29 13 28 30 27 31 31 30 30 30 27 31 30 31 26 31 15 15 29 28 15 27 25 31 31 13 13 31 26 31 31 29 29 27 26 31 29 27 30 31 30 31 25 28 27 30 31 31 27 27 28 31 26 31 26 31 15 26 29 30 31 27 15 31 31 14 27 29 15 15 14 15 30 31 31 29 15 30 15 30 31 15 31 29 30 30 15 15 15 15 14 31 25 30 30 18 31 15 21 23 14 31 7 30 29 15 13 14 27 27 23 31 23 27 7 26 27 31 27 23 31 29 29 15 15 15 29 30 15 19 21 15 29 31 29 29 27 15 31 23 31 23 21 29 13 22 15 31 31 27 25 11 14 29 29 22 31 28 31 31 11 27 31 14 30 30 31 7 22 31 25 13 23 25 27 23 31 25 23 25 22 31 29 28 31 27 31 31 27 30 26 15 21 23 21 29 15 15 23 31 15 23 31 13 30 30 23 28 31 21 15 13 23 31 31 22 31 19 31 7 30 23 26 31 30 29 15 30 15 22 31 15 19 28 31 30 23 23 31 26 31 7 15 7 27 14 29 29 26 30 27 31 23 26 31 23 25 30 30 14 31 31 26 31 27 30 31 23 11 31 15 21 7 23 28 31 23 26 31 31 31 27 26 30 30 31 25 30 23 31 14 31 31 31 21 26 15 30 30 31 31 7 15 23 28 31 31 15 29 27 13 15 15 30 30 31 27 29 23 29 29 15 23 23 31 30 31 30 23 30 29 31 28 31 31 15 15 15 14 15 31 15 30 23 27 7 17 30 15 19 13 31 27 7 23 30 23 31 22 27 29 27 30 23 22 31 31 22 31 23 15 15 22 29 15 19 11 31 23 19 30 29 22 23 27 23 31 19 19 22 15 31 31 11 19 31 31 31 29 30 31 31 19 29 29 14 29 29 31 31 25 29 31 31 19 31 31 27 29 31 11 19 29 31 28 30 31 31 29 23 30 15 14 29 13 23 29 7 27 31 14 31 22 30 31 31 31 31 15 7 13 15 15 29 30 31 23 7 23 15 14 15 15 31 14 15 23 21 23 31 27 27 30 23 27 28 27 27 27 15 29 27 27 29 21 30 27 27 31 31 14 27 15 11 23 27 23 31 23 27 23 15 15 31 30 15 23 31 31 15 23 27 15 27 30 30 31 25 27 30 31 23 30 29 30 27 27 15 30 27 14 31 14 23 27 13 27 7 27 31 31 23 15 27 23 19 15 29 22 30 31 25 27 23 31 25 27 21 7 23 31 23 31 15 27 15 15 21 31 15 29 15 15 29 29 15 7 15 31 29 23 29 30 31 31 23 7 14 31 30 15 15 31 30 30 30 29 25 15 11 15 15 27 29 29 29 31 30 31 31 31 15 15 14 31 11 27 28 27 27 29 29 31 27 31 31 31 29 28 30 29 15 27 30 29 31 9 14 27 27 15 31 15 15 30 31 27 11 29 13 15 29 13 30 31 25 15 31 30 30 31 29 15 30 31 11 31 13 14 31 30 31 31 15 28 30 29 26 31 27 27 15 30 31 30 15 29 15 30 11 31 27 29 14 31 29 15 31 14 29 15 31 30 31 31 31 15 28 30 30 31 15 31 15 31 30 31 7 28 30 15 13 15 30 23 15 15 15 21 21 30 31 29 23 27 7 27 23 23 23 22 15 24 30 29 19 21 21 15 31 27 23 31 30 29 28 31 22 15 31 29 29 30 23 30 23 23 31 11 27 15 23 25 28 15 29 29 31 30 23 29 29 23 11 19 31 27 19 27 19 26 27 23 23 29 7 23 23 7 30 29 9 30 11 15 23 15 25 27 30 15 15 31 27 15 27 31 14 30 29 14 31 29 13 29 29 31 23 31 15 23 7 30 31 21 23 15 23 15 30 31 15 30 27 30 15 19 22 27 30 28 31 13 31 29 30 31 29 27 30 31 13 31 30 27 23 31 27 31 21 31 31 27 15 27 14 31 22 15 11 25 19 30 31 27 30 23 19 23 30 31 15 23 29 26 31 29 15 27 30 29 15 28 27 31 31 27 23 21 14 30 29 31 23 23 23 15 29 30 31 27 31 31 31 19 26 31 15 15 28 31 23 30 29 23 29 23 30 31 26 31 23 22 29 29 29 29 28 31 29 31 15 31 22 31 30 29 14 30 31 31 31 31 23 31 14 31 11 15 11 23 29 30 31 22 31 23 29 29 19 24 27 26 31 22 31 13 26 15 14 31 31 30 29 31 23 11 13 30 31 14 31 31 7 23 31 31 14 31 11 25 27 31 15 23 31 19 27 15 7 13 19 28 15 25 15 7 30 27 27 27 15 30 31 15 23 15 14 31 27 30 31 27 19 29 29 31 21 7 31 30 23 30 31 27 27 31 30 29 31 13 15 27 15 27 31 7 31 15 7 22 29 7 29 15 15 31 23 31 29 15 13 15 30 15 23 31 31 23 31 30 23 29 11 7 30 27 11 27 27 25 15 28 23 31 15 19 15 28 31 11 13 11 30 23 30 31 27 31 27 30 31 11 7 29 29 23 29 15 31 31 29 29 22 31 23 15 15 14 11 19 23 30 23 30 27 23 31 19 22 15 29 23 21 21 15 29 30 15 15 31 29 27 30 31 30 31 23 30 29 15 15 29 31 29 21 15 30 23 15 27 11 21 27 22 30 25 31 23 7 23 31 14 23 31 15 29 15 14 23 23 15 31 23 14 31 23 7 23 7 15 31 15 15 30 15 31 13 11 27 13 13 30 31 29 31 31 14 31 15 11 27 28 30 28 31 15 31 15 31 30 27 25 29 30 29 27 15 31 14 31 15 28 30 30 31 31 27 29 27 15 31 15 30 27 31 31 31 31 26 29 29 30 31 31 31 15 31 31 27 26 31 27 25 30 27 11 30 31 15 30 15 31 31 30 30 15 30 30 15 30 27 14 31 30 31 31 31 29 14 31 15 15 31 31 27 27 13 31 28 15 15 30 31 31 31 15 14 31 13 13 31 29 15 31 15 29 30 31 14 31 31 30 27 21 30 31 30 29 27 30 31 23 29 28 15 21 21 15 30 31 29 15 22 15 11 31 25 27 11 30 25 27 27 15 13 15 11 26 31 27 7 22 31 25 26 29 22 30 31 27 15 23 31 27 27 21 29 23 27 30 27 31 27 14 31 7 28 31 15 26 31 15 7 23 30 15 28 31 29 31 25 25 23 31 13 31 27 14 31 15 31 26 15 7 31 27 19 19 23 11 7 30 15 13 15 29 30 7 30 23 15 23 14 31 21 15 15 22 30 31 31 15 31 7 30 15 30 7 29 30 27 26 27 30 29 13 31 22 29 23 31 30 31 27 19 27 22 31 26 15 15 14 30 30 23 15 23 31 26 31 25 22 31 27 11 31 29 25 30 31 27 31 15 23 22 27 30 30 15 19 31 25 29 23 7 31 29 27 23 27 27 29 29 29 28 31 15 31 31 23 31 21 13 21 29 19 31 31 29 23 21 29 31 23 15 31 27 28 31 26 15 27 31 15 26 31 21 7 14 30 31 29 20 30 31 15 31 31 13 30 29 31 29 30 31 29 30 31 23 31 15 27 11 15 22 23 14 27 15 7 15 25 30 29 29 11 23 28 31 31 27 27 31 30 30 15 23 31 22 31 31 31 23 21 30 29 31 29 30 23 31 27 30 31 22 15 15 30 31 15 19 14 31 29 31 13 22 31 31 31 31 25 27 23 25 19 31 11 30 31 27 27 27 22 31 23 26 31 27 19 27 15 30 23 15 27 30 15 29 15 31 7 27 30 31 31 27 15 30 22 27 31 31 31 15 15 14 31 30 31 15 14 29 13 30 31 15 31 31 7 29 30 15 30 23 23 22 31 27 15 27 15 21 28 31 7 15 15 15 23 13 31 13 25 23 31 23 31 22 30 23 30 27 31 11 15 15 31 30 15 25 14 31 22 31 27 26 29 23 31 27 15 31 23 11 23 22 31 21 15 19 29 14 31 23 23 23 7 15 29 15 23 29 30 31 27 14 31 15 23 23 28 30 23 29 31 29 19 27 29 15 23 25 29 31 15 29 15 27 14 31 30 30 31 31 7 30 30 30 31 7 29 31 29 13 29 23 29 31 23 23 15 29 31 31 7 23 31 7 31 15 31 15 26 31 15 13 29 13 30 31 31 29 31 31 13 29 30 30 31 31 15 27 30 27 31 11 28 31 28 15 27 29 27 29 15 13 15 27 15 13 29 25 15 30 31 31 31 15 15 15 31 25 30 15 15 29 30 31 29 31 31 29 27 27 25 25 31 28 27 31 14 31 31 27 31 28 31 15 13 29 27 15 30 31 15 31 15 30 31 15 15 13 11 27 15 30 31 14 31 15 29 28 29 29 31 31 15 31 15 15 31 14 31 31 31 28 31 31 31 29 31 15 31 14 31 30 18 22 30 31 26 23 22 30 25 22 29 26 31 31 19 31 28 30 23 26 31 31 27 23 25 29 23 22 27 31 31 23 27 31 30 30 31 27 29 23 21 22 27 27 22 30 23 30 31 27 26 29 26 31 29 25 23 30 27 29 29 29 27 23 27 23 31 23 23 30 31 26 30 31 29 23 28 31 19 27 23 29 23 23 26 23 27 30 23 28 27 30 27 27 23 23 30 27 23 22 31 31 30 31 23 31 22 29 29 29 23 29 29 29 31 31 23 31 23 30 30 31 31 23 21 31 29 28 23 29 27 31 27 27 31 25 25 22 27 29 23 30 29 23 30 23 19 31 27 29 25 23 21 27 27 31 23 31 23 21 29 23 23 23 31 31 23 30 23 27 27 31 22 23 25 29 27 26 31 31 27 30 31 23 21 22 23 26 31 23 27 22 31 23 31 30 27 26 27 27 31 30 31 23 23 31 28 31 27 19 31 21 31 29 25 27 31 21 31 30 31 31 31 31 31 30 31 22 23 29 21 30 29 31 31 31 23 29 23 31 29 29 29 23 22 31 30 31 31 27 29 30 29 21 23 29 29 31 23 28 31 29 23 23 29 23 29 19 23 23 23 30 31 23 29 22 31 27 19 29 25 29 28 31 31 29 31 31 21 21 23 30 31 31 31 26 23 31 27 23 19 30 31 31 28 31 22 27 19 31 29 29 21 25 29 31 31 31 31 30 31 27 26 31 23 30 30 23 29 18 31 25 31 31 30 31 31 23 23 29 29 22 31 21 27 30 30 31 19 22 23 23 31 31 31 29 23 29 23 30 31 31 30 21 30 30 30 31 31 31 23 30 22 31 26 30 29 27 31 31 28 31 29 31 21 31 29 27 31 29 23 30 31 23 31 23 26 23 23 27 27 19 31 31 23 26 30 31 25 23 25 19 27 31 27 31 26 23 25 23 19 31 30 31 31 31 23 29 29 21 31 23 27 31 27 31 31 21 29 27 29 29 23 31 27 27 31 30 19 29 26 29 30 23 31 25 30 31 27 29 27 19 23 31 31 29 30 31 31 23 31 22 23 31 23 31 30 30 23 28 31 29 29 31 23 23 31 29 29 23 23 28 31 31 22 31 31 30 31 30 27 30 27 27 30 29 29 26 29 29 27 30 29 31 29 27 28 31 29 31 27 30 31 31 29 30 30 31 31 31 26 30 31 29 31 31 30 31 31 28 31 27 30 29 31 31 27 27 31 28 30 31 27 27 31 30 31 29 25 25 26 30 31 27 30 27 30 31 29 30 27 30 31 31 26 30 31 31 31 28 31 27 25 31 31 31 27 31 31 31 31 31 25 27 27 27 31 31 27 31 28 28 30 31 30 31 29 31 29 29 31 31 29 29 31 29 28 31 31 31 30 31 30 31], [5 5 5 5 5]);\r\ntruth = reshape([1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 94 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0 0 0 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 0 0 0 0 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 90 0 0 0 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 89 0 0 0 105 0 0 0 0 106 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 51 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 0 0 0 0 0 0 0 0 0 0 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 20 47 48 63 0 0 0 49 52 27 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 21 46 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 53 58 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 45 0 0 0 0 44 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 0 0 0 121 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 85 0 0 0 0 0 0 0 0 0 111 0 0 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 74 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 0 0 0 0 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 0 0 0 0 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 0 0 0 70 77 0 0 0 0 24 0 0 0 26 25 0 0 0 0 0 0 0 0 0 79 0 0 0 69 22 0 0 0 68 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 116 0 0 0 0 117 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 54 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 67 0 43 42 55 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 41 32 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 37 0 0 40 39 122 123], [5 5 5 5 5]);\r\nassert(isequal(solve_maze5(maze), truth));","published":true,"deleted":false,"likes_count":5,"comments_count":19,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":48,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":35,"created_at":"2017-10-12T15:00:57.000Z","updated_at":"2026-03-19T20:06:56.000Z","published_at":"2017-10-16T01:51:01.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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\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 traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes\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\u003ex\u003c/w:t\u003e\u003c/w:r\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:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ey\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\u003c/w:t\u003e\u003c/w:r\u003e\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 problem is a generalization 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://www.mathworks.com/matlabcentral/cody/problems/283\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 283\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. If you haven't solved that yet, I would recommend solving it first.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eEncoding\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 maze will be represented by an [\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\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eO\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eP\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eQ\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e ] matrix.\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\u003eEach element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\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\u003eWalls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\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 start position is at the origin: subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(1,1,1,1,1)\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=\\\"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 end position is at the furthest extent: subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(M,N,O,P,Q)\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=\\\"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 output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer 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/283\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 283\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for a 2-D example.\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\u003eYou are\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNOT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\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":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":1122,"title":"USC Fall 2012 ACM: Rover Maze","description":"This Challenge is to solve Question F, Martian Pits, of the \u003chttp://contest.usc.edu/index.php/Fall12/Home USC ACM Fall 2012 Contest\u003e.\r\n\r\nThe task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on array.\r\n\r\nThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\r\n\r\n  Initial conditions are Rover Stopped and Facing +Y.\r\n  Commands are processed at 1 second intervals\r\n  \r\n  Commands and their attributes:\r\n  FORWARD: Starts rolling forward at 1 cm/s\r\n  BACKWARDS: Roll backwards at 1 cm/s\r\n  FASTER: Increase forward speed by 1 cm/s up to 5 cm/s\r\n  SLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \"Stopped\"\r\n  STOP: Halts rover movement\r\n  RIGHT: Turn rover 90 degrees to the right\r\n  LEFT: Turn the rover 90 degrees to the left\r\n  NOOP: No change in anything \r\n\r\n\r\n  Commands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\r\n\r\n  Commands FASTER and SLOWER only take effect if the rover is moving forward.\r\n\r\n\r\n*Input: [Char array]* \".\" is Flat ground, \"P\" Pit, \"R\" Rover start location, \"D\" is Destination.  Matrix max dim 50, min 1. \r\n\r\n*Output: [T]*; Drive Time to destination; -1 if not possible\r\n\r\n*Scoring: Time (msec)*\r\n\r\n\r\nThe full \u003chttp://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.in.txt USC data file\u003e\r\n\r\n*Example:*\r\n\r\n*Input: [A]*\r\n\r\n  ...................D\r\n  .P......P.P.........\r\n  .P...PPPP.P.........\r\n  .P...P....P.........\r\n  .P...P.PPPP.........\r\n  .P.PPP.P............\r\n  .P.P...P............\r\n  .PPP.PPPPPPPPPPPPPPP\r\n  ....R...............\r\n  PPPPPPPPPPPPPPPPPPPP\r\n\r\n*Output: [19]* as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop. \r\n\r\nOnce again my code is large thus the contest will be scored based on Processing Time.\r\n\r\n*Hints:* One Speed-Up method is to do an initial Start/Finish connectivity check.\r\n \r\n\r\n\u003chttp://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.yucheng.cpp.txt Martian Pits C solution\u003e.  Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.","description_html":"\u003cp\u003eThis Challenge is to solve Question F, Martian Pits, of the \u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home\"\u003eUSC ACM Fall 2012 Contest\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on array.\u003c/p\u003e\u003cp\u003eThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eInitial conditions are Rover Stopped and Facing +Y.\r\nCommands are processed at 1 second intervals\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands and their attributes:\r\nFORWARD: Starts rolling forward at 1 cm/s\r\nBACKWARDS: Roll backwards at 1 cm/s\r\nFASTER: Increase forward speed by 1 cm/s up to 5 cm/s\r\nSLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \"Stopped\"\r\nSTOP: Halts rover movement\r\nRIGHT: Turn rover 90 degrees to the right\r\nLEFT: Turn the rover 90 degrees to the left\r\nNOOP: No change in anything \r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands FASTER and SLOWER only take effect if the rover is moving forward.\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput: [Char array]\u003c/b\u003e \".\" is Flat ground, \"P\" Pit, \"R\" Rover start location, \"D\" is Destination.  Matrix max dim 50, min 1.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput: [T]\u003c/b\u003e; Drive Time to destination; -1 if not possible\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring: Time (msec)\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe full \u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.in.txt\"\u003eUSC data file\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput: [A]\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e...................D\r\n.P......P.P.........\r\n.P...PPPP.P.........\r\n.P...P....P.........\r\n.P...P.PPPP.........\r\n.P.PPP.P............\r\n.P.P...P............\r\n.PPP.PPPPPPPPPPPPPPP\r\n....R...............\r\nPPPPPPPPPPPPPPPPPPPP\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput: [19]\u003c/b\u003e as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop.\u003c/p\u003e\u003cp\u003eOnce again my code is large thus the contest will be scored based on Processing Time.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e One Speed-Up method is to do an initial Start/Finish connectivity check.\u003c/p\u003e\u003cp\u003e\u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.yucheng.cpp.txt\"\u003eMartian Pits C solution\u003c/a\u003e.  Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.\u003c/p\u003e","function_template":"function t=Pits(A)\r\n  t=-1;\r\n\r\nend","test_suite":"feval(@assignin,'caller','score',1000);\r\n%%\r\nurlwrite('http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.in.txt','pits.in.txt');\r\n%%\r\n fid=fopen('pits.in.txt','r');\r\n t_expect=[19 2 2 3 -1 7 14 23 401 200 42 -1 27 -1];\r\n \r\n t1=0;\r\n qty=fscanf(fid,'%i',1);\r\nfor q=1:qty %qty\r\n  n = fscanf(fid,'%f %f\\n',2)'; % array size\r\n  A=zeros(n);\r\n  for i=1:n(1)\r\n   strv=fgetl(fid);\r\n   %A(i,:)=strv-'.';\r\n   A(i,:)=strv;\r\n  end\r\n\r\n  ta=clock;\r\n   [t]=Pits(char(A)) ;\r\n  t1=t1+etime(clock,ta)*1000; % Time in msec\r\n   \r\n  fprintf('%2i  Cmds %3.0f  Sum Time %.0f \\n',q,t,t1)\r\n\r\n  %isequal(t,t_expect(q))\r\n\r\n  assert(isequal(t,t_expect(q)));\r\n\r\nend % q\r\n\r\nt2=min(1000,t1);\r\nfprintf('Actual Time = %.1f msec\\n',t1)\r\nfeval(@assignin,'caller','score',floor(t2));","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":"2012-12-14T01:14:38.000Z","updated_at":"2012-12-14T02:24:14.000Z","published_at":"2012-12-14T02:24: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 Challenge is to solve Question F, Martian Pits, of the\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://contest.usc.edu/index.php/Fall12/Home\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUSC ACM Fall 2012 Contest\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 task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on 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:t\u003eThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\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[Initial conditions are Rover Stopped and Facing +Y.\\nCommands are processed at 1 second intervals\\n\\nCommands and their attributes:\\nFORWARD: Starts rolling forward at 1 cm/s\\nBACKWARDS: Roll backwards at 1 cm/s\\nFASTER: Increase forward speed by 1 cm/s up to 5 cm/s\\nSLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \\\"Stopped\\\"\\nSTOP: Halts rover movement\\nRIGHT: Turn rover 90 degrees to the right\\nLEFT: Turn the rover 90 degrees to the left\\nNOOP: No change in anything \\n\\nCommands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\\n\\nCommands FASTER and SLOWER only take effect if the rover is moving forward.]]\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: [Char array]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \\\".\\\" is Flat ground, \\\"P\\\" Pit, \\\"R\\\" Rover start location, \\\"D\\\" is Destination. Matrix max dim 50, min 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\u003eOutput: [T]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e; Drive Time to destination; -1 if not possible\u003c/w:t\u003e\u003c/w:r\u003e\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: 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:t\u003eThe full\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://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.in.txt\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUSC data file\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: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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput: [A]\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[...................D\\n.P......P.P.........\\n.P...PPPP.P.........\\n.P...P....P.........\\n.P...P.PPPP.........\\n.P.PPP.P............\\n.P.P...P............\\n.PPP.PPPPPPPPPPPPPPP\\n....R...............\\nPPPPPPPPPPPPPPPPPPPP]]\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: [19]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eOnce again my code is large thus the contest will be scored based on Processing 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e One Speed-Up method is to do an initial Start/Finish connectivity check.\u003c/w:t\u003e\u003c/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://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.yucheng.cpp.txt\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMartian Pits C solution\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.\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\"}]}"}],"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,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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":60591,"title":"ICFP2024 001: Lambdaman 6","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\r\nThis maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB. SF B$ B$ L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\" Sl I#,\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\r\nB. S3/,6%},!-\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\r\n\r\nThis challenge is to return a string of 199 'R's with minimal matlab program size.\r\n\r\nAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.","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: 537px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 268.5px; transform-origin: 407px 268.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 365px 8px; transform-origin: 365px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\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: 301px 8px; transform-origin: 301px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \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: 331px 8px; transform-origin: 331px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 331px 8px; transform-origin: 331px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. SF B$ B$ L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\" Sl I#,\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 294px 8px; transform-origin: 294px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\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: 235.5px 8px; transform-origin: 235.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. S3/,6%},!-\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 250px 8px; transform-origin: 250px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of 199 'R's with minimal matlab program size.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman6(m)\r\n% m is a maze where '.' is a power-dot to eat, L is Lambdaman the token being moved, \r\n% '#' is a wall, and Linefeed(ascii 10) is right edge of maze\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman6 is a string of 199 R characters, char(82*ones(1,199))\r\n v='R';\r\nend\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nm=['L' char(46*ones(1,199))]; % 46 is .\r\nv = Lambdaman6(m)\r\nvd=double(v); % keep only L-76 R-82\r\nvd(vd\u003e82)='';vd(vd\u003c76)=''; vd(vd\u003e76 \u0026 vd\u003c82)=''; % Remove non-operable characters\r\nvalid=0;\r\nidx=1;\r\nmc=[0 ones(1,199)];\r\nfor i=1:length(vd)\r\n if vd(i)==82 % R\r\n  idx=idx+1;\r\n  mc(idx)=0;\r\n  if idx==200,break;end\r\n else % must be 76 L\r\n  if idx\u003e1\r\n   idx=idx-1;\r\n   mc(idx)=0;\r\n  end\r\n end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nend\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-09T15:15:26.000Z","deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T13:32:16.000Z","updated_at":"2026-03-31T11:17:56.000Z","published_at":"2024-07-09T15:15:26.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 6 maze is a single row of width 200 with L at index 1. Columns 2 thru 200 contain '.' a power-dot or piece-of-cheese depending Pacman or Mouse preference.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 maze is a string 'L....... (many dots) .....' of length 200. Future mazes will be 2D of integers. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman,onto every dot.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. SF B$ B$ L\\\" B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L$ L# ? B= v# I\\\" v\\\" B. v\\\" B$ v$ B- v# I\\\" Sl I#,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman6 solution was written in ICFP to reduce length versus 199 Rs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. S3/,6%},!-\\\"$!-!.[} B$ L# B$ v# B$ v# B$ v# SLLLLLLLL L$ B. B. v$ v$ v$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of 199 'R's with minimal matlab program size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\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":60608,"title":"ICFP2024 006: Lambda 21 - 3D","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\" B/ v# I% BT I\" BD B% v# I% Sl~aF   in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, a=\u003e#, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\r\nB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\" BD B% vp I% SO\u003eLF\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\n Lambdaman21 was solved by Thirteen Team using tools. ThirteenTeam youtube ICFP2024\r\nThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.","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: 607px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 303.5px; transform-origin: 407px 303.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 338.5px 8px; transform-origin: 338.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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.5px 8px; transform-origin: 206.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\" B/ v# I% BT I\" BD B% v# I% Sl~aF   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, a=\u0026gt;#, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 366px 8px; transform-origin: 366px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\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: 360px 8px; transform-origin: 360px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\" BD B% vp I% SO\u0026gt;LF\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 100px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 50px; text-align: left; transform-origin: 384px 50px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 100px;height: 100px\" src=\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky48F1UmhbxUXMliA0WIjA0GFCgAYUOMoxgYVNI0yrDJFVdAkRmSAYAqFOrXs0aNYIeahx9Bq1xE58rKwi03s17N4Utj1bK6U289QEHFTiMSBEjSBUxcPwkwpSKqKpJcpRQKM69O4AWfVT+oRzuvXxvASGKiNEzaTZP8ubj8+YA6CR8+fhZJ/ChhhEqnfflJyAANmBSUoADJkhAEHyQchOCCcp3AB0kQRjhgAQM0cd/M1l4oXlLVBeShx8KCEEZochEYond3eAgSCuyiF8BVmQCU4wyEteCKTDmmKMAXJTiEo4+8raDiB0RWaR5E+zBCktKYvDDFm8M4ggmoZiSCiuqnBKKJYnQscULAuCHxUdKLmmeDZ4I11sHTsTxiJASmRIIE7qZV4hHaapZXgSKqIQgB1b00aZGoIhxQHkT8MgRjptApIopo3zCSSSF3HGGFTIkcGEAaqRE3gA9wGEgSJ78UF4ZSXIXqUb+rHBiCBgsBDCgE+6RdMcRfbxIkhu2codAihtBCtIogRyRp3xQPAmVH8EWx8ajro5ESh0r4DeFs0/F0d0H3GJkbEmFtCDfmVEN0Z0kxVZ7EiEYxMdHVJ4YwN20Go17UilWmJfAqU9twR0P7Rb3akqHLFDeCRw6ZQl3EBRM3MEpWaJBeV1ENQJ3o+Tr7kqgnODdADY+hQV37Gak70qexNtdEFDdwV0iHhv8kiUNeIfIU4pwR0jNE8M0iHcrPEUJd34A3RvFLT3hXSNOZcJdIErzxjRLpFzQ3RIOc3dI1btdzZIe3Q3wSVOQcEcJ2K2JvdIqInRnRlOAcCcK26y5vdL+H982hUZxFUi89EyscNBdyUr1UFwRgltN09/cvbFUKfYSRyHeq+m9UifR9obDUjIXx0njYdfEA3cC+GqUKh8UpwO1NtPkrddJucHdILAHTdMl3YV6FCWV94ZCuOJ+PJMF3B1xFCfIF7dIq7HTJAV3GRg1SQXcUcGn8TLNXtzdQq3yRgHckXDK9tHP1DN3zwPFCiEmdLdBJ2hyH1Mo3c3rkyVodOAdBqOrX/pmMgHurMEmrEiFKTghiUCoIQnbKY8HNDEi+8WEBtzJQkpA4ScAQMFRPRqgTJDAHSJsUE0N6EOFLAgTgRWHBSf0kQPOoLoKijAma+AOBmLIIg6ogU7+B2LhS/LAnQfwMEIhIMMkBCVEl/CtOAY4YoJOsIVCNMwkK5vJ0LhDvJFwUEYJaEKgsNhEniCpJF/0EQn80EX06a4m6ytODb3opxNATSRZlEkjugM+k6RRTVe4IvTeSJM4EgeIaOwgalSgOYvkMSaG6M4ZYzKpLyniDl3AAfniQ4G1uXFwNhFEd3ySikVooYDlYYAncwfKmvRBWEFRRR+y5R0KBJB0bbtJ6IgTMaGwQg8R5A4LJnmRR8IEcsSpHlFGoa7ubIGVjrPJyYoDg6OMoTsBgAQu83aTInAHCUhhQ3desM3M3QQG3MkYUrTQHUNgTjWNZIkDuOOGpKiCBdz++ZzKysiy7vxBKZXoHG8oWLwbvgQR3XHEUpzAnTTs06AuaUN3EPk77szgoYSUCRO4A4KmqKA4AThfMfmZElZAgDtNaIoZuBOckUKUJZPoTj2Zsgju3KGgGYWJRLkzxqWIgjtkwGkrZVID7hQAhEthQHGkINRoykQT3fnBU0BQHHC6NKcuIUN36vAUfBIHCE0tnUxWoTXu0M8pLiiOEMKaS5mQjTsqgMrGiJPSqw7VJarwH3faAJVg8sYKbOVmTHZJHAN0zCmn4I4XAmtOmIzCr72pAlQqwZ05MBaeMVmCd5b4FDvQzq5ObUndumODqCiBO4iriDFPUgmFdUebTzH+BQKK04BcUWS1JelE87jjhKgQljeMu2xq4hkSUJDAOwc4lFNSYbjixAGjd2XtabwzN6jYjjsEBa1YU2IIBZRHBuJ5iiWC15vSQje0JSlFFczzgLM6RRRx404e3jlclAyirOXZE0jwMIfwqoQUL+gOBUQqXNQQNyOE8Kp5ghoSiZKAEG0UySbiW9lyYlYko6jDR+WzWJHsFAAl2IN/R3IH13JnA8RULUkngixl5eeZI/kwaiwghtR65BE3MM/OLFxfWMkqDC0QaHw0SBIZq2YGbbgER1QhiB3EB108NrCkTkEKUFwqU2iwwgy8GyECXK7IxOmAFfSAiQgzJBSDmML+SeOTAgLTV5HxyUAkTmLk3ihABlNggx8UcYlQkAIVrEigKUBxCUb0wQxM8ICAMnC2QcI5QT/oY0nq/GjiPEDJn6y0fDaAu5RQWtOt2QDAHA1q7xSADII0yadLnRoWgMKGrOZOArhwS5WsmtVbSHGUY12BNczR07FmzQV2jMdg7+YASQiEroFtbAAk4AxuhnWzD3CEP0T7JakoRBSUWuoFdOHVZAw2A4LABkcsOyapQMQWFA3nEcgBqUGstABEYIQx8KESZs5JJuzABFTm6ARnsASUSmQABkxAAyFAQQyAMAUxvKEP0zm3UDYBiC/kYM35KUALuBCIRtNGJKFoxB5vshwEGYBAAgsgQACOkxwV+CAKX4jDITZh24/b/OY4z7nOd87znvv850APutCHTvSiG/3oSE+60pfO9KY7/elQj7rUp071qlv96ljPuta3zvWue/3rYA+72MdO9rKb/exoT7va1872trv97XAvekAAADs=\" data-image-state=\"image-loaded\" width=\"100\" height=\"100\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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.5px 8px; transform-origin: 182.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=Xcm3S9VlqqY\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eThirteenTeam youtube ICFP2024\u003c/span\u003e\u003c/span\u003e\u003c/a\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v=Lambdaman21(m)\r\n%Manual sequence created using a display like ThirteenTeam\r\n%Draw paths from Top edge, right edge and left edge\r\n U='U';D='D';L='L';R='R';\r\n U2=repelem(U,199);\r\n D2=repelem(D,199);\r\n L2=repelem(L,199);\r\n R2=repelem(R,199);\r\n DUR=[D2 U2 R]; % Top edge\r\n LRD=[L2 R2 D]; % Right edge\r\n RLU=[R2 L2 U]; % Left edge Up\r\n RLD=[R2 L2 D]; % Left edge Down\r\n D95=repelem(D,95);\r\n D37=repelem(D,37);\r\n L100=repelem(L,100);\r\n U136=repelem(U,136);\r\n R15=repelem(R,15);\r\n R12=repelem(R,12);\r\n \r\n TE=repmat(DUR,1,200);\r\n RE=[D95 L2 D2 repmat(RLU,1,80) D37 R2 D repmat(LRD,1,104)];\r\n BE=[L100 U136 repmat(LRD,1,85) D D L2];\r\n LE=[repmat(RLU,1,90) D R15 repmat(DUR,1,21) repmat(RLD,1,5)];\r\n B3=[D37 D D R12 repmat(DUR,1,15) D37 repmat(RLU,1,6) ];\r\n v=[U2 L2 TE RE BE LE B3];\r\nend % Lambdaman21","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\nms=['........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'.................................##################.....................................................................................................................................................'\r\n'...........................#############################................................................................................................................................................'\r\n'.....................######################################............................................#########################################........................................................'\r\n'.................#############################################.........................................################################################.................................................'\r\n'...............################################################........................................####################################################.............................................'\r\n'...............##################################################......................................########################################################.........................................'\r\n'...............####################################################....................................###########################################################......................................'\r\n'...............#####################################################...................................#############################################################....................................'\r\n'...............######################################################..................................###############################################################..................................'\r\n'...............#######################################################.................................#################################################################................................'\r\n'...............########################################################................................###################################################################..............................'\r\n'...............####################............#########################...............................####################################################################.............................'\r\n'...............##############.......................####################...............................#####################################################################............................'\r\n'...............##########.............................###################..............................##############........................#################################..........................'\r\n'...............######...................................##################.............................##############...............................###########################.........................'\r\n'...............###.......................................#################.............................##############...................................########################........................'\r\n'..........................................................#################............................##############.....................................#######################.......................'\r\n'...........................................................################............................##############........................................#####################......................'\r\n'............................................................###############............................##############..........................................####################.....................'\r\n'.............................................................###############...........................##############...........................................###################.....................'\r\n'.............................................................###############...........................##############.............................................##################....................'\r\n'..............................................................##############...........................##############..............................................##################...................'\r\n'..............................................................##############...........................##############...............................................#################...................'\r\n'..............................................................##############...........................##############................................................#################..................'\r\n'..............................................................##############...........................##############.................................................################..................'\r\n'...............................................................#############...........................##############..................................................################.................'\r\n'...............................................................#############L..........................##############..................................................################.................'\r\n'...............................................................#############...........................##############...................................................################................'\r\n'...............................................................#############...........................##############...................................................################................'\r\n'...............................................................#############...........................##############....................................................################...............'\r\n'...............................................................#############...........................##############....................................................################...............'\r\n'..............................................................##############...........................##############.....................................................###############...............'\r\n'..............................................................##############...........................##############.....................................................################..............'\r\n'..............................................................##############...........................##############......................................................###############..............'\r\n'.............................................................##############............................##############......................................................###############..............'\r\n'.............................................................##############............................##############......................................................###############..............'\r\n'............................................................##############.............................##############.......................................................###############.............'\r\n'............................................................##############.............................##############.......................................................###############.............'\r\n'...........................................................##############..............................##############.......................................................###############.............'\r\n'..........................................................###############..............................##############.......................................................###############.............'\r\n'........................................................################...............................##############........................................................##############.............'\r\n'.......................................................################................................##############........................................................###############............'\r\n'....................................................##################.................................##############........................................................###############............'\r\n'................................................#####################..................................##############........................................................###############............'\r\n'..............................######################################...................................##############........................................................###############............'\r\n'..............................#####################################....................................##############........................................................###############............'\r\n'..............................###################################......................................##############........................................................###############............'\r\n'..............................#################################........................................##############........................................................###############............'\r\n'..............................##############################...........................................##############........................................................###############............'\r\n'..............................##############################...........................................##############.........................................................##############............'\r\n'..............................#################################........................................##############...................................................................................'\r\n'..............................####################################.....................................##############.........................................................##############............'\r\n'..............................#####################################....................................##############.........................................................##############............'\r\n'..............................#######################################..................................##############.........................................................##############............'\r\n'..............................########################################.................................##############.........................................................##############............'\r\n'...............................................########################................................##############.........................................................##############............'\r\n'....................................................####################...............................##############........................................................###############............'\r\n'......................................................###################..............................##############........................................................###############............'\r\n'........................................................##################.............................##############........................................................###############............'\r\n'..........................................................#################............................##############........................................................###############............'\r\n'...........................................................################............................##############........................................................###############............'\r\n'............................................................################...........................##############........................................................###############............'\r\n'.............................................................###############...........................##############........................................................###############............'\r\n'..............................................................###############..........................##############........................................................###############............'\r\n'...............................................................##############..........................##############........................................................##############.............'\r\n'...............................................................###############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'................................................................##############.........................##############.......................................................###############.............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############......................................................###############..............'\r\n'.................................................................##############........................##############.....................................................################..............'\r\n'.................................................................##############........................##############.....................................................###############...............'\r\n'.................................................................##############........................##############....................................................################...............'\r\n'.................................................................##############........................##############....................................................################...............'\r\n'.................................................................##############........................##############...................................................################................'\r\n'.................................................................##############........................##############...................................................################................'\r\n'.................................................................##############........................##############..................................................################.................'\r\n'................................................................##############.........................##############..................................................################.................'\r\n'................................................................##############.........................##############.................................................################..................'\r\n'................................................................##############.........................##############................................................#################..................'\r\n'...............................................................###############.........................##############...............................................#################...................'\r\n'...............................................................###############.........................##############..............................................##################...................'\r\n'..............................................................###############..........................##############.............................................##################....................'\r\n'..............................................................###############..........................##############...........................................###################.....................'\r\n'.............................................................################..........................##############..........................................###################......................'\r\n'............##..............................................################...........................##############........................................#####################......................'\r\n'............###............................................#################...........................##############.....................................#######################.......................'\r\n'............######.......................................##################............................##############...................................########################........................'\r\n'............########....................................##################.............................##############...............................###########################.........................'\r\n'............###########...............................####################.............................##############........................#################################..........................'\r\n'............###############........................######################..............................#####################################################################............................'\r\n'............#####################............###########################...............................####################################################################.............................'\r\n'............###########################################################................................##################################################################...............................'\r\n'............##########################################################.................................#################################################################................................'\r\n'............#########################################################..................................###############################################################..................................'\r\n'............########################################################...................................#############################################################....................................'\r\n'............######################################################.....................................##########################################################.......................................'\r\n'............#####################################################......................................########################################################.........................................'\r\n'..............#################################################........................................####################################################.............................................'\r\n'.................############################################..........................................################################################.................................................'\r\n'....................######################################.............................................#########################################........................................................'\r\n'.........................#############################..................................................................................................................................................'\r\n'..............................###################.......................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'\r\n'........................................................................................................................................................................................................'];\r\n\r\nsize(ms)\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nv = Lambdaman21(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman10 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nadd 45 rows above\r\n.................................##################.....................................................................................................................................................\r\n...........................#############################................................................................................................................................................\r\n.....................######################################............................................#########################################........................................................\r\n.................#############################################.........................................################################################.................................................\r\n...............################################################........................................####################################################.............................................\r\n...............##################################################......................................########################################################.........................................\r\n...............####################################################....................................###########################################################......................................\r\n...............#####################################################...................................#############################################################....................................\r\n...............######################################################..................................###############################################################..................................\r\n...............#######################################################.................................#################################################################................................\r\n...............########################################################................................###################################################################..............................\r\n...............####################............#########################...............................####################################################################.............................\r\n...............##############.......................####################...............................#####################################################################............................\r\n...............##########.............................###################..............................##############........................#################################..........................\r\n...............######...................................##################.............................##############...............................###########################.........................\r\n...............###.......................................#################.............................##############...................................########################........................\r\n..........................................................#################............................##############.....................................#######################.......................\r\n...........................................................################............................##############........................................#####################......................\r\n............................................................###############............................##############..........................................####################.....................\r\n.............................................................###############...........................##############...........................................###################.....................\r\n.............................................................###############...........................##############.............................................##################....................\r\n..............................................................##############...........................##############..............................................##################...................\r\n..............................................................##############...........................##############...............................................#################...................\r\n..............................................................##############...........................##############................................................#################..................\r\n..............................................................##############...........................##############.................................................################..................\r\n...............................................................#############...........................##############..................................................################.................\r\n...............................................................#############L..........................##############..................................................################.................\r\n...............................................................#############...........................##############...................................................################................\r\n...............................................................#############...........................##############...................................................################................\r\n...............................................................#############...........................##############....................................................################...............\r\n...............................................................#############...........................##############....................................................################...............\r\n..............................................................##############...........................##############.....................................................###############...............\r\n..............................................................##############...........................##############.....................................................################..............\r\n..............................................................##############...........................##############......................................................###############..............\r\n.............................................................##############............................##############......................................................###############..............\r\n.............................................................##############............................##############......................................................###############..............\r\n............................................................##############.............................##############.......................................................###############.............\r\n............................................................##############.............................##############.......................................................###############.............\r\n...........................................................##############..............................##############.......................................................###############.............\r\n..........................................................###############..............................##############.......................................................###############.............\r\n........................................................################...............................##############........................................................##############.............\r\n.......................................................################................................##############........................................................###############............\r\n....................................................##################.................................##############........................................................###############............\r\n................................................#####################..................................##############........................................................###############............\r\n..............................######################################...................................##############........................................................###############............\r\n..............................#####################################....................................##############........................................................###############............\r\n..............................###################################......................................##############........................................................###############............\r\n..............................#################################........................................##############........................................................###############............\r\n..............................##############################...........................................##############........................................................###############............\r\n..............................##############################...........................................##############.........................................................##############............\r\n..............................#################################........................................##############...................................................................................\r\n..............................####################################.....................................##############.........................................................##############............\r\n..............................#####################################....................................##############.........................................................##############............\r\n..............................#######################################..................................##############.........................................................##############............\r\n..............................########################################.................................##############.........................................................##############............\r\n...............................................########################................................##############.........................................................##############............\r\n....................................................####################...............................##############........................................................###############............\r\n......................................................###################..............................##############........................................................###############............\r\n........................................................##################.............................##############........................................................###############............\r\n..........................................................#################............................##############........................................................###############............\r\n...........................................................################............................##############........................................................###############............\r\n............................................................################...........................##############........................................................###############............\r\n.............................................................###############...........................##############........................................................###############............\r\n..............................................................###############..........................##############........................................................###############............\r\n...............................................................##############..........................##############........................................................##############.............\r\n...............................................................###############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n................................................................##############.........................##############.......................................................###############.............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############......................................................###############..............\r\n.................................................................##############........................##############.....................................................################..............\r\n.................................................................##############........................##############.....................................................###############...............\r\n.................................................................##############........................##############....................................................################...............\r\n.................................................................##############........................##############....................................................################...............\r\n.................................................................##############........................##############...................................................################................\r\n.................................................................##############........................##############...................................................################................\r\n.................................................................##############........................##############..................................................################.................\r\n................................................................##############.........................##############..................................................################.................\r\n................................................................##############.........................##############.................................................################..................\r\n................................................................##############.........................##############................................................#################..................\r\n...............................................................###############.........................##############...............................................#################...................\r\n...............................................................###############.........................##############..............................................##################...................\r\n..............................................................###############..........................##############.............................................##################....................\r\n..............................................................###############..........................##############...........................................###################.....................\r\n.............................................................################..........................##############..........................................###################......................\r\n............##..............................................################...........................##############........................................#####################......................\r\n............###............................................#################...........................##############.....................................#######################.......................\r\n............######.......................................##################............................##############...................................########################........................\r\n............########....................................##################.............................##############...............................###########################.........................\r\n............###########...............................####################.............................##############........................#################################..........................\r\n............###############........................######################..............................#####################################################################............................\r\n............#####################............###########################...............................####################################################################.............................\r\n............###########################################################................................##################################################################...............................\r\n............##########################################################.................................#################################################################................................\r\n............#########################################################..................................###############################################################..................................\r\n............########################################################...................................#############################################################....................................\r\n............######################################################.....................................##########################################################.......................................\r\n............#####################################################......................................########################################################.........................................\r\n..............#################################################........................................####################################################.............................................\r\n.................############################################..........................................################################################.................................................\r\n....................######################################.............................................#########################################........................................................\r\n.........................#############################..................................................................................................................................................\r\n..............................###################.......................................................................................................................................................\r\nadd 50 rows below\r\n%}\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-12T05:01:51.000Z","deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-11T16:20:17.000Z","updated_at":"2026-03-11T08:39:22.000Z","published_at":"2024-07-12T05:01:52.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 21 maze is a 200x200 matrix with L near the middle,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L\\\" L# ? B= v# I! Sllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll B. B$ v\\\" B/ v# I% BT I\\\" BD B% v# I% Sl~aF   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, a=\u0026gt;#, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman21 solution was written in ICFP to reduce length versus 40000 U/R/D/L commands, a decent compression.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ Lf B$ B$ vf vf IR Ls Lp ? B= vp IP S3/,6%},!-\\\"$!-!.WV} B. B$ B$ vs vs B% B* I$ vp I~|( BT I\\\" BD B% vp I% SO\u0026gt;LF\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003cw:r\u003e\u003cw:t\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=Xcm3S9VlqqY\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eThirteenTeam youtube ICFP2024\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\u003eThis challenge is to solve the Lamdaman21 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template. As of 7/11/24 I am unable to expand the ICFP solution.\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.gif\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":60638,"title":"ICFP2024 009: Lambdaman Crawler-Backfill","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\r\n\r\nThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.","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: 696px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 348px; transform-origin: 407px 348px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 371px 8px; transform-origin: 371px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [pathbest]=crawler_fill(m)\r\n% This is not crawler_fill_optimal\r\n% Grab UDLR adj2\r\n% Grab UDLR adj3 if no 2s\r\n% Backfill L spot if 3 adj are Wall 0\r\n% No optimal path selection when at intersection of 2s\r\n%Crawler with backfill will solve non-loop mazes, but not guaranteed min moves\r\n%Crawler UDLR score 394\r\n %crawler 1/15 2/33 3/Fail 4/394/.09s 5/Fail 6/199/.09 7/Fail 8/4899/.21s 9/2500/.12  10/Fail\r\n %11[103x103]/9988/.33s\r\n % 12[101x101]/9992  13/9976 14/9994 15[101x101]/9986/.33s Big Unique solutions\r\n % 16[129x129]/8190/.34s 17[141x100]/Fail 18[163x290]/Fail 19[257x?] 20[256x?] 21[200x200]\r\n\r\n pathbest='';\r\n pathv=zeros(10000,1); pathvptr=0;\r\n \r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr]; % UDLR 1234\r\n \r\n% zmap=[0 0 0;1 0 0;0 1 0;0 0 1]; \r\n% figure(1);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n \r\n Lidx=find(m==1);\r\n% ztic=tic;\r\n while nnz(m==2)\u003e0\r\n%  if toc(ztic)\u003e1\r\n%    fprintf('ztic Timeout\\n');\r\n%    break;\r\n%  end\r\n  \r\n  vadj=m(adj+Lidx);\r\n  m(Lidx)=3;\r\n  if nnz(vadj==0)==3\r\n   m(Lidx)=0; % cul-de-sac  Backfill\r\n  end\r\n  \r\n  if nnz(vadj==2)\u003e0\r\n   ptr=find(vadj==2,1,'first');\r\n  else % only 3s adj\r\n   ptr=find(vadj==3,1,'first');\r\n  end\r\n  Lidx=Lidx+adj(ptr);\r\n  m(Lidx)=1;\r\n  pathvptr=pathvptr+1;\r\n  pathv(pathvptr)=ptr;\r\n  \r\n%   if mod(pathvptr,100)==0\r\n%    figure(2);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n%    pause(0.05);\r\n%   end\r\n  \r\n end % while m==2\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(pathv(1:pathvptr));\r\n \r\n %if nnz(m==2)\u003e0\r\n % fprintf('BestPath:');fprintf('%s',pathbest);fprintf(' Uneaten:%i\\n',nnz(m==2));fprintf('\\n')\r\n %else\r\n % fprintf('Solved Path:');fprintf('%s',pathbest);fprintf('\\nLength:%i\\n',length(pathbest));\r\n %end\r\n \r\n%figure(4);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n \r\nend % crawler_fill\r\n\r\n","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=400 % Lambda4\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=400 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26\r\n ms=[ ...\r\n      'L...#.'\r\n      '#.#.#.'\r\n      '##....'\r\n      '...###'\r\n      '.##..#'\r\n      '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=40 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=40 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 9  optimal solution L2499 50x50 L in top lesft\r\n ms=repmat('.',50,50);\r\n ms(1)='L';\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=2500 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=2500 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 11[103x103]/9988/.33s\r\n%Lambdaman 11  optimal solution ?\r\n ms=[ ...\r\n'#####################################################################################################'\r\n'#.#.....#.......#.#.......#...#...#.......#...#.......#.#.......#...#.....#.....#.....#.......#.....#'\r\n'#.###.###.#####.#.###.###.#.###.#.#.#######.#######.###.#.###.###.#####.#.###.#######.#.#.#########.#'\r\n'#...#.#.....#.....#.....#...#...#.....#.........#.#.......#...#.........#.....#...#.#...#.#.........#'\r\n'#.###.###.###.#.#########.#.#.###.#.#.#.###.#.###.###.#################.#######.#.#.###.###.#.###.###'\r\n'#.#.#.....#...#...#.#.#...#.#.#...#.#.#...#.#.#...........#.....#.......#.#.#...#.#.........#...#...#'\r\n'#.#.###.###.#######.#.#.#######.#####.#.#.###.###.#.#####.#####.#.###.#.#.#.###.#.#.#####.#####.#####'\r\n'#.......#.#.#.....#.........#.....#...#.#...#...#.#.#...#.#...#.#...#.#.#.....#.#.....#.....#.#.....#'\r\n'#####.#.#.###.#.###.#.###.#.#.#######.#.#.###.###.#.#.#######.#.###.#####.###.###.#.#.#.###.#.#.###.#'\r\n'#...#.#.#...#.#...#.#...#.#.......#.#.#.#.#.#...#.#.#.......#.......#.....#...#.#.#.#.#.#.....#.#.#.#'\r\n'###.###.#.###.#####.#######.#.#####.#.#.###.#######.#####.#.#####.#.#.#.#####.#.#.###########.#.#.###'\r\n'#...#.........#.........#.#.#.#...#.........#.........#.#.#...#...#...#...#...#.#...#...#.....#.....#'\r\n'###.#.#.#.###.#####.#.###.###.###.###.#############.###.#####.###.###.###.#.###.###.#.###.#########.#'\r\n'#.#...#.#.#...#.....#.#.....#.#.#...#.....#...#...#.#.............#...#...#.#.....#.#...#.........#.#'\r\n'#.###.###.###.###.#####.###.#.#.###.###.###.#####.#.#.###.#############.###.#####.#.#.###.#####.#####'\r\n'#.....#.....#.........#.#.....#...#.........#.#.#...#...#.......#...#.#.#...#...#.....#.....#.......#'\r\n'#.#.###.###.#.#.#################.#.#####.###.#.#.#.#.#####.###.###.#.#######.###.#####.#.###.###.###'\r\n'#.#.#.#.#...#.#...#...#...#...#.......#...#.#...#.#.#.....#.#...#.....#...........#.....#.#.#...#.#.#'\r\n'#.###.###.#.#######.###.#####.#.###.#.#.###.#.###.#############.###.###.###.###.###########.#.#.###.#'\r\n'#.#.....#.#.#.....#.#.......#.#...#.#.#.#...#.......#.#.....#.#.#.....#.#.....#.#.......#...#.#.#.#.#'\r\n'#.###.#######.#####.#.###.###.#.###.#.#####.#.#.#####.###.###.#.#.#######.#####.#.###.###.###.#.#.#.#'\r\n'#.#...#...#.....#.#...#...#.#.#.#...#.#.#.....#.#...#.....#...#.#.....#...#.......#.........#.#.....#'\r\n'###.#.###.#.#.###.#.#.#.#.#.#.###.#####.###.#.#####.###.#.#.###.#####.###.#.###.#######.###########.#'\r\n'#...#.#.#...#...#...#.#.#...#.#.#.#.........#.#...#...#.#.............#...#.#.......#.....#.....#.#.#'\r\n'###.###.#.###.#####.#######.#.#.#.#######.###.#.#####.#.#.#####.###.#.#.###########.#########.#.#.###'\r\n'#...#.#...#.#.#.#...#.....#.....#.......#...#.#...#.....#.#...#...#.#.#.#...#.#.#.....#.....#.#.....#'\r\n'#.###.#.###.#.#.#.#####.###.#####.#.#.#####.###.#####.#####.#######.#######.#.#.#####.#.#.###.#.#.#.#'\r\n'#.....#.#.#...#.#.....#...#...#.#.#.#.......#...............#.....#...#.....#.........#.#...#.#.#.#.#'\r\n'#.###.###.###.#.#.#.###.#####.#.#.#######.#.###########.###.#.#########.#.#########.#.#.###########.#'\r\n'#.#.#...#.#.......#.#...#...#L#.......#.#.#.....#...#...#.#.#.#...#.#...#...#.#.....#.....#.....#.#.#'\r\n'#.#.###.#.#####.###.###.###.#.#.###.###.###########.#.###.###.###.#.#.#######.###.###.#.#####.###.#.#'\r\n'#.#...........#.#.....#.#.#...#...#.#...#.......#.#.#...........#.....#.#.......#.#...#.#.....#.#...#'\r\n'###.###.###.###.###.###.#.#.###.#####.#.#.#.#####.#.#.#########.#.###.#.#.#.#.#####.#########.#.#.###'\r\n'#...#...#.#...#.#...#.#.#.....#.....#.#.#.#.............#.#.....#.#.#.....#.#.#.........#.#.....#...#'\r\n'#######.#.#########.#.#.###.#####.###.###.#######.#####.#.#####.###.#.###.###.#.###.#.###.###.#.#.###'\r\n'#.....#.........#...#.......#...#.#.......#.#...#.#...........#.#.....#.....#.#.#.#.#.....#...#.....#'\r\n'###.###.###.#.###.#.#.#####.###.#.#####.###.###.#.###.#.#.#.#######.#####.###.###.#.###.#####.#.#####'\r\n'#.#...#.#...#.#...#.#.#...#...#.......#.....#.......#.#.#.#...#.......#.....#.#...#...#...#.#.#.....#'\r\n'#.#.#######.###.#########.#.###.#####.###.#.#.#######.#######.#.#.#.#######.#####.#.#.#.#.#.#######.#'\r\n'#.#.......#.....#.....#.....#...#.......#.#.#...#.....#.#...#...#.#.....#.#.#...#...#.#.#...#.#...#.#'\r\n'#.#.#.###.#####.#.#######.#####.#############.#########.###.#.#########.#.#####.#.###.#.#####.#.#.#.#'\r\n'#.#.#.#.#.#.....#.....#.....#.................#...#.....#.........#.........#...#.#...#.........#...#'\r\n'#.###.#.#.#.#.###.###.###############.###.#####.#.#####.#.#.###.#########.###.#####.###.###.#.#######'\r\n'#...#.#.....#...#.#...#.#.........#.....#...#.#.#...#...#.#.#...#...#...#.#.#.#.#.#.#.#.#...#...#...#'\r\n'#.###.###.###.###.###.#.#.###.#.###.#######.#.#.#.#.###.#.#######.#.#.#.###.#.#.#.###.#.#####.#.#.###'\r\n'#.......#.#...#.#...#...#.#.#.#.........#.....#.#.#...#...#...#.#.#...#.#.......#.#.#.......#.#.#...#'\r\n'#.###.###.###.#.#.#####.###.#.###.#.#.###.###########.#.#####.#.#.###.###.#####.#.#.#.#####.###.#.#.#'\r\n'#...#.#.#.#...#...#.....#.#...#...#.#...#.#.........#...#...........#.....#.#...#.........#...#...#.#'\r\n'#.#.###.###.#######.#####.#.###############.#.#.###.#.###.#########.#######.#.#########.###.#####.###'\r\n'#.#.#.........#.#.....#.#.#.#.#...#...#.#.#.#.#...#...........#.#...#.#...........#...#...#...#.....#'\r\n'#####.#########.#.###.#.#.#.#.#.#.###.#.#.#.###############.###.#.###.#####.#.#.#####.#.#######.#.###'\r\n'#.........#.......#...#.......#.#.#...#.......#.....#.....#.#...#.....#.#...#.#.#...........#...#.#.#'\r\n'###.###.#######.###.#####.#####.#.#.#.###.#.###.###.#.#####.#.#####.#.#.#.#.#####.#####.#.#.#####.#.#'\r\n'#.....#.#.#.......#...#.#.....#.#...#...#.#...#.#.#.#.....#.#...#...#...#.#.......#.....#.#...#.....#'\r\n'###.#.###.#.###.#.#####.#.#########.###########.#.###.#########.#######.#########.#####.###########.#'\r\n'#...#.......#...#.....#.#.#.#.#.#.......#...#...#...#.....#...#.#.#...#.......#...#...#.#.......#...#'\r\n'#.#.#########.#.#.#.###.#.#.#.#.#.#.#####.#####.###.###.#####.#.#.###.#.###.###.#.#.#.###.###.###.#.#'\r\n'#.#...#.#.#...#.#.#.........#.#.#.#.#...#...........#.....#.#.#...#...#...#.#.#.#...#...#.#.#.#...#.#'\r\n'#.#####.#.###.#.#######.#.#.#.#.#.###.#######.###.###.#.#.#.#.#.#####.#######.#.###########.#.#####.#'\r\n'#.#.#.#.......#.#.......#.#.#.#...#.......#.....#...#.#.#.#.#...#.#.......#...#.#.....#.#.....#.....#'\r\n'###.#.#####.###########.###.#.#.#.#######.#.###.#.###.#.###.#.###.###.###.#.#.###.#####.#####.#.#.###'\r\n'#.....#.#.#...#.....#...#.#.....#.#.....#...#...#.#.#.#.....#.......#...#...#...#.#.......#.....#.#.#'\r\n'#.#####.#.#.#.#.###.###.#.#.#######.#####.#####.###.#.#######.#######.#.#####.###.#######.#####.###.#'\r\n'#.#...#.#...#...#...#.....#.....#.#.#.#.......#.....#...#.....#...#...#.#.#.#...#...#.#.....#.......#'\r\n'#.###.#.#.#.#.#####.#.#.###.#####.#.#.###.#.###.#######.#.#.#####.#####.#.#.#####.###.#.#.###.#.###.#'\r\n'#.......#.#.#.#.#...#.#.#.......#.#.......#.#.#.......#...#.#.#.#.#...#...............#.#.#...#...#.#'\r\n'#.#####.#.#####.#.#####.#.#.#####.###.#######.###.#.###.#.###.#.#.###.#####.#####.#######.###.#######'\r\n'#.#.#.#.........#...#.#.#.#...#.....#.#...#.....#.#...#.#.#...#.#...#...#...#.#...#.......#.......#.#'\r\n'###.#.#.#####.#######.###.###.#.#####.#.###.###.#.#.###.###.#.#.#.#.###.###.#.#######.###.#.#.###.#.#'\r\n'#.........#.....#.......#.#...#...........#...#...#...#...#.#.....#.#.........#.#.....#.#...#...#...#'\r\n'###.#####.#.#.#####.#####.#############.###.###.#####.#.#########.#########.###.#####.#.#.#######.#.#'\r\n'#...#.....#.#.#...#.#...#.....#...#.#.#...#.#.....#...#.........#...#.#.#...#.#.#.#.#.#...#.#.#.#.#.#'\r\n'###.###.###.#.###.#.#.###.#.#####.#.#.#########.###.###.###.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#'\r\n'#.#.#...#...#.#...#.....#.#.#.....#.....#.#...#.#.#.....#...#...#.......#.....#.#.....#.#.#.......#.#'\r\n'#.#####.#.#######.#.#.###.#.#.#.#.#####.#.#.#####.#.#########.#######.#####.###.#.#.#.#.#.#.#####.###'\r\n'#.....#.#.#...#...#.#.....#...#.#...#.#...#...#.#...#...........#.#.....#...#...#.#.#.#.#...#.#...#.#'\r\n'#.#.#####.#.###.###.#.#.#####.#######.#.###.###.#.#######.#####.#.#.#######.#.#####.#.#.#####.#.###.#'\r\n'#.#...#.#.#.#.#.#...#.#.#.............#.#.....#.....#.#...#.....#.#.....#.#...#.#.#.#...#.#...#.....#'\r\n'#.#.#.#.#.#.#.#.#####.###.#####.#######.#####.#.#####.#####.###.#.###.#.#.#.###.#.#####.#.###.#.###.#'\r\n'#.#.#.#...#...#.#.....#.#...#...#.#.#...#.....#...#.#.#.......#.....#.#...........#.......#.......#.#'\r\n'#.###.###.###.#.#.#####.#####.#.#.#.###.###.#####.#.#.#.###.#.#######.###.###.#.###.#####.#.###.###.#'\r\n'#...#.#.#.#.......#.......#.#.#.#...............#...#.#.#...#...#.#...#.....#.#.#.#.#.#...#...#.#...#'\r\n'#.#.###.#.#######.#.###.#.#.#.###.#########.#.#######.#######.###.#####.#########.###.###.#######.###'\r\n'#.#.#.#...#...#...#...#.#.#...#.#.#.#...#...#.#.....#.#...#.#.....#.#...#.#.......#.#.#.#.#.....#.#.#'\r\n'###.#.#######.#.#.#######.#####.#.#.###.#.###.#.#.#.#.#.###.#.#.###.###.#.#####.#.#.#.#.#.#.###.###.#'\r\n'#.......#.#.#...#...#.#.....#.....#.#.......#.#.#.#.....#.....#.......#.........#.#.........#.....#.#'\r\n'#####.###.#.#####.###.#.###.###.###.#####.#####.#####.#.###.###.###.#.#.#######.#.#.#.###.#######.#.#'\r\n'#.....#.#.....#...#...#...#...#.#.........#.....#.....#...#...#.#...#.....#...#.#...#...#.#.#.#.#...#'\r\n'#####.#.#.#.#.#.#####.#.#.#######.#.###.#.#.###.#.#.#.#.###.#####.#########.#.#####.#####.#.#.#.#.#.#'\r\n'#...#.#...#.#...#.......#.#.......#.#.#.#.#...#.#.#.#.#.....#...#...........#.#...#.#.........#...#.#'\r\n'#.#.#.#.#.#.#.#.#.#.###.#########.###.#.#.###.###.#####.#####.#.#.#.#.#.#######.#######.#.###########'\r\n'#.#.....#.#.#.#...#...#...#...#.......#.#.#.....#.#.#.....#...#.#.#.#.#...#.#.......#...#.#...#.#...#'\r\n'#####.###.#####.#.#########.###.#.#.#########.#####.###.#.#.#.#.#####.###.#.###.###.#.#.###.#.#.#.###'\r\n'#...#.#...#...#.#...#.....#.....#.#.......#.......#.#...#...#.#.#.#...#...........#.#.#.#...#.......#'\r\n'#.#.###.#####.#.#######.###.#######.#.#.#.#####.###.#######.#.###.#####.#.###.#####.#######.#####.#.#'\r\n'#.#.....#.#.......#.........#.......#.#.#...#.........#.....#...#...#...#.#.#...#.........#...#...#.#'\r\n'###.###.#.#######.#.###.#######.#.#.#.###.#.#######.###.#.#.###.#.#########.#.#.###.#####.#####.###.#'\r\n'#...#...#...#...#...#...#.#.....#.#.#...#.#.........#...#.#...#.#...#.........#...#.#.#.#.#.....#.#.#'\r\n'###.#.###.###.#.###.#####.#######.#.#.###.###.#######.###########.#.#.###.#######.#.#.#.#.###.#.#.###'\r\n'#...#.........#.#...........#.....#.#.#.....#...#...............#.#...#.....#.....#...#.......#.....#'\r\n'#####################################################################################################'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 15[101x101]/9986/.33s\r\n%Lambdaman 15  optimal solution ?\r\ns15='######################################################################################################...#.#...#.....#...#.......#...#.#.#.#.#.........#...#.......#.#.#...#...#...#...#.#...#.#.......#.##.###.#.#####.###.#.#####.#.#.###.#.#.#.###.#.#.#.#.###.#######.#.#.#.#.###.#.#.###.#.#.#.#.#.#.###.##.#...#.......#.#.#.......#.#.#.......#.....#.#.#.#.....#...........#...#...#.#.....#.#.#.#.#.#.#...##.###.###.#####.#####.#######.###.#.#####.#.###########.#######.#############.###.###.###.#.#.#####.##.#.#.............#.#.#.#.#.......#...#...#.#.........#.......#...........#...#.#.#.........#.......##.#.#####.###.#####.#.#.#.#.###########.#####.###.#.###.#.#########.###.#.#.###.#.###.###########.#.##...#.....#.....#.....#.....#...#.......#...#...#.#.#.#.#.....#.#.....#.#...#.#.......#.........#.#.####.###.#############.#.#####.###.###.###.#########.#.###.#####.#.###.###.#.#.#.#############.###.####.#.....#.#.#...#...#...........#...#.............#...........#...#.#.#...#.#.#.......#.....#...#...##.#.#####.#.#.###.#######.###.###########.#.#####.###.#.#####.#.#.#.#.###.#.#.###.#.###.#####.########.....#.....#.#.............#.....#.#.....#.#...#.....#...#.#...#...#.#.#.#.#...#.#...........#.....##.###.###.#.#.#.#.#.###.###.###.###.#.#########.#.#.###.#.#.###.#.#.#.#.#####.#####.###.#.###.###.#.##.#.......#.....#.#...#...#.#.....#.#.#...........#.#...#.#.#...#.#.#...#.......#.#.#...#.#.......#.######.#.#.###.#####.#######.#####.#.#.###.#####.#########.#.#########.#.#.###.#.#.#######.#.#.#.######.#.#.#.#...#...#.#...#...#...#.#.#.#.#...#...#.#...#...#...#.....#...#...#...#.........#.#.#.#.....##.#.#.#########.#.###.#.###.#.#.#.#.#.#####.#####.###.#####.###.#####.###########.#.#.###########.####...#.....#.#.#...#.....#...#.#...#.#.#.....#.#.....#.......#.....#...#...#...#.#.#.#.#.#.#.........##.###.###.#.#.#####.#####.#####.###.#.#.#.###.#.#####.#####.#.#.#####.#.#####.#.###.###.#.###.#####.##...#...#.#...#.........#...#...#.....#.#.....#.........#...#.#...#...#.#.#...#.......#...#.#.....#.####.###.###.###.#.#########.#.#########.#############.#.###.#####.#.###.#.###.#####.#.#.###.#####.####.........#.....#.....#...#.#.#.............#.....#...#...#.....#...#.......#.....#.#.#.............####.###.#############.#.#####.#####.#####.#.#.#######.#####.###########.#########.###.#.###.#.#####.##.#.#.....#...#...#.#.#...#.......#.#...#.#.#.....#...#.......#.............#.#...#.#.#...#.#.#...#.##.#######.#.#####.#.#.###.###.#####.###.#.#######.###.#####.#.#######.#######.###.#.#.#.###.#.#.###.##.........#.......#.#.......#.#.....#.#...............#.#.#.#.#.....#.#.#.#...#...#...#.#.#.#.....#.########.#######.###.#####.#####.#####.#.###.#######.###.#.###.###.#.#.#.#.#.#####.#.#.###.#########.##...#...#.............#.#.....#.#.#.....#.......#.#...#.#.#.#.#.#.#.........#...#.#.#.........#.#...##.#.#####.###.#.###.###.#.#.###.#.#.#.###.###.###.#.###.#.#.###.#.#.#####.#.#.#.#.#.#########.#.#.#.##.#.#.....#...#.#...#...#.#.......#.#.#.#.#.#.#.#...#.......#.#...#...#.#.#.#.#...#...#.#...#.....#.####.###.###.#.#.###.###.###.#.#######.#.#.#.###.#######.###.#.#.#.#####.###.#.#.#.#.###.#.###.#.######.......#...#.#.#...........#.#...#.#.#...#.....#.......#...#...#.........#...#.#.#...#.#.....#...#.####.#.#.###.#########.#.#.#.#.###.#.###.#.#.#.#.#.#####.#######.#####.#######.###.###.#.#.#.###.###.##...#.#...#...#...#.#.#.#.#.#.#.......#.#.#.#.#.#...#.....#...#.#.#.#.#.#...#.#.#.....#.#.#.#.#.....##.###.###########.#.#.#######.#####.#####.#####.#####.#.#####.###.#.###.#.###.#.#.###.#.###.#.#.#.####.#...#.#.....#.#.#.#...#.#.....#.#.....#.#.......#...#.......#.....#...#.....#...#.......#.#...#.#.####.#.#.#.###.#.#.#.#.#.#.###.###.###.###.#.###.#.#####.#.#.#.#.#.#.###.#########.###.###.#######.#.##...#.#...#...........#.#.#...#.........#...#...#.#.#...#.#.#...#.#.#.........#...#.....#.#.#.#.#...########.#####.#.###.#####.#.#######.#.###.#.#####.#.###.#.###########.#.###.#.#.#########.#.#.#.###.##.#...#.....#.#.#...#.......#.....#.#.....#...#.#.#.#...#.#.#...#.....#.#...#.#...#.#.#.#.#.#.#.#...##.###.#.#.#######.#.#########.###.###.#####.#.#.#.#.#.#####.###.#.#.#####.#####.###.#.#.###.#.#.#.####.#...#.#.#.#...#.#.............#.#.....#...#.#...#...#...#.....#.#...#.......#.#.........#.........##.#.#.#.###.###.###.###.#.#.###########.#.#####.#####.#.###.###.#.#.#########.#.###.#.#####.#.#.######.#.#.#.#...#.#.....#...#.#...#...#.....#.#...#.........#.#.#.#.#.#...#...#.....#...#.#...#.#.#.#...##.###.#.#.#.#.###.#############.###.#######.###.#.#.###.#.###.#.#.#####.###.###.###.#.#.#######.#.#.##.....#...#...#...#.#.#...#.....#.......#.....#.#.#.#...#...#.#.......#.......#...#.#.......#.....#.####.###.#.###.###.#.#.###.#.###.#########.###.###.#########.#.#.###########.#######.#############.####.#.#...#...#.#...........#...#.........#.#...#.#...#.........#.......#...#...#.#.....#...#.....#...##.#.#####.###.#########.#.###.###.#.###.#.###.#.#.#####.###.###.#.#####.#.###.#.#####.###.#.#######.##...#...#...#.#.........#.#...#.#.#.#.#.....#...#.....#.#...#...#.#.....#.#.........#...............##.#####.#.#########.###.###.###.#####.#.#####.#.###########.#.###.#######.#################.#.#.#.#.##...........#...#...#.#.#.....#.....#.......#.#.#...#.#.#.#.....#.#...........#.......#...#.#.#.#.#.######.#####.###.###.#.###.#.#######.#.#.#.###.###.#.#.#.#.###.#######.###.###.#####.#####.#.##########.........#.#...#.....#.#.#...#.....#.#.#.#.......#.#.#.#.....#.#.......#.#...#.#.#.......#.........############.#.###.#####.###.#####.#####.#######.#####.#.###.#.#.###.###.#####.#.#.###.###.#.###.###.##...#...#.....#.#...#...#.........#.#.#.#...........#...#...#.......#.......#.#.#...#.#.......#...#.####.###.###.#.#.###.#.###.###.#.#.#.#.###.#########.#.###########.###.###.#####.#.###########.########...#.#.....#.#.#.....#.#.#.#.#.#.#...#.....#.#.........#.#.........#.#.......#...#.#.......#.#.#.#.####.#.###.#.###.#.###.#.###.#.###.###.###.#.#.#.###.###.#.###.###.###.###.#.#####.#.#####.#.#.#.#.#.##.#...#...#...#.#.#.#.#...#...#.....#...#.#...#.#...#...#.#...#...#...#...#.#...#.........#.#.......##.#.#.###.#.###.###.###.###########.#.###.#.#########.###.###.#.#.#.###########.#.#########.###.#.####...#.#.#.#.....#.#.........#.#....L#...#.#...#.......#.#.....#.#.#.#.........#...#...#.#.......#...######.#.###.#.###.#######.#.#.#.#####.#.#########.#####.#.#.#####.###.#############.###.###.#####.#.##.#.......#.#.#.....#.....#.........#.#.....#.......#.#...#.#...#.#...#.#.#...........#...#.#.#.#.#.##.###.###.#####.###.#.###########.###.#.#.###.#######.#.#######.###.###.#.###.#.#####.#.#.#.#.#.#.####.......#.#.....#...#...#...........#.#.#.#...........#...#.......#.......#.#.#...#.#...#.#.#.......########.###.#####.#########.###.#.#.#.###############.###.#.###.#######.###.#######.#.#.#.#.##########.........#.#.#.#.......#...#...#.#.........#.....#.......#...#...#...........#.......#.#.#...#.....########.#####.#.#.###.#.#.#####.#######.#.#.###.###.#.###.#.#######.#.#.#.###########.#.#.#.#####.####.......#...#.....#.#.#.....#.....#.....#.#.#.#.....#.#.#.....#...#.#.#.#.....#.......#.#...#.#...#.##.###.#.#.###.#.###.###.#####.#.###.###.#.###.#.#.#.###.###.#.###.#####.#########.#.#######.#.###.#.##.#.#.#.....#.#...#...#...#...#.#.....#.#.....#.#.#...#.....#.#.....#.#.#.#.#.....#...#.#...#.......####.#.#####.#.#.#.###.#.###.#########.#.#.#######.###.#.#.#######.###.#.#.#.###.#######.#.#.#.###.####.#...#.#.#...#.#...#...#.#.#.#.....#.#.#.#...#.#.#...#.#.#.#...#.#.....#.......#.........#...#.#...##.###.#.#.#####.#####.#.#.###.#.#####.#####.###.#.#.#######.###.#.###.#.###.###.#.###.#####.###.###.##.....#...#.#.#.#.....#.#.........#...........#...#.#.#...#.#.#.#...#.#.#.#.#...#.#...#...#...#...#.######.#.###.#.###.#####.#.###.###.#.#.#####.###.#.#.#.###.#.#.#.###.#.#.#.#.###.###.#.#.#.#.###.######.....#...#.#.#.#.#...#.....#.#...#.#...#...#.#.#.#...........#.#.#...#.#.#.#.....#.#.#.#.#.#.#.....####.#####.#.#.#.###.#.###.#####.#.#.#####.###.#.###.#######.#.#.#.#.#.#.#.#.#.#####.#####.#.#.#.#.####.....#...#...#.#...#...#.#.#.#.#.#.....#.#.#.#...#...#...#.#...#.#.#.#...#.#.#.#.....#.....#...#...##.#.#####.###.#.###.#######.#.#############.#.#.#####.#.#.#.#####.#.#########.#.#########.###.#####.##.#...........#.#...#.....#...#.........#.....#.#...#.#.#.......#.......#...........#.#.......#.#.#.##.#.###.#.#.#.#.###.#.###.###.#######.#.#.#.#####.#.#.#######.#####.###.###.#.#####.#.#####.###.#.####.#.#.#.#.#.#...#...#.#.#...#.....#.#.#...#.#.....#.#...#.....#.....#...#...#...#.....#.......#.....##.###.###.#.###.###.###.###.###.###.#######.#.#.###.#####.#.#########.#########.###.#.#.#######.###.##.....#...#...#...#.....#.#...........#...#...#.#.#.#.#...#...#.........#.#.....#...#.#.#.#...#...#.##.#.#.###############.#.#.#.###.###.###.#.#####.#.#.#.###.###.#########.#.#############.#.#.#####.#.##.#.#.....#.......#...#.#...#...#.#...#.#.......#...#.#...#.........#...#...#...#.......#.....#...#.##.#######.#.#####.#.###.#.#.###.#.###########.###.#.#.###.#######.#.#.#####.###.#######.#.###.#####.##.#.#...........#.#.#...#.#...#...#.#.......#...#.#.....#.#.#.....#.........#.#.#...#.#...#.#.....#.##.#.###.###.#.#.###.#######.###.#.#.###.#.###.#####.#######.#.###.###.#####.#.#.#.#.#.###.#.#####.#.##.....#...#.#.#.......#...#.#.#.#.......#...#...#.....#.#.#.#.#.#.#.....#.#.#.....#...#.#.#.....#...##.#.#.###.###.###.#.###.#.#.#.###########.###########.#.#.#.###.#.#.#.###.#######.#####.#.#.###.#.#.##.#.#...#.#...#...#.....#.....#...#.#.......#.#.......#.#.....#...#.#.........#.......#...#...#.#.#.####.#######.#########.#####.#####.#.#.#####.#.#.#######.#.###.###.###.#.#####.#.#######.###.###.###.##...#.....#...#.#...#.....#.........#...#...............#.#.#.....#...#.#.#...#...#.........#.#.#...####.#.#.###.#.#.###.#.#.#.#####.#.###.###########.#.#.#####.#.#########.#.#.###.#.###.###.#.#.#.###.##...#.#.....#.#...#.#.#.#.#.#...#.#.....#...#.....#.#.....#...#.......#...#.#...#.#...#...#.#.#...#.##.#####.#.#.#.#.###.#.#####.#.#####.#.###.#####.###.#.#.#.#####.#.###.#.###.#.#####.#.#.#####.#.#.####.....#.#.#.#.....#.........#.....#.#...#.......#...#.#.#.....#.#...#...#.........#.#.#...#.....#...######################################################################################################';\r\nms=reshape(s15,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n% \r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 14[101x101]/9994\r\n%Lambdaman 14  optimal solution ?\r\ns14='######################################################################################################.......#.......#.......#...#.....#.....#.........#.#.........#.......#.#.....#.#.....#.#.....#.....##.###.#######.#.#####.#####.###.###.#####.#.#.###.#.#.###.###.#.###.###.#.#.###.#.###.#.#.#.#.###.####...#.....#...#...#.#.......#.....#...#.#.#.#.#...#...#.#.#...#.#...#.#...#.#...#.#.#.#.#.#.#.......##.#.###.#.#.#######.#.#.#.#####.#.###.#.#.#####.#######.#.#####.###.#.###.#####.#.#.###.#.#.#####.#.##.#...#.#...........#.#.#.....#.#.#.....#...#.#...#.#.....#.#.#.#.................#.#.....#.#.....#.####.###.#######.###.###.#####.#.#.#.#.#.###.#.###.#.#####.#.#.#######.#.#########.#.#.#.#########.####...#.......#.....#...#.....#...#...#.#.....#.......#.#.....#.....#...#...#...#...#...#.........#...######.#########.#####.#.#.#.#####.#####.#.#####.#####.#.###.#.###########.#.#.###.#.###.#######.###.##.#.#...#.#...#...#.....#.#...#...#.....#.#.....#...#...#.......#.#.....#.#.#.#...#...#.#.#.#...#.#.##.#.#####.###.###########.#############.#.###.###.###.#########.#.#.###.###.#####.#######.#.#.#.#.#.##.....#.....#.......#.............#.#...#.#.#.#.....#...#.....#.#...#.......#.............#...#.#.#.####.#####.###.#####.#########.#####.#.###.#.#####.###.#####.#.#.#.###.###.#####.###.#####.###.#.#.#.##.#.....#.........#.#...#...........#.#...#.....#.#.#.#...#.#.......#...#.....#.#...#.....#.#.#.#.#.##.#####.#.#.#.###.#.###.#####.#######.#######.#.#.#.###.#.###.#.###########.###.#####.#.#.#.#.#.#.#.##.....#.#.#.#...#.#.#...........#.#.....#.....#...#.....#...#.#.#.....#.............#.#.#.....#.#...####.#.#.#.#.#####.#####.###.###.#.#####.#.#####.###.###.#.#.#####.###.#######.#.#.#####.##############...#...#.#...#...#.#.#.#.....#.....#.....#.........#...#.#.#.....#...........#.#.#.........#...#...####.#.#.###.###.#.#.#.#####.#.#.#######.###########.###.#######.#.#######.###.#.#######.#####.#.#.####.#.#.#.#.....#.#.#.#...#...#.#.#...#...#...#.#.#...#.#.....#.#.#.......#...#.#.....#.....#...#.....##.#####.###.#####.#.#.#######.#####.#####.#.#.#.#####.#.###.#.#.#####.#.###.###########.#######.######...#.........#...........#.......#...#...#.#.#.#.#.#.....#...#.....#.#.#...#.....#.#...#.#.#.....#.##.#.#.###.###.#############.###.#.#.#.#####.#.#.#.#.#######.#####.#############.#.#.###.#.#.#.###.#.##.#.#.#.#.#...#...#.......#.#...#.#.#.#.#.#.....#.#.#.#.....#...#.........#.....#.........#.#.#.#...####.#.#.#########.#.#####.#####.###.###.#.#.#.#.#.#.#.###.#.###.#.#################.#######.###.#.####.....#...#.#.......#.#.#...#.#...#...#.....#.#.#...#.#.#.#.#...#...#.#...#.......#.....#...#.#.#...####.###.#.#.#######.#.#.###.#.#####.#####.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.###.#.#######.#.#.#.####.......#...........#.......#...#.....#.#.#...#.#.#...#...........#.#...#.#.#.#.....#.#.#.#...#.....########.###########.#.#######.###.#.###.#######.#.###.#.###.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.##.......#.#...#.#...#.#.....#...#.#.........#...#...#.#.#...#.......#...#.....#.#.#.#.#...#.#...#.#.##.###.###.#.#.#.#.#.#.###.###.#####.#######.#.###.###.#####.#####.###.#####.###.#####.#.#####.#.###.##...#...#.#.#...#.#.#.#.......#...#.#.......#.....#...#...#.....#...#...#...#.#...#.#.#.#...#.#...#.##.#.#####.#.###########.#########.###.#.#####.#.###.#.#.#########.###.#######.#.###.#.#.#.#######.####.#...#.....#.#.#.#...#...#.#.........#...#...#.#...#.....#.#.....#...#.#.....#.........#...#...#...####.#######.#.#.#.#.###.###.###.#.#.#####.###.#.###.#.#####.#.#.#######.###.#########.#.###.###.#.#.##.#...#.#.....#...#.....#.....#.#.#.#.#.#.....#.#...#.#.......#.#.....#.....#.....#.#.#...#.#.....#.##.#.###.###.###.###.#.#####.###.#####.#.#.#####.#####.#.#.#####.#.#.#.###.#.#.###.#.#.#.#.#.###.######...#.....#.......#.#.......#.........#.....#...#.#.#...#.#...#.#.#.#...#.#...#...#...#.#.#.......#.##.###.###.#.###.###.#.#.###.#####.#.#.#####.#.#.#.#.###.#####.#.#.#####.###.#####.###.###.#.#.###.#.##.#.#...#.#...#.#...#.#.#...#.#.#.#.#.#.....#.#...#.......#.#.....#.....#...#.....#.....#.#.#...#...##.#.#.###.#.#####.#.###.#.###.#.#####.#######.###.###.#####.#####.#######.#.#.#########.#.#.##########...#.#.....#...#.#.#...#...#...#...#.#.....#.#..L#...#...#.....#...#.....#.#.#.........#...#.......####.#.###.###.###.###.###.#.#.#.###.#.#.###.#########.#.#######.#.###.###.#####.#.#.###.#######.###.##.#.#...#.#...#...#...#...#.#.#.......#...#...#...#.......#...#.....#.#.......#.#.#.#.....#.......#.##.#.#####.#.#########.#.###.#.#.#####.#######.#.###.#####.###.#.#.#####.#######.#.###.#####.###.######.....#...............#.#.....#.#...#...........#.......#.....#.#.#...........#.#...#...#.#.#...#...##.###.###.#.###.#####.#############.#.#####.###.###.###.#########.#####.#############.###.###.#.###.##...#.....#...#...#.......#.#.#.#...#...#.#...#...#.#.........#.#.....#.#.#...#.....#.....#...#...#.######.#.#######.#######.#.#.#.#.###.###.#.###.#####.#####.#####.###.#.#.#.#.#####.###.#.#.#.#####.#.##.....#.#.....#.#.#...#.#.#.......#.......#.#.#.#.#...#.#.........#.#...............#.#.#.#.....#...####.###.#.#.#.###.###.#.#######.#######.###.###.#.###.#.#.#############.#.###.#.#####.###.#.##########.#.#...#.#.#.#.#.......#...#.......#...#.........#...#.......#.#.#.....#...#.#...#.....#.#.....#...##.#.###.#.#.###.###.#.#####.###.###########.#####.#########.#.#.#.###.#.#.#.#######.#.#.###.#.#.###.##...#.#...#...#.#...#...#.#...#...#.#.....#.#.....#.......#.#.#.......#.#.#.#.......#.#.....#.#.....######.#.###.#.#.#####.###.#.###.#.#.#.###.#####.#.#.###.#########.#######.###.###.#######.###.###.####.......#...#.......#.......#...#.#.#...#.#...#.#...#...#...#...#.#.....#.....#...#.......#.....#...##.#####.###########.###.###.#.#.###.#.#####.#.#######.#.#.###.#.#####.#.#.#####.###.#.#.#######.#.#.##.#.#.......#.....#.#...#.....#...........#.#.#.....#.#.....#.#.#.#.#.#.#.#.#.....#.#.#.#.#...#.#.#.####.#####.#####.#########.#######.#.###.#####.#.#.###.###.###.#.#.#.#.#.###.#.#.#.#.#####.#.###.######...........#...#.#...#.........#.#...#...#.#.#.#.....#.....#.#.#.#.#.#.......#.#.#.#.#.....#.#.#...######.#####.#.###.#.#############.#######.#.#.###.#.#.#####.###.#.#.###########.#####.#.#.#.#.#.#.#.##.........#...#.#.#.#...#.#.#.....#.........#.#...#.#.#...#...#.....#...#.....#.#...#...#.#...#...#.######.#######.#.#.#.###.#.#.###.#.#.###.#.###.###.#.###.#######.###.#.###.#.#####.###.#####.###.###.##.#.#.#.....#.#.............#...#.#...#.#...#...#.#.......#.#...#...#...#.#...#.....#.#.....#.#...#.##.#.#.###.###.#.#########.#.###.#.#####.#####.#.#.###.#.###.#####.###.#####.###.###########.#.###.####...........#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#.........#.......#...#...#...#.....#.#.#.....########.#.###.###.###.#####.#.#####.#.#.###.#.#######.#######.###.#.###.#.###.#.#.#######.#.#.###.####.......#.#.#...#.....#...#...#.#.#...#.....#...#...#...#.....#.#.#.#.#...#...#...#.....#...........####.#######.#.#.#.###.###.###.#.#.#.#############.###.###.###.#.#.###.#.#.#######.#.#.###.#.#######.##.#.....#.....#...#.#...#...#...#.....#...#.....#.....#.#.#.........#.#.#.#.....#.#.#.#...#.#...#...##.#.#.#.###.#######.#####.#.###.#####.###.#.###.###.###.###.#######.#.###.###.#.#.#.###.###.#.###.####...#.#.#.#.#...#.....#...#.......#.#...#.#.#.#...........#.#.....#...#.....#.#.......#.#...#...#.#.##.#.#.###.#.#.#.#####.#.#.#.#.###.#.#####.###.#.#.#.#######.###.###########.#####.###########.###.#.##.#.#.#...#...#.#.....#.#.#.#.#.#.#...#...#.....#.#.....#...#.........#.....#.........#.........#...######.#.#.#.#.#####.###.###.###.#####.#.###.#######.#.###.###.#.#.#.###########.#.#######.#.#.#.#.#.##.....#.#...#...#.....#.#...#...#...#...........#...#.#.....#.#.#.#.#.#.#.......#.....#...#.#.#.#.#.##.#.###.#######.#.###########.#####.#.###.#.###.###.#####.#.#####.###.#.#.#.###.###.#####.#########.##.#...#...#...#...#.....#.#.....#...#.#...#...#...#.#...#.#.......#.#.....#.#.....#...#.....#...#...############.###.#######.#.###.#####.#################.#####.#.###.#.#.#########.###.#.###.###.#.###.##.........#.......#...#.....#.....#.......#.#.#.#...#.......#.#.#...#.#.#.........#.#.........#.....##.#########.#####.###.#.#####.###.#.###.#.#.#.#.###.#####.#####.###.#.#.#########.#.#####.#.#.###.####.#...#.........#...#.....#.#.#.......#.#.#...........#.#.#.......#...#.#...#...#.#.#...#.#.#.#.....##.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#######.#######.###.#.#.###.#.#.#.###.#.#.#.#.#####.##.#.#...#...#.#.......#.........#.#...#...#.#.#...#.#.............#.#...#...#.#.....#.#...#.#.....#.##.#.#.#######.#.#######.###.#######.###.###.#.###.#.#.#######.#.#####.###.#.#############.#.#######.##...#.#.......#.#.......#.#...#...........#.#.#.#...#...#.#...#...#.#.#.#.#.#...#.....#...#.#...#...####.#.#######.###.#.#####.#.#######.###.#.###.#.#.#######.#####.###.#.#.###.###.###.#######.###.#.####...........#.#...#...#...#...#.#.#.#...#.....#.#.......#.#...#.......#.....#.#...#.#.....#.#.#.#.#.######.#####.#.###.###.#.###.###.#.#######.#####.###.###.#.#.#.#####.###.###.#.###.#.#.###.###.#.#.#.##.#.#.#.....#.......#.....#...#.....#...#.......#...#.......#.#.#...#...#...#.#.#...#.#...#.#.......##.#.###.#.#.#.#####.#####.#.#####.###.###.#.#.#######.#.#####.#.#######.###.#.#.#.###.###.#.###.###.##...#...#.#.#.....#.....#.#.#...........#.#.#.#.#...#.#...#.......#.......#...........#...........#.##.###.###.#.#########.#.#######.#.###.#.###.#.#.#.#.#########.###.#.#.#########.###.#######.###.#.####.....#...#...#.....#.#...#.#...#...#.#.#.#.#.#...#.#...#.....#.#.#.#.....#.#...#.......#.#.#...#.#.##.#####.#####.#.###########.#.#####.#.#.#.###.#.#######.###.###.#.#.#.###.#.#.#####.#.#.#.#######.#.##.#.....#.#.#.#.....#.#.........#...#.#.#...#.......#...#.#.#.....#.#.#...#.#...#...#.#.#.#.#...#...####.#.#.#.#.#######.#.#####.###.#.#.#.###.#######.#####.#.###.#####.#####.#.#########.#.#.#.#.###.#.##.#.#.#.........#.#...........#.#.#.#.#.#...#.....#...#...#.#.#.....#.....#.....#.....#.....#.#...#.##.#####.#.#####.#.###.###.###.#######.#.#.#.#.#.#.#.#####.#.#.###.###.#####.###.#.###.#####.#.#.###.##.......#.#.........#.#...#.....#.........#...#.#...#...........#...#.....#...#...#...#.....#.....#.######################################################################################################';\r\nms=reshape(s14,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=10000 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=10000 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-17T16:27:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-16T04:45:04.000Z","updated_at":"2025-12-11T05:42:01.000Z","published_at":"2024-07-16T05:31:31.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge uses a Crawler-Backfill method thus optimal solutions not found but big puzzles can be completed quickly if paths are width==1 and there are no loops.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a crawler-backfill   This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length. The challenge is to make a smaller crawler.\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":60593,"title":"ICFP2024 002: Lambdaman 9","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"  in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\r\nB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u003e B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u003e\r\n\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\r\n\r\nAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.","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: 579px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 289.5px; transform-origin: 407px 289.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 339px 8px; transform-origin: 339px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 380px 8px; transform-origin: 380px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"  in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\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: 287px 8px; transform-origin: 287px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u0026gt; B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u0026gt;\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 364px 8px; transform-origin: 364px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman9(m)\r\n% m is a maze where 2 is cheese to eat, 1 is Lambdaman the token being moved, \r\n% 0 is a wall\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman9 is a string of about 2499 RDLU characters\r\n%Answers may vary if doing rows or columns first\r\n v='R';\r\nend\r\n\r\n%Lambdaman 9 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman9.glx\r\nB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\" B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L$ L# ? B= v# I\" v\" B. v\" B$ v$ B- v# I\"\r\n\r\nSolution\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman9.sol.glx\r\nB. S3/,6%},!-\"$!-!.^} B$ B$ L! L\" B$ v! B$ v! B$ v! B$ v! B$ v! v\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u003e B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\u003e\r\n\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nvalid=0;\r\nm=ones(50)*2; %Cheese bits are 2.  Walls will be 0 but none in this case.\r\nm(1)=1;  %Lambdaman is 1\r\n\r\nv = Lambdaman9(m);\r\nfprintf('Answer Length: %i\\n',length(v))\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman9 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  c=min(c+1,50);\r\n elseif v(i)=='L' % L\r\n  c=max(c-1,1);\r\n elseif v(i)=='U' % U\r\n  r=max(r-1,1);\r\n elseif v(i)=='D' % D\r\n  r=min(r+1,50);\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nend\r\n%mc\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nL.................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n..................................................\r\n%}\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-09T20:42:07.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T17:08:10.000Z","updated_at":"2025-12-03T18:41:13.000Z","published_at":"2024-07-09T20:42:07.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 9 maze is a 50x50 matrix L at index 1. All points are '.' a cheese bit. Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ L+ B. B. SF B$ B$ v+ Sl IR B$ B$ v+ B. S~ B$ B$ v+ Sl IS IR L\\\" B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L$ L# ? B= v# I\\\" v\\\" B. v\\\" B$ v$ B- v# I\\\"  in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman9 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. S3/,6%},!-\\\"$!-!.^} B$ B$ L! L\\\" B$ v! B$ v! B$ v! B$ v! B$ v! v\\\" L! B. v! v! B. B$ L! B. v! v! SLLLLLLLLLLLLLLLLLLLLLLLLL B. S\u0026gt; B. B$ L! B. v! v! SFFFFFFFFFFFFFFFFFFFFFFFFF S\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\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\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSadly Cody years ago eliminated the ability for creators to evaluate scores based on time, body size, error, or other parameters due to cheaters.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs of 7/9/24 I still can not make either an ICFP reader or writer beyond a simple string converter. If anyone is able to make an interpreter please post in the comment. I had never heard of Lambda Calculus or Haskell prior to this event. Contest write-ups said they took up to 10 hours to make a working ICFP reader. I will be posting the entire ICFP2024 contest challenges and best solutions.\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":60642,"title":"ICFP2024 010: Lambdaman Optimal-Crawler-Backfill","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\r\n\r\nThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\r\nMaze#/Crawler/OptimalCrawler \r\n1/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\r\nThese are believed to be optimal solutions. Post in comments if any are beat.","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: 786px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 393px; transform-origin: 407px 393px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 371px 8px; transform-origin: 371px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\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: 98.5px 8px; transform-origin: 98.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMaze#/Crawler/OptimalCrawler \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: 313.5px 8px; transform-origin: 313.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\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: 242.5px 8px; transform-origin: 242.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThese are believed to be optimal solutions. Post in comments if any are beat.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [pathbest]=crawler_fill(m)\r\n% This is Optimal crawler_fill\r\n% Optimal Crawler with backfill will solve non-loop mazes with path width of 1\r\n% At intersections the path, UDLR, that is least deep to fill is selected\r\n% Recursive fast move if only one cheese adjacent or one open path\r\n% Backfill L spot if 3 adj are Wall 0\r\n\r\n%crawler 1/15 2/33 4/394/.09s\r\n%11[103x103]/9988/.33s 12[101x101]/9992  13/9976 14/9994 15/9986/.33s\r\n%Optimal crawler 1/15 2/26 4/348 11/9622/.9s 12/9626  13/9562 14/9478 15/9584\r\n\r\n pathv=zeros(1000,1); pathvptr=0;\r\n %zmap=[0 0 0;1 0 0;0 1 0;0 0 1]; \r\n \r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr]; % UDLR 1234\r\n \r\n  %figure(1);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\n  %pause(0.05)\r\n \r\n Lidx=find(m==1);\r\n ztic=tic;\r\n while nnz(m==2)\u003e0\r\n  %if toc(ztic)\u003e120\r\n  %  fprintf('ztic Timeout\\n');\r\n  %  break;\r\n  %end\r\n  \r\n  vadj=m(adj+Lidx);\r\n  m(Lidx)=3;\r\n  \r\n  [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr);\r\n  \r\n  if nnz(m==2)==0 %All cheezy bits eaten check post evolve\r\n   break;\r\n  end\r\n  \r\n  %Create path lengths in parallel to UDLR pu,pd,pl,pr\r\n  %evolve all four until one active path has no growth. This is branch to take\r\n  %dir will be called dptr 1 2 3 4\r\n  mUDLR=m;\r\n  mUDLR(m\u003e0)=inf;\r\n  mUDLR(Lidx)=1;\r\n  mU=mUDLR;\r\n  \r\n  % Use cell arrays mUDLRc{1} mU {2} mD {3}mL {4}mR \r\n  mUDLRc{4}=[];\r\n  Mdepth=zeros(1,4);\r\n  depth=2;\r\n  for i=1:4 % Initialize mUDLRc{i}\r\n   mUDLRc{i}=mU; % all same start UDLR\r\n   mUDLRc{i}(Lidx+adj(i))=min(mUDLRc{i}(Lidx+adj(i)),depth);\r\n   if nnz(mUDLRc{i}==depth)\r\n    Mdepth(i)=depth;\r\n   end\r\n  end\r\n    \r\n  % depth=2 at entry with at least 2 at depth 2\r\n  nnzMdepth=nnz(Mdepth); % Base active paths\r\n  while nnz(Mdepth==depth)==nnzMdepth   % 0012 stop  1223 stop  0022  0022 stop\r\n   pdepth=depth;\r\n   depth=depth+1;\r\n   for i=1:4\r\n    if Mdepth(i)==0,continue;end % matrix i never grew\r\n    gptr=find(mUDLRc{i}==pdepth)';\r\n    for j=gptr\r\n     mUDLRc{i}(j+adj)=min(mUDLRc{i}(j+adj),depth); % grow UDLR from each new point\r\n    end % j gptr\r\n    if nnz(mUDLRc{i}==depth) % Search for any new placements, cant use max as use Inf for path\r\n     Mdepth(i)=depth;\r\n    end\r\n   end % i mUDLRc\r\n  \r\n   if nnz(Mdepth==depth)\u003cnnzMdepth % Some path group ended\r\n    dptr=find(Mdepth==depth-1,1,'first'); %New direction\r\n   end\r\n  \r\n  end % while nnz Mdepth depth\r\n  \r\n  Lidx=Lidx+adj(dptr);\r\n  m(Lidx)=1;\r\n  pathvptr=pathvptr+1;\r\n  pathv(pathvptr)=dptr;\r\n \r\n end % while m==2\r\n \r\n UDLR='UDLR';\r\n if nnz(m==2)\u003e0\r\n  pathbest=UDLR(pathv(1:pathvptr));\r\n  fprintf('BestPath:');fprintf('%s',pathbest);fprintf(' Uneaten:%i\\n',nnz(m==2));fprintf('\\n')\r\n else\r\n  pathbest=UDLR(pathv(1:pathvptr));\r\n  fprintf('Solved Path:');fprintf('%s',pathbest);fprintf('\\nLength:%i\\n',length(pathbest));\r\n end\r\n \r\n  %figure(4);image(reshape(m+1,nr,nc));colormap(zmap);axis equal;axis tight\r\nend % crawler_fill\r\n \r\nfunction [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr)\r\n  vadj=m(adj+Lidx);\r\n  update=0;\r\n  while nnz(vadj==0)==3 % serial cul-de-sac exit; speed\r\n   m(Lidx)=0; % cul-de-sac  Backfill\r\n   ptr=find(vadj\u003e0,1,'first');\r\n   Lidx=Lidx+adj(ptr);\r\n   pathvptr=pathvptr+1;\r\n   pathv(pathvptr)=ptr;\r\n   vadj=m(adj+Lidx);\r\n   update=1;\r\n  end % while cul-de-sac\r\n  \r\n  while nnz(vadj==2)==1 % serial tunnel cul-de-sac; speed\r\n   m(Lidx)=3; % movement update\r\n   ptr=find(vadj==2,1,'first');\r\n   Lidx=Lidx+adj(ptr);\r\n   pathvptr=pathvptr+1;\r\n   pathv(pathvptr)=ptr;\r\n   vadj=m(adj+Lidx);\r\n   update=1;\r\n  end % while cul-de-sac\r\n  m(Lidx)=3;\r\n  \r\n  if update\r\n   [Lidx,m,pathv,pathvptr]=evolve(Lidx,m,adj,pathv,pathvptr); \r\n  end\r\n  \r\nend % evolve\r\n ","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 1  optimal solution L15\r\n   ms=['###.#...'\r\n       '...L..##'\r\n       '.#######'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=15 % Lambda1 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=15 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26\r\n ms=[ ...\r\n      'L...#.'\r\n      '#.#.#.'\r\n      '##....'\r\n      '...###'\r\n      '.##..#'\r\n      '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=26 % Lambda2 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=26 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=348 % Lambda4\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=348 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 11[103x103]/9988/.33s crawler\r\n%Lambdaman 11  optimal solution 9622\r\n ms=[ ...\r\n'#####################################################################################################'\r\n'#.#.....#.......#.#.......#...#...#.......#...#.......#.#.......#...#.....#.....#.....#.......#.....#'\r\n'#.###.###.#####.#.###.###.#.###.#.#.#######.#######.###.#.###.###.#####.#.###.#######.#.#.#########.#'\r\n'#...#.#.....#.....#.....#...#...#.....#.........#.#.......#...#.........#.....#...#.#...#.#.........#'\r\n'#.###.###.###.#.#########.#.#.###.#.#.#.###.#.###.###.#################.#######.#.#.###.###.#.###.###'\r\n'#.#.#.....#...#...#.#.#...#.#.#...#.#.#...#.#.#...........#.....#.......#.#.#...#.#.........#...#...#'\r\n'#.#.###.###.#######.#.#.#######.#####.#.#.###.###.#.#####.#####.#.###.#.#.#.###.#.#.#####.#####.#####'\r\n'#.......#.#.#.....#.........#.....#...#.#...#...#.#.#...#.#...#.#...#.#.#.....#.#.....#.....#.#.....#'\r\n'#####.#.#.###.#.###.#.###.#.#.#######.#.#.###.###.#.#.#######.#.###.#####.###.###.#.#.#.###.#.#.###.#'\r\n'#...#.#.#...#.#...#.#...#.#.......#.#.#.#.#.#...#.#.#.......#.......#.....#...#.#.#.#.#.#.....#.#.#.#'\r\n'###.###.#.###.#####.#######.#.#####.#.#.###.#######.#####.#.#####.#.#.#.#####.#.#.###########.#.#.###'\r\n'#...#.........#.........#.#.#.#...#.........#.........#.#.#...#...#...#...#...#.#...#...#.....#.....#'\r\n'###.#.#.#.###.#####.#.###.###.###.###.#############.###.#####.###.###.###.#.###.###.#.###.#########.#'\r\n'#.#...#.#.#...#.....#.#.....#.#.#...#.....#...#...#.#.............#...#...#.#.....#.#...#.........#.#'\r\n'#.###.###.###.###.#####.###.#.#.###.###.###.#####.#.#.###.#############.###.#####.#.#.###.#####.#####'\r\n'#.....#.....#.........#.#.....#...#.........#.#.#...#...#.......#...#.#.#...#...#.....#.....#.......#'\r\n'#.#.###.###.#.#.#################.#.#####.###.#.#.#.#.#####.###.###.#.#######.###.#####.#.###.###.###'\r\n'#.#.#.#.#...#.#...#...#...#...#.......#...#.#...#.#.#.....#.#...#.....#...........#.....#.#.#...#.#.#'\r\n'#.###.###.#.#######.###.#####.#.###.#.#.###.#.###.#############.###.###.###.###.###########.#.#.###.#'\r\n'#.#.....#.#.#.....#.#.......#.#...#.#.#.#...#.......#.#.....#.#.#.....#.#.....#.#.......#...#.#.#.#.#'\r\n'#.###.#######.#####.#.###.###.#.###.#.#####.#.#.#####.###.###.#.#.#######.#####.#.###.###.###.#.#.#.#'\r\n'#.#...#...#.....#.#...#...#.#.#.#...#.#.#.....#.#...#.....#...#.#.....#...#.......#.........#.#.....#'\r\n'###.#.###.#.#.###.#.#.#.#.#.#.###.#####.###.#.#####.###.#.#.###.#####.###.#.###.#######.###########.#'\r\n'#...#.#.#...#...#...#.#.#...#.#.#.#.........#.#...#...#.#.............#...#.#.......#.....#.....#.#.#'\r\n'###.###.#.###.#####.#######.#.#.#.#######.###.#.#####.#.#.#####.###.#.#.###########.#########.#.#.###'\r\n'#...#.#...#.#.#.#...#.....#.....#.......#...#.#...#.....#.#...#...#.#.#.#...#.#.#.....#.....#.#.....#'\r\n'#.###.#.###.#.#.#.#####.###.#####.#.#.#####.###.#####.#####.#######.#######.#.#.#####.#.#.###.#.#.#.#'\r\n'#.....#.#.#...#.#.....#...#...#.#.#.#.......#...............#.....#...#.....#.........#.#...#.#.#.#.#'\r\n'#.###.###.###.#.#.#.###.#####.#.#.#######.#.###########.###.#.#########.#.#########.#.#.###########.#'\r\n'#.#.#...#.#.......#.#...#...#L#.......#.#.#.....#...#...#.#.#.#...#.#...#...#.#.....#.....#.....#.#.#'\r\n'#.#.###.#.#####.###.###.###.#.#.###.###.###########.#.###.###.###.#.#.#######.###.###.#.#####.###.#.#'\r\n'#.#...........#.#.....#.#.#...#...#.#...#.......#.#.#...........#.....#.#.......#.#...#.#.....#.#...#'\r\n'###.###.###.###.###.###.#.#.###.#####.#.#.#.#####.#.#.#########.#.###.#.#.#.#.#####.#########.#.#.###'\r\n'#...#...#.#...#.#...#.#.#.....#.....#.#.#.#.............#.#.....#.#.#.....#.#.#.........#.#.....#...#'\r\n'#######.#.#########.#.#.###.#####.###.###.#######.#####.#.#####.###.#.###.###.#.###.#.###.###.#.#.###'\r\n'#.....#.........#...#.......#...#.#.......#.#...#.#...........#.#.....#.....#.#.#.#.#.....#...#.....#'\r\n'###.###.###.#.###.#.#.#####.###.#.#####.###.###.#.###.#.#.#.#######.#####.###.###.#.###.#####.#.#####'\r\n'#.#...#.#...#.#...#.#.#...#...#.......#.....#.......#.#.#.#...#.......#.....#.#...#...#...#.#.#.....#'\r\n'#.#.#######.###.#########.#.###.#####.###.#.#.#######.#######.#.#.#.#######.#####.#.#.#.#.#.#######.#'\r\n'#.#.......#.....#.....#.....#...#.......#.#.#...#.....#.#...#...#.#.....#.#.#...#...#.#.#...#.#...#.#'\r\n'#.#.#.###.#####.#.#######.#####.#############.#########.###.#.#########.#.#####.#.###.#.#####.#.#.#.#'\r\n'#.#.#.#.#.#.....#.....#.....#.................#...#.....#.........#.........#...#.#...#.........#...#'\r\n'#.###.#.#.#.#.###.###.###############.###.#####.#.#####.#.#.###.#########.###.#####.###.###.#.#######'\r\n'#...#.#.....#...#.#...#.#.........#.....#...#.#.#...#...#.#.#...#...#...#.#.#.#.#.#.#.#.#...#...#...#'\r\n'#.###.###.###.###.###.#.#.###.#.###.#######.#.#.#.#.###.#.#######.#.#.#.###.#.#.#.###.#.#####.#.#.###'\r\n'#.......#.#...#.#...#...#.#.#.#.........#.....#.#.#...#...#...#.#.#...#.#.......#.#.#.......#.#.#...#'\r\n'#.###.###.###.#.#.#####.###.#.###.#.#.###.###########.#.#####.#.#.###.###.#####.#.#.#.#####.###.#.#.#'\r\n'#...#.#.#.#...#...#.....#.#...#...#.#...#.#.........#...#...........#.....#.#...#.........#...#...#.#'\r\n'#.#.###.###.#######.#####.#.###############.#.#.###.#.###.#########.#######.#.#########.###.#####.###'\r\n'#.#.#.........#.#.....#.#.#.#.#...#...#.#.#.#.#...#...........#.#...#.#...........#...#...#...#.....#'\r\n'#####.#########.#.###.#.#.#.#.#.#.###.#.#.#.###############.###.#.###.#####.#.#.#####.#.#######.#.###'\r\n'#.........#.......#...#.......#.#.#...#.......#.....#.....#.#...#.....#.#...#.#.#...........#...#.#.#'\r\n'###.###.#######.###.#####.#####.#.#.#.###.#.###.###.#.#####.#.#####.#.#.#.#.#####.#####.#.#.#####.#.#'\r\n'#.....#.#.#.......#...#.#.....#.#...#...#.#...#.#.#.#.....#.#...#...#...#.#.......#.....#.#...#.....#'\r\n'###.#.###.#.###.#.#####.#.#########.###########.#.###.#########.#######.#########.#####.###########.#'\r\n'#...#.......#...#.....#.#.#.#.#.#.......#...#...#...#.....#...#.#.#...#.......#...#...#.#.......#...#'\r\n'#.#.#########.#.#.#.###.#.#.#.#.#.#.#####.#####.###.###.#####.#.#.###.#.###.###.#.#.#.###.###.###.#.#'\r\n'#.#...#.#.#...#.#.#.........#.#.#.#.#...#...........#.....#.#.#...#...#...#.#.#.#...#...#.#.#.#...#.#'\r\n'#.#####.#.###.#.#######.#.#.#.#.#.###.#######.###.###.#.#.#.#.#.#####.#######.#.###########.#.#####.#'\r\n'#.#.#.#.......#.#.......#.#.#.#...#.......#.....#...#.#.#.#.#...#.#.......#...#.#.....#.#.....#.....#'\r\n'###.#.#####.###########.###.#.#.#.#######.#.###.#.###.#.###.#.###.###.###.#.#.###.#####.#####.#.#.###'\r\n'#.....#.#.#...#.....#...#.#.....#.#.....#...#...#.#.#.#.....#.......#...#...#...#.#.......#.....#.#.#'\r\n'#.#####.#.#.#.#.###.###.#.#.#######.#####.#####.###.#.#######.#######.#.#####.###.#######.#####.###.#'\r\n'#.#...#.#...#...#...#.....#.....#.#.#.#.......#.....#...#.....#...#...#.#.#.#...#...#.#.....#.......#'\r\n'#.###.#.#.#.#.#####.#.#.###.#####.#.#.###.#.###.#######.#.#.#####.#####.#.#.#####.###.#.#.###.#.###.#'\r\n'#.......#.#.#.#.#...#.#.#.......#.#.......#.#.#.......#...#.#.#.#.#...#...............#.#.#...#...#.#'\r\n'#.#####.#.#####.#.#####.#.#.#####.###.#######.###.#.###.#.###.#.#.###.#####.#####.#######.###.#######'\r\n'#.#.#.#.........#...#.#.#.#...#.....#.#...#.....#.#...#.#.#...#.#...#...#...#.#...#.......#.......#.#'\r\n'###.#.#.#####.#######.###.###.#.#####.#.###.###.#.#.###.###.#.#.#.#.###.###.#.#######.###.#.#.###.#.#'\r\n'#.........#.....#.......#.#...#...........#...#...#...#...#.#.....#.#.........#.#.....#.#...#...#...#'\r\n'###.#####.#.#.#####.#####.#############.###.###.#####.#.#########.#########.###.#####.#.#.#######.#.#'\r\n'#...#.....#.#.#...#.#...#.....#...#.#.#...#.#.....#...#.........#...#.#.#...#.#.#.#.#.#...#.#.#.#.#.#'\r\n'###.###.###.#.###.#.#.###.#.#####.#.#.#########.###.###.###.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#'\r\n'#.#.#...#...#.#...#.....#.#.#.....#.....#.#...#.#.#.....#...#...#.......#.....#.#.....#.#.#.......#.#'\r\n'#.#####.#.#######.#.#.###.#.#.#.#.#####.#.#.#####.#.#########.#######.#####.###.#.#.#.#.#.#.#####.###'\r\n'#.....#.#.#...#...#.#.....#...#.#...#.#...#...#.#...#...........#.#.....#...#...#.#.#.#.#...#.#...#.#'\r\n'#.#.#####.#.###.###.#.#.#####.#######.#.###.###.#.#######.#####.#.#.#######.#.#####.#.#.#####.#.###.#'\r\n'#.#...#.#.#.#.#.#...#.#.#.............#.#.....#.....#.#...#.....#.#.....#.#...#.#.#.#...#.#...#.....#'\r\n'#.#.#.#.#.#.#.#.#####.###.#####.#######.#####.#.#####.#####.###.#.###.#.#.#.###.#.#####.#.###.#.###.#'\r\n'#.#.#.#...#...#.#.....#.#...#...#.#.#...#.....#...#.#.#.......#.....#.#...........#.......#.......#.#'\r\n'#.###.###.###.#.#.#####.#####.#.#.#.###.###.#####.#.#.#.###.#.#######.###.###.#.###.#####.#.###.###.#'\r\n'#...#.#.#.#.......#.......#.#.#.#...............#...#.#.#...#...#.#...#.....#.#.#.#.#.#...#...#.#...#'\r\n'#.#.###.#.#######.#.###.#.#.#.###.#########.#.#######.#######.###.#####.#########.###.###.#######.###'\r\n'#.#.#.#...#...#...#...#.#.#...#.#.#.#...#...#.#.....#.#...#.#.....#.#...#.#.......#.#.#.#.#.....#.#.#'\r\n'###.#.#######.#.#.#######.#####.#.#.###.#.###.#.#.#.#.#.###.#.#.###.###.#.#####.#.#.#.#.#.#.###.###.#'\r\n'#.......#.#.#...#...#.#.....#.....#.#.......#.#.#.#.....#.....#.......#.........#.#.........#.....#.#'\r\n'#####.###.#.#####.###.#.###.###.###.#####.#####.#####.#.###.###.###.#.#.#######.#.#.#.###.#######.#.#'\r\n'#.....#.#.....#...#...#...#...#.#.........#.....#.....#...#...#.#...#.....#...#.#...#...#.#.#.#.#...#'\r\n'#####.#.#.#.#.#.#####.#.#.#######.#.###.#.#.###.#.#.#.#.###.#####.#########.#.#####.#####.#.#.#.#.#.#'\r\n'#...#.#...#.#...#.......#.#.......#.#.#.#.#...#.#.#.#.#.....#...#...........#.#...#.#.........#...#.#'\r\n'#.#.#.#.#.#.#.#.#.#.###.#########.###.#.#.###.###.#####.#####.#.#.#.#.#.#######.#######.#.###########'\r\n'#.#.....#.#.#.#...#...#...#...#.......#.#.#.....#.#.#.....#...#.#.#.#.#...#.#.......#...#.#...#.#...#'\r\n'#####.###.#####.#.#########.###.#.#.#########.#####.###.#.#.#.#.#####.###.#.###.###.#.#.###.#.#.#.###'\r\n'#...#.#...#...#.#...#.....#.....#.#.......#.......#.#...#...#.#.#.#...#...........#.#.#.#...#.......#'\r\n'#.#.###.#####.#.#######.###.#######.#.#.#.#####.###.#######.#.###.#####.#.###.#####.#######.#####.#.#'\r\n'#.#.....#.#.......#.........#.......#.#.#...#.........#.....#...#...#...#.#.#...#.........#...#...#.#'\r\n'###.###.#.#######.#.###.#######.#.#.#.###.#.#######.###.#.#.###.#.#########.#.#.###.#####.#####.###.#'\r\n'#...#...#...#...#...#...#.#.....#.#.#...#.#.........#...#.#...#.#...#.........#...#.#.#.#.#.....#.#.#'\r\n'###.#.###.###.#.###.#####.#######.#.#.###.###.#######.###########.#.#.###.#######.#.#.#.#.###.#.#.###'\r\n'#...#.........#.#...........#.....#.#.#.....#...#...............#.#...#.....#.....#...#.......#.....#'\r\n'#####################################################################################################'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9622 % Lambda11 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9622 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 12[101x101]/9994\r\n%Lambdaman 12  optimal solution 9626\r\ns12='######################################################################################################.....#...#.....#.........#.......#...#.#.#.#.....#.#.#.#...#...........#...#...#...#.......#.#...#.####.#####.#.#.#######.###.#.#.#.#.#.###.#.#.#####.#.#.#.###.###.#########.###.###.#########.#.###.#.##...........#.....#...#.....#.#.#...#...#.#.#.#.#...........#.......#.#...#.#.....#.....#...#.#...#.####.#######.#.###.#.#####.#########.#.###.#.#.#.#.#.#.#.#######.#####.###.#.#.#.#.#.#######.#.###.#.##.#.....#...#.#.#.#...#.#.#.....#.#.#...#.........#.#.#...#.....#.....#.....#.#.#.#.........#.....#.##.#####.#.###.#.#.#.###.#.#.###.#.#####.###.###.#####.###.#####.#.#.#####.#####.###.###########.###.##...#...#.#.#...#.#...#.....#.#...#.#.......#.......#.#...#.....#.#.#...#...#.#.......#.#...#.#.#...##.#.#####.#.#########.#######.#####.#####.#.#.###.#######.#.#####.###.###.###.#.#######.#.###.#.#.####.#.....#.#.........#.#...#.#.....#.#.#...#.#.#.#.#.......#.#.....#.......#.........#.....#.......#.####.###.#.#.#.###.###.###.#.#.#####.#.#########.#.###.#####.#.#.#########.#.###.#.#.#.###.#.#######.##...#.#...#.#.#...#.....#...#.....#.#.....#.#...#.#...........#.#.#...#...#...#.#.#...#.........#...##.#.#.#####.#####.#.#######.#.###.#.#####.#.#.###.#####.#.#.#####.#.###.#.#.#####.#######.#.#####.####.#.....#.#.#...#...............#.....#.......#.....#...#.#.....#.......#.....#...#...#...#.#.......######.###.#####.#####.#########.#############.#.###.#######.###.#.#.###.#####.#.###.###.###.#####.#.##.....#.#.......#.#.#...#.#...#.....#.............#.......#.#.....#.#.#...#...#.#.#...#.#.#.#...#.#.######.#.#.#.#####.#.#.#.#.###.#.#.#####.###.#####.###########.#######.###.#.#####.#.###.#.#.#.###.#.##...#.....#...#...#.#.#.#.......#.#...#...#.#.#.#...#...#.....#.#...#.....#...#.......#.#.......#.#.##.#.#.#######.#.#.#.#.#####.###.###.#.#####.#.#.###.###.#######.###.#####.#########.#####.#.#####.#.##.#.#.....#...#.#...#...#...#...#...#.#.#.........#.#...#.............#.#.....#.#.#.......#...#...#.##.#.###.#.#.#.#####.#.###.#.#####.###.#.###.###.#######.#.###.#######.#.#####.#.#.#.#######.#.#.#.####.#.#...#.#.#...#.#.....#.#.#...#...#.#...#...#.......#...#...#.#.........#.#.#...........#.#...#.#.####.#.#.#########.#.#####.###.#.#####.#.#########.#.#.#####.###.#.###.#####.###.#####.#####.###.###.##...#.#.#...........#...#.#.#.#.#...#...#.....#.#.#.#...#...#.#...#.#...#.#.....#.#.#...#.....#.#...##.###.###.###.#.#.#.#.#.###.#.#.###.###.#.###.#.#.#####.#.###.#.###.#####.#.#.#.#.#.#.#.###.#.#####.##...#.#.#.#.#.#.#.#...#.#...#.#.......#.#.#...#.....#.#.....#...#.....#.....#.#.#.....#...#.#...#.#.##.#.#.#.#.#.###.#########.#######.#.###.###.#####.#.#.###########.###.#.#.#########.###########.#.#.##.#...........#.......#.........#.#.#...#.#.#...#.#...#.....#...#.#.....#...#.#.#.......#...#.#.....##.###.#.#.#.###.###.#######.#######.###.#.#.###.#.#.#.###.#####.#.###.#######.#.#.#####.#.###.#####.##...#.#.#.#.#.#...#.#...#.#.....#.......#.....#...#.#.....#.#...#.#...#.....#.#.#.....#...#.....#.#.##.#######.###.#####.#.###.#.#.#.###.#.###.#####.#####.###.#.#.#.#.#.#####.###.#.#.#######.#.#####.#.##.#.....#...#...#.#.#.#.....#.#.#.#.#.........#...#.#...#.#.#.#...#.#...#...........#.........#.....##.#####.#####.#.#.#.#.#.#####.###.#####.###.###.###.###.###.#.#.#####.#.#.#.###.#######.#.#.#####.####.....#...#...#.......#...#.#.....#.#...#.#.........#.....#...#...#...#.#.#.#.#.#.#.....#.#...#.....##.#######.#######.#####.#.#.#.###.#.###.#.#####.#######.###########.#.###.#.#.###.#.#######.##########...#...#.#...#.........#...#.#.#...........#.......#.....#...#.#...#...#.#.#...#...#.#...........#.##.###.#.#.#.#.###.#######.###.#.#.###.#.#.#######.###.#####.###.#####.###.#.###.#.#.#.#.###.###.#.#.##...#.#.....#.#.#.#.....#.#.....#.#...#.#.....#...#...#.#.#.#.#...#.#.....#...#...#...#.#.#...#.#.#.##.#.###.#####.#.#.#####.###.###.###.###.#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#############.#.#.#####.#.##.#.#...#...#.#.........#...#.....#.#...#.....#.#.#.#.#...........#...#.#.#.....#.#.#.#.#.....#...#.##.#.#.#.#.#.#.#####.#.#####.###.#####.#.#############.#.#####.#.#########.#.#.#.#.#.#.#.#####.###.#.##.#...#...#.#.#...#.#.....#...#.#.....#.............#...#...#.#.....#.......#.#.#.#.#...#.#...#.....######.###.#.###.#####.#############.###.###.#############.#.#######.###.#.#######.#.#.###.#####.#.####.#...#...#.#.#...#...............#...#.#...#.....#...#...#...#...#.#...#.#...#.#.....#...#.#...#...##.#####.#####.###.###########.###################.###.#.#.#######.###.#######.#.###.###.###.#.#.###.##.........#.#.#...#.#.#.....#.............#.....#...#...#.#.#.....#.#.#...#.......#.#...#.....#.#.#.####.#.###.#.#.#.###.#.#.###.#.#.#####.#####.#.#.###.#.###.#.#####.#.#.#.###.###.###.###.###.#####.#.##...#.#.....#...#...#.....#...#.#...#...#.#.#.#.........#.#...#.#...#.....#.#.#.#.#.......#.#...#...##########.#.#.#.###.###.#.#####.#.#######.#####.###.#.#.#####.#.#.#########.#.###.#########.###.######.....#...#.#.#.#.......#.#.#.....#.......#.#.....#.#.#...#...#...#...........#.........#...#.#.#.#.##.#####.###.#.#####.###.###.###########.###.#####.#########.###.#####.#################.#####.#.#.#.##.....#.#.#...#...#...#.#.....#.....#.#.....#.......#...........#...#.#.#.....#...............#.#.#.##.###.#.#.#.#.#.###.#.#####.#######.#.#####.#.#########.#####.###.#.#.#.#.#######.#####.#.###.#.#.#.##...#.#.#.#.#.....#.#.#...#.#.....#...#...........#.#.#.#.......#.#...#...#.#.#.....#...#...#.....#.##.#.#.###.#.#######.###.###.#.###.#.#######.###.###.#.#.###.###.#.#.###.###.#.###.#.#.#######.#####.##.#.#...........#.........#.#...#.....#.#...#.#.#.........#.#.#.#.#.......#.......#.#...#.#...#.....##.#######.#######.#.###.#.#.#######.###.###.#.#.###.#########.###########.#.#.###########.###.###.####...#.#.......#...#.#.#.#.#...............#.#...#.#.........#...#.......#...#.....#.......#.........##.###.#.###.#########.#.###.###.#.#.###.#.#.#####.#.#.###.#.###.#####.###.###.###########.#####.#.####.#...#.#.#.....#.#.#.#.......#.#.#...#.#...#.....#.#.#...#.....#.#.........#.#.#.#.........#...#...##.#.#####.###.###.#.#.#.#######.###.###.#.#.#####.#.#############.#.###.#.#####.#.#######.#########.##...#.#...#.#...#.........#...#...#.#...#.#.#.#.....#.......#.#.#.#.#...#...#.....#...#...#.#.#.#...##.###.#.###.###########.#.#.#####.#.#######.#.#.#.#.#.#######.#.#.#######.#####.###.#.#.###.#.#.#.#.##.........#...#.......#.#...#.....#.#.#...#...#.#.#.....#.....#.......#.....#...#.#.#.#.#.....#...#.##.#.#########.#####.#.###.#####.#.#.#.###.#.#.#####.#####.#####.#########.###.###.###.#.###.###.######.#...#.........#...#.....#.#...#.#.#.......#...........#.#.#.#.........#.#.#...#.......#...#.#.....##.#.#########.###.#.#######.###.#.#.#.#####.#.#.#.#######.#.#.#.#######.#.#.#.###.#.#.#.#.###.#.###.##.#.#...#.......#.#.......#.#.#.#.#.#...#...#.#.#...#...#.......#.#...........#...#.#.#...#.......#.####.#.#######.#####.#.#.###.#.#.#############.#####.###.#.#####.#.#####.#.###.#.###.#.#.##############...#.#...#...#.....#.#.#...#...#.#.........#.#...#.....#...#.#.#.#.....#...#...#...#.#.....#...#...######.#.#####.#######.#.###.#.#.#.#.#.###.#.#.###.#.###.#.###.###.#.#.#######.#.#####.###.###.#.#.####.#.#.#.......#.....#.#.....#.#.#.#.#...#.#.....#.#...#.#.#.......#.#.#.....#.#.....#.#.....#.#...#.##.#.#.#.#.#.#.#.###.#.#.###.#####.#########.#####.###.###.###.#.###.#.#.###########.#####.#.#.###.#.##...#.#.#.#.#.#...#.#.#.#.#.#...#.#.......#.#...............#.#...#.#.....#.......#...#...#.#...#.#.####.#.#.#####.#.###.#.###.#.###.#.###.#######.#######.###########.#.#####.#######.#.###.#########.#.##...#.......#...#.....#.#.....#.....#.#.#.#.#...#.#.......#.#.....#.#...#.#...#.#.....#.............####.###.#####.###.#.#.#.#.###.#.#.###.#.#.#.#####.###.###.#.#.#.#####.#######.#.#.#.###.#.#.##########.......#.......#.#.#.#.#...#.#.#...#...#.#.......#.#.#.......#.......#.#.....#...#...#.#.#...#.....##########.#############.###.#.#.#.#.#.###.#####.#.#.#######.###.#######.###.#.###########.#####.#.####.......#...#...#.#.........#.#.#.#.......#.....#.......#.....#...#...#.#...#...#.......#.#...#.#...######.###.#.###.#.#######.###.###.#.#############.#########.###.#.#.###.#######.#######.###.#.#.###.##.....#...#.#.#.#.#.#.......#...#.#.......#.......#.....#...#...#.........#.......#.........#.#.#...######.#.#####.#.#.#.###.#####.###.#.#######.###.#####.###.#######.###.#####.#####.#.#####.#####.#.####.#.......#.............#.#.#.#.#.#...#.....#...#.......#.#...#.#...#.#...#.#.#.....#.#.....#...#.#.##.#.#.###############.###.#.#.#.#.#######.#.###.###.###.###.#.#.#.###.###.###.#.###.#.#.#####.#.###.##...#..L....#.#.....#.#.....#...........#.#.#.#...#...#.#...#.#.....#.......#...#.....#.#.....#.#.#.##.###########.###.#####.#####.#######.###.###.###.###.#####.###########.#######.#.#####.#####.###.#.##.#...#.....#.....#.#.......#.......#.......#.#.#.......#.#...#.....#.......#...#.....#...#.......#.####.#.###.#####.###.#.###.#####.###.#####.###.#.###.###.#.#.#.#.###.#.#####.#####.#####.###.#####.#.##.#.#.#.#.#.......#.....#.......#.....#...#...#.....#.......#.....#.#.#...#.#...#...#...#.#.#...#...##.#.###.#.#####.#.###.#############.#####.#.###.#######.###.#.#.#########.#.#.#.#.###.#.#.#.#.########.......#...#.#.#...........#.#...#...#.#.#...#.....#...#...#.#...#...#.......#.....#.#.#.....#.#...##.#.#######.#.#########.#####.#.#.#####.#.###.#####.#.###.###.#######.#########.#.###.#######.#.#.####.#.......#.#...#.......#.#...#.#.#...........#.#...#.#.....#.#...#...........#.#...#.#.......#.....####.###.###.#.###.#####.#.###.#.###.###.###.###.#.#.#.#######.###.###.###.###.#####.#########.###.####.....#.....#.#.#.....#.#...#.#...#.#...#...#.....#.#.....#.....#...#...#.#.#.#.#.#.....#.....#.....##.#.#.#.###.#.#.###.###.###.#.###.###.#####.#.#####.#.#.#####.#####.#######.#.#.#.###.#####.###.#.#.##.#.#.#...#.....#.....#.........#.#.#...#.#.#...#.#.#.#...#.#.#.........#...........#.......#...#.#.##########.#.###.###.###.#######.#.#.#.###.#.#.###.###.###.#.###.###.###.#.#.#######.#.#.###.#.###.####.........#...#.......#.......#.....#.....#.#.....#.....#.#.....#...#.....#.....#.....#...#...#.....######################################################################################################';\r\nms=reshape(s12,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9626 % Lambda12 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9626 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 13[101x101]/9994\r\n%Lambdaman 13  optimal solution 9562\r\ns13='######################################################################################################...#...#.........#.#.........#.#.#.#...........#.#.#.#...#.........#.#...#.......#.#.........#.#...##.#.###.#.#########.#####.#####.#.#.###.#######.#.#.#.#.#########.###.#.#.###.#####.#.###.###.#.###.##.#...#.....#.#.....#.#.#.#...#.....#.....#.#...#...#...#.#...#...#.#...#.#...#...#.#...#...#.#.....##.#####.###.#.#.#####.#.#.###.###.#.#.###.#.###.#.###.#.#.#.#####.#.###.###.#.#.#.#.#.#######.###.#.##.........#...#.....#...#.#...#.#.#...#...#.#.......#.#...#.....#.........#.#.#.#...#...#.......#.#.##.#.#########.#.###.###.#.#.###.#######.#.#.###.#.###.#.#.###.#.###.#######.#.#.#.###.#######.#.#.####.#.....#...#.....#.#.#.#.#.#.........#.#.....#.#.#...#.#...#.#.......#.....#...#...........#.#.#...######.#.#.#.#.#######.#.#.#.###.###.###.#.#####.#.###.###.###.###.###.#########.#.#.#############.####...#.#...#.#.#.#.#...#...#.....#.....#.#.....#.#.#.#.#.....#...#.#.....#.......#.#.............#.#.####.#####.#.###.#.###.#.#.#.#.#.#####.#.#######.###.#####.###.###.#.###.#.#####.#####.#######.###.#.##...#.....#.#.#.#...#.#.#.#.#.#.#.#...#.#.....#...#.#.........#.#.#.#.#.#.#.......#.....#...#...#...####.###.#####.#.###.#.###.#####.#.#######.#####.###.###.#.#####.#.###.###.#.#.#.#########.###.###.#.##...........#...#.....#...........#.....#...#.......#...#.#...#...#.#.#...#.#.#.......#.......#...#.##.#.#.###.#.#.#####.#.#.#####.#######.###.###.#.#.#.#########.###.#.#.#########.###.#.#######.###.####.#.#.#...#.#.......#.......#.#...#.........#.#.#.#.#.#.#.#.....#.#...#.#.#.#.#.#...#.#.#.#.....#...####.#######.#.#.#.###.#########.#.#.#####.#########.#.#.#.#.###.#.#.#.#.#.#.#.#####.###.#.#####.#.####.....#.......#.#.#.....#.#...#.#...#.......#.......#.#.#.....#.#...#.#.....#...#...#...#.........#.##.#.#.###.###.#####.#.###.#.#######.###.#######.#.#.#.#.#.#.#####.###.###.#####.###.#.#####.#####.#.##.#.#.#...#.....#...#.....#...........#.#.#.....#.#.......#...#...#.#.............#.#.........#.....######.###.#########.#.###.###.#.###.#.###.#.###.#.#.#########.#.###.###.###.#.###.###.#####.#######.##...#...#.#.......#.#.#.....#.#...#.#.#.#...#.#.#.#.#...#...#.#.#...#.#...#.#.#...........#...#.....####.#####.#.#####.#########.#.#.#.#####.#.###.#.#.#####.#.###.#.#.###.###.#######.###.#.##############.....#...#.#...#.#...#...#...#.#...#.......#...#.#.#.......#.#.#...#.....#.#.......#.#.....#...#...##.###.###.#.#.#.#.###.###.###.#.###.###.#######.###.###.#####.#####.#.#####.#.#.#####.###.###.###.#.##...#...#...#.#.#...#.#.....#.#...#...#...#.#...#...#...#.#...#.#.#.....#.#...#.#.......#.....#...#.####.#.###.#####.#####.#.#####.#####.###.###.#######.###.#.###.#.#.#.###.#.#.#######.#####.#####.######...#...........#.#.#.#.........#.....#...#.#...#...#...#...#.#.....#.#.#.#.#...#.....#.#...#.#.#...######.#######.###.#.#.###.#.#######.###.###.#.###.###.#.#.###.#.###.#.#.#.###.#######.#.#.#.#.#.#.####.....#.#.#.....#.#.....#.#.#.#.#...#.#.#...#.........#...#.....#.#...#.#.#...#.......#...#.#.......####.###.#.#.###.#.#.###.#.###.#.#.#.#.#.#.###########.#####.###.#.#.#####.#.#####.#####.#.#####.#.####.....#...#.#.#.#...#.#...#...#...#.....#.....#.#...#.....#.#.....#.#.#.#...........#...#.#.....#...######.#.#.###.#######.#####.#.#.#.#.#####.###.#.###.###.#####.#.#####.#.#.#####.###.###.#.#####.###.##.#.#...#...#.........#.#.#.#...#.#.......#...#.#.......#.....#.#...........#.#.#...#...#...#...#...##.#.###.#.#.#.#.#####.#.#.#.#.#######.#########.#.#####.#.#########.###.###.#.###.#.#.###.###.###.####.......#.#.#.#.#.#.#.#.#...#.....#...#...#.#...#.#...#.#.....#...#.#.#...#.#.....#.#.#.........#.#.####.#.###.#######.#.#.#.#.#.###.###.#####.#.#.###.###.#.#.#.#.#.###.#.#.#.###.#########.#.#########.##...#.#.....#.......#.#.#.#.#.#.#...#.#.#...#.#.#...#...#.#.#.....#...#.#...#.......#.#.#.#...#.#...##.#.#####.###.#######.#.#####.#####.#.#.#.###.#.#######.###.#########.#.#############.#.#.###.#.###.##.#.#.#.....#...#.#.....#.......#.#.#.......#.#.............#.......#.#...#.......#.#...#...#.......####.#.#.###.#.###.#####.###.###.#.#.#####.###.#.#.###.#########.###.#########.#.#.#.#####.#######.####.#.#.#.#.#.#.#.........#.#.#...#.#.#.#.....#.#.#.#...#...#.......#.#...#.....#.#.#.....#.#.........##.#.#.###.#.#.#####.#.###.###.#.#.#.#.#.#####.#######.#.#########.#.###.#########.###.#.###.#######.##.......#.#...#...#.#...#.....#.....#.....#.#.#.#...........#.....#.....#...#.......#.#...#.....#...######.###.###.###.#.#.###############.#####.#.#.#######.###.#######.#######.#.#.#######.#######.###.##...#.#.#...#.....#.#.#.....#.....#.#...#.#.#.#...........#.......#.....#.#.#.#.#.................#.####.###.#.###.###.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#####.###.###.#.#.###.###.#.#######.###.####...#.....#...#.#...#...#.....#.#.....#.#.........#.#.#...#.......#...#.....#.....#.#.....#...#.#.#.####.#.#.###.###.#.###.###.#.###.###.#.###.#.#######.#.#####.###.###.#.#######.#.###########.###.###.##.....#.........#...#.....#...#.#.#.#.#.#.#...#...#.#.....#...#.....#.#...#...#...#.........#...#...########.#######.###.#.###.#.###.#.#.#.#.#.#####.###.#######.###.#.#####.#########.#.#.#.#.###.#.#.####.#.#.#...#...#...#...#...#.#.#.#...#...#.#.#.......#.......#.#.#...#...#...#.#.#...#.#.#.#...#...#.##.#.#.#.#.###.#.#######.#.###.#.###.###.###.#####.###.#.#####.#.###.###.#.###.#.###.#############.#.##.....#.#.#.......#...#.#.#.......#.#.#...#...........#.#...#...#.........#.....#...#...........#...######.###.###.#######.#######.###.###.#.#.#####.#.#####.#.#########.#######.#######.#######.#.#####.##.........#.#.........#...#...#.........#.....#.#.#...#.#.............#.........#.......#.#.#...#.#.####.###.###.###.#.#.#####.#######.###.###.#####.###.###.#####.#################.#.#.#.###.###.###.#.##.#...#.#.....#.#.#.#.....#.....#.#...#...#.......#.#.#.....#.#.#...#...#.........#.#.#.......#.....##.#####.#.#.#####.###.###.###.#########.###########.#.###.#####.#.#.#.###.#####.#.#####.#####.#.######.#.......#...#...#.....#.#...#.#.#...#.#.....#...#.......#...#...#...#.#.#.....#.....#.....#.......##.###.###.#####.###.#####.###.#.#.###.#.#.###.#.#####.#####.#####.#####.#####.###.#.#####.###.########...#.#...#...#...#...#.............#.......#.......#...#.....#.....#...#.#.#.#...#.#.#.#...#.....#.##.#####.###.###.###.#####.#####.#####.###.#####.###.#########.###.#.#.#.#.#.#######.#.#.###.#######.##.......#.....#...#.....#...#.....#.#.#.#...#...#...#.....#...#...#.#.#.....#.....#...#...#.....#.#.##.#.#####.###.#.#######.#######.###.#.#.#####.#######.#####.#####.#.###.###.#.###.###.#.###.#.#.#.#.##.#.#.#.....#...#.........#.......#.....#...#...#.....#...#.....#.#...#.#.#.#.#.#...#.#...#.#.#.#...####.#.#####.###.#.#####.#########.#########.#.#.#.###.#.#######.#.#.#.###.#.###.#.###.###.###.###.####...#.......#...#.....#.#.............#.#.....#.#.#.......#.#...#.#.#.#.#.#.#...#...#.........#.....##########.###.#.#.###.#.###############.#.#####.#########.#.###.#.#.###.#.#.#.#####.#.###.###.###.####.........#.#.#.....#.#...#.........#.........#...#.....#.....#...#...#.......#...#.#.#...#.#.......##.###.###.#.#.###.#############.###.#.#######.###.###.#####.###.#.#####.###.###.###.###.#.#.###.###.##...#...#.#.#.#...........#.....#...........#.#.#.#.....#...#.#.#.#.#...#...............#.....#...#.##.###.#####.#####.###.###########.###.#####.###.#######.###.#.#.###.#.#.#.###.###.#.###.#####.#####.##...#.#.#...........#.#.....#.#...#.#...#.....#.......#.#.........#.#.#.#.#.....#.#.#.....#.#.....#.########.###.#.#######.#.#.###.#.#.#.#.###.#.###.#####.#.#.#.###.#.#.#####.###########.#.###.###.#.####...........#.#...#.....#.#.#...#...#.#...#.#.....#.#L....#.#...#...#.........#.#.....#...#...#.#.#.##.###.#.#######.#########.#.#####.#####.#.#####.###.###.#######.#.#.#.#######.#.#.###.#####.###.#.#.##...#.#.#.#.....................#.....#.#.#...#.#...#.....#.....#.#.#.#.....#...#.#.#.......#.#.#...####.#####.###.#.#.###############.#######.###.###.#####.#######.#.###.#.###.#####.#.#.#.#.###.#.######.#...#...#...#.#...#.#.........#.#.#.............#.#...#.#.#...#.....#...#.....#...#.#.#...#...#.#.##.###.#.#.###########.#.###.#######.#.###.#.#.###.#.#####.#.###.###.#.#.###############.###.#####.#.##.#.....#.#...#.#...#.#.#.#.....#.....#.#.#.#...#.........#.......#.#.....#...#.#.#.#...#.#.......#.##.#.#.#####.###.#.###.###.#.#.#######.#.#.#.#.#######.#.#.#############.###.#.#.#.#.#.###.#####.###.##...#.....#.....#.....#.....#.....#.....#.#.#.#.....#.#.#.................#.#.....#.#.#...#...#...#.######.#.###.#.###.#####.#############.###.#.#.#####.###.###.#.#########.#########.#.###.###.#.#.###.##.....#...#.#...........#.#...#.#.#.#.#.#.#.#.#.#...#.#.#.#.#.#.#.#...#...#.......#...#...#.#.......####.#.#####.###.#####.#.#.#.#.#.#.#.#.#.#####.#.###.#.###.###.#.#.#.#######.#########.###.#.#####.####.#.#...#...#...#...#.#.#.#.#...#...#.#.....#.......#.#.....#...#...#.#.......#.........#...#.......##.###.#.#.###.###.#####.#.#.#.#####.#.#.#############.#.###.#####.#.#.#.#.#.#####.#####.###.###.#.####...#.#.#...#.#...#...#.#.#.#.................#.#.#.#.....#.....#.#...#.#.#.......#...#.......#.#...##.#.###########.###.#.#.#.#.#.#####.###########.#.#.#.###.#.#####.#####.#.###.###.#.#.#.#####.###.#.##.#...#.#.#.....#...#.......#.#...#.........#.#...#.#.#...#...#.......#.#.#.....#.#.#.#.....#.#...#.####.###.#.#####.#####.###.###.#.###.#####.###.#.#.#.#########.#.#######.###########.#.#########.######.#.#.......#...........#...#.#.........#.......#.#...#...............#.............#...#.#.#.......##.#.#.###.#.#####.#####.#######.#####.###.#######.###.#.#.#####.###.#######.#.###.#.#####.#.#.#.###.##.....#.#.#.....#.#...#.#...#...#...#.#.#.......#.#.....#.#.......#.........#...#.#.#...#.#...#...#.########.###.#.###.#.#.#.###.#.###.#.###.#.#.###########.#######.#######.###.#######.#.###.#####.#.####.....#.....#...#...#.#.#.#.#.....#.#.....#.....#.......#.......#.#...#.#...#.....#.......#...#.#...##.#.#.###.###.#.###.#####.#.#.###.#####.#.#.#####.###.#.#####.###.#.#.#.#.#####.#.#.#.#.###.#.###.####.#.#.....#...#.............#.#.......#.#.#.#.....#...#.....#...#...#...#.#.....#...#.#.....#.#.....######################################################################################################';\r\nms=reshape(s13,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9562 % Lambda13 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9562 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 14[101x101]/9994\r\n%Lambdaman 14  optimal solution 9478\r\ns14='######################################################################################################.......#.......#.......#...#.....#.....#.........#.#.........#.......#.#.....#.#.....#.#.....#.....##.###.#######.#.#####.#####.###.###.#####.#.#.###.#.#.###.###.#.###.###.#.#.###.#.###.#.#.#.#.###.####...#.....#...#...#.#.......#.....#...#.#.#.#.#...#...#.#.#...#.#...#.#...#.#...#.#.#.#.#.#.#.......##.#.###.#.#.#######.#.#.#.#####.#.###.#.#.#####.#######.#.#####.###.#.###.#####.#.#.###.#.#.#####.#.##.#...#.#...........#.#.#.....#.#.#.....#...#.#...#.#.....#.#.#.#.................#.#.....#.#.....#.####.###.#######.###.###.#####.#.#.#.#.#.###.#.###.#.#####.#.#.#######.#.#########.#.#.#.#########.####...#.......#.....#...#.....#...#...#.#.....#.......#.#.....#.....#...#...#...#...#...#.........#...######.#########.#####.#.#.#.#####.#####.#.#####.#####.#.###.#.###########.#.#.###.#.###.#######.###.##.#.#...#.#...#...#.....#.#...#...#.....#.#.....#...#...#.......#.#.....#.#.#.#...#...#.#.#.#...#.#.##.#.#####.###.###########.#############.#.###.###.###.#########.#.#.###.###.#####.#######.#.#.#.#.#.##.....#.....#.......#.............#.#...#.#.#.#.....#...#.....#.#...#.......#.............#...#.#.#.####.#####.###.#####.#########.#####.#.###.#.#####.###.#####.#.#.#.###.###.#####.###.#####.###.#.#.#.##.#.....#.........#.#...#...........#.#...#.....#.#.#.#...#.#.......#...#.....#.#...#.....#.#.#.#.#.##.#####.#.#.#.###.#.###.#####.#######.#######.#.#.#.###.#.###.#.###########.###.#####.#.#.#.#.#.#.#.##.....#.#.#.#...#.#.#...........#.#.....#.....#...#.....#...#.#.#.....#.............#.#.#.....#.#...####.#.#.#.#.#####.#####.###.###.#.#####.#.#####.###.###.#.#.#####.###.#######.#.#.#####.##############...#...#.#...#...#.#.#.#.....#.....#.....#.........#...#.#.#.....#...........#.#.#.........#...#...####.#.#.###.###.#.#.#.#####.#.#.#######.###########.###.#######.#.#######.###.#.#######.#####.#.#.####.#.#.#.#.....#.#.#.#...#...#.#.#...#...#...#.#.#...#.#.....#.#.#.......#...#.#.....#.....#...#.....##.#####.###.#####.#.#.#######.#####.#####.#.#.#.#####.#.###.#.#.#####.#.###.###########.#######.######...#.........#...........#.......#...#...#.#.#.#.#.#.....#...#.....#.#.#...#.....#.#...#.#.#.....#.##.#.#.###.###.#############.###.#.#.#.#####.#.#.#.#.#######.#####.#############.#.#.###.#.#.#.###.#.##.#.#.#.#.#...#...#.......#.#...#.#.#.#.#.#.....#.#.#.#.....#...#.........#.....#.........#.#.#.#...####.#.#.#########.#.#####.#####.###.###.#.#.#.#.#.#.#.###.#.###.#.#################.#######.###.#.####.....#...#.#.......#.#.#...#.#...#...#.....#.#.#...#.#.#.#.#...#...#.#...#.......#.....#...#.#.#...####.###.#.#.#######.#.#.###.#.#####.#####.###.#.###.#.#.#.#####.#.#.#.#.#.#.#.###.#.#######.#.#.#.####.......#...........#.......#...#.....#.#.#...#.#.#...#...........#.#...#.#.#.#.....#.#.#.#...#.....########.###########.#.#######.###.#.###.#######.#.###.#.###.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.#.##.......#.#...#.#...#.#.....#...#.#.........#...#...#.#.#...#.......#...#.....#.#.#.#.#...#.#...#.#.##.###.###.#.#.#.#.#.#.###.###.#####.#######.#.###.###.#####.#####.###.#####.###.#####.#.#####.#.###.##...#...#.#.#...#.#.#.#.......#...#.#.......#.....#...#...#.....#...#...#...#.#...#.#.#.#...#.#...#.##.#.#####.#.###########.#########.###.#.#####.#.###.#.#.#########.###.#######.#.###.#.#.#.#######.####.#...#.....#.#.#.#...#...#.#.........#...#...#.#...#.....#.#.....#...#.#.....#.........#...#...#...####.#######.#.#.#.#.###.###.###.#.#.#####.###.#.###.#.#####.#.#.#######.###.#########.#.###.###.#.#.##.#...#.#.....#...#.....#.....#.#.#.#.#.#.....#.#...#.#.......#.#.....#.....#.....#.#.#...#.#.....#.##.#.###.###.###.###.#.#####.###.#####.#.#.#####.#####.#.#.#####.#.#.#.###.#.#.###.#.#.#.#.#.###.######...#.....#.......#.#.......#.........#.....#...#.#.#...#.#...#.#.#.#...#.#...#...#...#.#.#.......#.##.###.###.#.###.###.#.#.###.#####.#.#.#####.#.#.#.#.###.#####.#.#.#####.###.#####.###.###.#.#.###.#.##.#.#...#.#...#.#...#.#.#...#.#.#.#.#.#.....#.#...#.......#.#.....#.....#...#.....#.....#.#.#...#...##.#.#.###.#.#####.#.###.#.###.#.#####.#######.###.###.#####.#####.#######.#.#.#########.#.#.##########...#.#.....#...#.#.#...#...#...#...#.#.....#.#..L#...#...#.....#...#.....#.#.#.........#...#.......####.#.###.###.###.###.###.#.#.#.###.#.#.###.#########.#.#######.#.###.###.#####.#.#.###.#######.###.##.#.#...#.#...#...#...#...#.#.#.......#...#...#...#.......#...#.....#.#.......#.#.#.#.....#.......#.##.#.#####.#.#########.#.###.#.#.#####.#######.#.###.#####.###.#.#.#####.#######.#.###.#####.###.######.....#...............#.#.....#.#...#...........#.......#.....#.#.#...........#.#...#...#.#.#...#...##.###.###.#.###.#####.#############.#.#####.###.###.###.#########.#####.#############.###.###.#.###.##...#.....#...#...#.......#.#.#.#...#...#.#...#...#.#.........#.#.....#.#.#...#.....#.....#...#...#.######.#.#######.#######.#.#.#.#.###.###.#.###.#####.#####.#####.###.#.#.#.#.#####.###.#.#.#.#####.#.##.....#.#.....#.#.#...#.#.#.......#.......#.#.#.#.#...#.#.........#.#...............#.#.#.#.....#...####.###.#.#.#.###.###.#.#######.#######.###.###.#.###.#.#.#############.#.###.#.#####.###.#.##########.#.#...#.#.#.#.#.......#...#.......#...#.........#...#.......#.#.#.....#...#.#...#.....#.#.....#...##.#.###.#.#.###.###.#.#####.###.###########.#####.#########.#.#.#.###.#.#.#.#######.#.#.###.#.#.###.##...#.#...#...#.#...#...#.#...#...#.#.....#.#.....#.......#.#.#.......#.#.#.#.......#.#.....#.#.....######.#.###.#.#.#####.###.#.###.#.#.#.###.#####.#.#.###.#########.#######.###.###.#######.###.###.####.......#...#.......#.......#...#.#.#...#.#...#.#...#...#...#...#.#.....#.....#...#.......#.....#...##.#####.###########.###.###.#.#.###.#.#####.#.#######.#.#.###.#.#####.#.#.#####.###.#.#.#######.#.#.##.#.#.......#.....#.#...#.....#...........#.#.#.....#.#.....#.#.#.#.#.#.#.#.#.....#.#.#.#.#...#.#.#.####.#####.#####.#########.#######.#.###.#####.#.#.###.###.###.#.#.#.#.#.###.#.#.#.#.#####.#.###.######...........#...#.#...#.........#.#...#...#.#.#.#.....#.....#.#.#.#.#.#.......#.#.#.#.#.....#.#.#...######.#####.#.###.#.#############.#######.#.#.###.#.#.#####.###.#.#.###########.#####.#.#.#.#.#.#.#.##.........#...#.#.#.#...#.#.#.....#.........#.#...#.#.#...#...#.....#...#.....#.#...#...#.#...#...#.######.#######.#.#.#.###.#.#.###.#.#.###.#.###.###.#.###.#######.###.#.###.#.#####.###.#####.###.###.##.#.#.#.....#.#.............#...#.#...#.#...#...#.#.......#.#...#...#...#.#...#.....#.#.....#.#...#.##.#.#.###.###.#.#########.#.###.#.#####.#####.#.#.###.#.###.#####.###.#####.###.###########.#.###.####...........#.#.....#.#...#.#.#.#...#.#.#.....#.....#.#.........#.......#...#...#...#.....#.#.#.....########.#.###.###.###.#####.#.#####.#.#.###.#.#######.#######.###.#.###.#.###.#.#.#######.#.#.###.####.......#.#.#...#.....#...#...#.#.#...#.....#...#...#...#.....#.#.#.#.#...#...#...#.....#...........####.#######.#.#.#.###.###.###.#.#.#.#############.###.###.###.#.#.###.#.#.#######.#.#.###.#.#######.##.#.....#.....#...#.#...#...#...#.....#...#.....#.....#.#.#.........#.#.#.#.....#.#.#.#...#.#...#...##.#.#.#.###.#######.#####.#.###.#####.###.#.###.###.###.###.#######.#.###.###.#.#.#.###.###.#.###.####...#.#.#.#.#...#.....#...#.......#.#...#.#.#.#...........#.#.....#...#.....#.#.......#.#...#...#.#.##.#.#.###.#.#.#.#####.#.#.#.#.###.#.#####.###.#.#.#.#######.###.###########.#####.###########.###.#.##.#.#.#...#...#.#.....#.#.#.#.#.#.#...#...#.....#.#.....#...#.........#.....#.........#.........#...######.#.#.#.#.#####.###.###.###.#####.#.###.#######.#.###.###.#.#.#.###########.#.#######.#.#.#.#.#.##.....#.#...#...#.....#.#...#...#...#...........#...#.#.....#.#.#.#.#.#.#.......#.....#...#.#.#.#.#.##.#.###.#######.#.###########.#####.#.###.#.###.###.#####.#.#####.###.#.#.#.###.###.#####.#########.##.#...#...#...#...#.....#.#.....#...#.#...#...#...#.#...#.#.......#.#.....#.#.....#...#.....#...#...############.###.#######.#.###.#####.#################.#####.#.###.#.#.#########.###.#.###.###.#.###.##.........#.......#...#.....#.....#.......#.#.#.#...#.......#.#.#...#.#.#.........#.#.........#.....##.#########.#####.###.#.#####.###.#.###.#.#.#.#.###.#####.#####.###.#.#.#########.#.#####.#.#.###.####.#...#.........#...#.....#.#.#.......#.#.#...........#.#.#.......#...#.#...#...#.#.#...#.#.#.#.....##.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#######.#######.###.#.#.###.#.#.#.###.#.#.#.#.#####.##.#.#...#...#.#.......#.........#.#...#...#.#.#...#.#.............#.#...#...#.#.....#.#...#.#.....#.##.#.#.#######.#.#######.###.#######.###.###.#.###.#.#.#######.#.#####.###.#.#############.#.#######.##...#.#.......#.#.......#.#...#...........#.#.#.#...#...#.#...#...#.#.#.#.#.#...#.....#...#.#...#...####.#.#######.###.#.#####.#.#######.###.#.###.#.#.#######.#####.###.#.#.###.###.###.#######.###.#.####...........#.#...#...#...#...#.#.#.#...#.....#.#.......#.#...#.......#.....#.#...#.#.....#.#.#.#.#.######.#####.#.###.###.#.###.###.#.#######.#####.###.###.#.#.#.#####.###.###.#.###.#.#.###.###.#.#.#.##.#.#.#.....#.......#.....#...#.....#...#.......#...#.......#.#.#...#...#...#.#.#...#.#...#.#.......##.#.###.#.#.#.#####.#####.#.#####.###.###.#.#.#######.#.#####.#.#######.###.#.#.#.###.###.#.###.###.##...#...#.#.#.....#.....#.#.#...........#.#.#.#.#...#.#...#.......#.......#...........#...........#.##.###.###.#.#########.#.#######.#.###.#.###.#.#.#.#.#########.###.#.#.#########.###.#######.###.#.####.....#...#...#.....#.#...#.#...#...#.#.#.#.#.#...#.#...#.....#.#.#.#.....#.#...#.......#.#.#...#.#.##.#####.#####.#.###########.#.#####.#.#.#.###.#.#######.###.###.#.#.#.###.#.#.#####.#.#.#.#######.#.##.#.....#.#.#.#.....#.#.........#...#.#.#...#.......#...#.#.#.....#.#.#...#.#...#...#.#.#.#.#...#...####.#.#.#.#.#######.#.#####.###.#.#.#.###.#######.#####.#.###.#####.#####.#.#########.#.#.#.#.###.#.##.#.#.#.........#.#...........#.#.#.#.#.#...#.....#...#...#.#.#.....#.....#.....#.....#.....#.#...#.##.#####.#.#####.#.###.###.###.#######.#.#.#.#.#.#.#.#####.#.#.###.###.#####.###.#.###.#####.#.#.###.##.......#.#.........#.#...#.....#.........#...#.#...#...........#...#.....#...#...#...#.....#.....#.######################################################################################################';\r\nms=reshape(s14,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9478 % Lambda14 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9478 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n%%\r\n\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n% 15[101x101]/9986/.33s\r\n%Lambdaman 15  optimal solution 9584\r\ns15='######################################################################################################...#.#...#.....#...#.......#...#.#.#.#.#.........#...#.......#.#.#...#...#...#...#.#...#.#.......#.##.###.#.#####.###.#.#####.#.#.###.#.#.#.###.#.#.#.#.###.#######.#.#.#.#.###.#.#.###.#.#.#.#.#.#.###.##.#...#.......#.#.#.......#.#.#.......#.....#.#.#.#.....#...........#...#...#.#.....#.#.#.#.#.#.#...##.###.###.#####.#####.#######.###.#.#####.#.###########.#######.#############.###.###.###.#.#.#####.##.#.#.............#.#.#.#.#.......#...#...#.#.........#.......#...........#...#.#.#.........#.......##.#.#####.###.#####.#.#.#.#.###########.#####.###.#.###.#.#########.###.#.#.###.#.###.###########.#.##...#.....#.....#.....#.....#...#.......#...#...#.#.#.#.#.....#.#.....#.#...#.#.......#.........#.#.####.###.#############.#.#####.###.###.###.#########.#.###.#####.#.###.###.#.#.#.#############.###.####.#.....#.#.#...#...#...........#...#.............#...........#...#.#.#...#.#.#.......#.....#...#...##.#.#####.#.#.###.#######.###.###########.#.#####.###.#.#####.#.#.#.#.###.#.#.###.#.###.#####.########.....#.....#.#.............#.....#.#.....#.#...#.....#...#.#...#...#.#.#.#.#...#.#...........#.....##.###.###.#.#.#.#.#.###.###.###.###.#.#########.#.#.###.#.#.###.#.#.#.#.#####.#####.###.#.###.###.#.##.#.......#.....#.#...#...#.#.....#.#.#...........#.#...#.#.#...#.#.#...#.......#.#.#...#.#.......#.######.#.#.###.#####.#######.#####.#.#.###.#####.#########.#.#########.#.#.###.#.#.#######.#.#.#.######.#.#.#.#...#...#.#...#...#...#.#.#.#.#...#...#.#...#...#...#.....#...#...#...#.........#.#.#.#.....##.#.#.#########.#.###.#.###.#.#.#.#.#.#####.#####.###.#####.###.#####.###########.#.#.###########.####...#.....#.#.#...#.....#...#.#...#.#.#.....#.#.....#.......#.....#...#...#...#.#.#.#.#.#.#.........##.###.###.#.#.#####.#####.#####.###.#.#.#.###.#.#####.#####.#.#.#####.#.#####.#.###.###.#.###.#####.##...#...#.#...#.........#...#...#.....#.#.....#.........#...#.#...#...#.#.#...#.......#...#.#.....#.####.###.###.###.#.#########.#.#########.#############.#.###.#####.#.###.#.###.#####.#.#.###.#####.####.........#.....#.....#...#.#.#.............#.....#...#...#.....#...#.......#.....#.#.#.............####.###.#############.#.#####.#####.#####.#.#.#######.#####.###########.#########.###.#.###.#.#####.##.#.#.....#...#...#.#.#...#.......#.#...#.#.#.....#...#.......#.............#.#...#.#.#...#.#.#...#.##.#######.#.#####.#.#.###.###.#####.###.#.#######.###.#####.#.#######.#######.###.#.#.#.###.#.#.###.##.........#.......#.#.......#.#.....#.#...............#.#.#.#.#.....#.#.#.#...#...#...#.#.#.#.....#.########.#######.###.#####.#####.#####.#.###.#######.###.#.###.###.#.#.#.#.#.#####.#.#.###.#########.##...#...#.............#.#.....#.#.#.....#.......#.#...#.#.#.#.#.#.#.........#...#.#.#.........#.#...##.#.#####.###.#.###.###.#.#.###.#.#.#.###.###.###.#.###.#.#.###.#.#.#####.#.#.#.#.#.#########.#.#.#.##.#.#.....#...#.#...#...#.#.......#.#.#.#.#.#.#.#...#.......#.#...#...#.#.#.#.#...#...#.#...#.....#.####.###.###.#.#.###.###.###.#.#######.#.#.#.###.#######.###.#.#.#.#####.###.#.#.#.#.###.#.###.#.######.......#...#.#.#...........#.#...#.#.#...#.....#.......#...#...#.........#...#.#.#...#.#.....#...#.####.#.#.###.#########.#.#.#.#.###.#.###.#.#.#.#.#.#####.#######.#####.#######.###.###.#.#.#.###.###.##...#.#...#...#...#.#.#.#.#.#.#.......#.#.#.#.#.#...#.....#...#.#.#.#.#.#...#.#.#.....#.#.#.#.#.....##.###.###########.#.#.#######.#####.#####.#####.#####.#.#####.###.#.###.#.###.#.#.###.#.###.#.#.#.####.#...#.#.....#.#.#.#...#.#.....#.#.....#.#.......#...#.......#.....#...#.....#...#.......#.#...#.#.####.#.#.#.###.#.#.#.#.#.#.###.###.###.###.#.###.#.#####.#.#.#.#.#.#.###.#########.###.###.#######.#.##...#.#...#...........#.#.#...#.........#...#...#.#.#...#.#.#...#.#.#.........#...#.....#.#.#.#.#...########.#####.#.###.#####.#.#######.#.###.#.#####.#.###.#.###########.#.###.#.#.#########.#.#.#.###.##.#...#.....#.#.#...#.......#.....#.#.....#...#.#.#.#...#.#.#...#.....#.#...#.#...#.#.#.#.#.#.#.#...##.###.#.#.#######.#.#########.###.###.#####.#.#.#.#.#.#####.###.#.#.#####.#####.###.#.#.###.#.#.#.####.#...#.#.#.#...#.#.............#.#.....#...#.#...#...#...#.....#.#...#.......#.#.........#.........##.#.#.#.###.###.###.###.#.#.###########.#.#####.#####.#.###.###.#.#.#########.#.###.#.#####.#.#.######.#.#.#.#...#.#.....#...#.#...#...#.....#.#...#.........#.#.#.#.#.#...#...#.....#...#.#...#.#.#.#...##.###.#.#.#.#.###.#############.###.#######.###.#.#.###.#.###.#.#.#####.###.###.###.#.#.#######.#.#.##.....#...#...#...#.#.#...#.....#.......#.....#.#.#.#...#...#.#.......#.......#...#.#.......#.....#.####.###.#.###.###.#.#.###.#.###.#########.###.###.#########.#.#.###########.#######.#############.####.#.#...#...#.#...........#...#.........#.#...#.#...#.........#.......#...#...#.#.....#...#.....#...##.#.#####.###.#########.#.###.###.#.###.#.###.#.#.#####.###.###.#.#####.#.###.#.#####.###.#.#######.##...#...#...#.#.........#.#...#.#.#.#.#.....#...#.....#.#...#...#.#.....#.#.........#...............##.#####.#.#########.###.###.###.#####.#.#####.#.###########.#.###.#######.#################.#.#.#.#.##...........#...#...#.#.#.....#.....#.......#.#.#...#.#.#.#.....#.#...........#.......#...#.#.#.#.#.######.#####.###.###.#.###.#.#######.#.#.#.###.###.#.#.#.#.###.#######.###.###.#####.#####.#.##########.........#.#...#.....#.#.#...#.....#.#.#.#.......#.#.#.#.....#.#.......#.#...#.#.#.......#.........############.#.###.#####.###.#####.#####.#######.#####.#.###.#.#.###.###.#####.#.#.###.###.#.###.###.##...#...#.....#.#...#...#.........#.#.#.#...........#...#...#.......#.......#.#.#...#.#.......#...#.####.###.###.#.#.###.#.###.###.#.#.#.#.###.#########.#.###########.###.###.#####.#.###########.########...#.#.....#.#.#.....#.#.#.#.#.#.#...#.....#.#.........#.#.........#.#.......#...#.#.......#.#.#.#.####.#.###.#.###.#.###.#.###.#.###.###.###.#.#.#.###.###.#.###.###.###.###.#.#####.#.#####.#.#.#.#.#.##.#...#...#...#.#.#.#.#...#...#.....#...#.#...#.#...#...#.#...#...#...#...#.#...#.........#.#.......##.#.#.###.#.###.###.###.###########.#.###.#.#########.###.###.#.#.#.###########.#.#########.###.#.####...#.#.#.#.....#.#.........#.#....L#...#.#...#.......#.#.....#.#.#.#.........#...#...#.#.......#...######.#.###.#.###.#######.#.#.#.#####.#.#########.#####.#.#.#####.###.#############.###.###.#####.#.##.#.......#.#.#.....#.....#.........#.#.....#.......#.#...#.#...#.#...#.#.#...........#...#.#.#.#.#.##.###.###.#####.###.#.###########.###.#.#.###.#######.#.#######.###.###.#.###.#.#####.#.#.#.#.#.#.####.......#.#.....#...#...#...........#.#.#.#...........#...#.......#.......#.#.#...#.#...#.#.#.......########.###.#####.#########.###.#.#.#.###############.###.#.###.#######.###.#######.#.#.#.#.##########.........#.#.#.#.......#...#...#.#.........#.....#.......#...#...#...........#.......#.#.#...#.....########.#####.#.#.###.#.#.#####.#######.#.#.###.###.#.###.#.#######.#.#.#.###########.#.#.#.#####.####.......#...#.....#.#.#.....#.....#.....#.#.#.#.....#.#.#.....#...#.#.#.#.....#.......#.#...#.#...#.##.###.#.#.###.#.###.###.#####.#.###.###.#.###.#.#.#.###.###.#.###.#####.#########.#.#######.#.###.#.##.#.#.#.....#.#...#...#...#...#.#.....#.#.....#.#.#...#.....#.#.....#.#.#.#.#.....#...#.#...#.......####.#.#####.#.#.#.###.#.###.#########.#.#.#######.###.#.#.#######.###.#.#.#.###.#######.#.#.#.###.####.#...#.#.#...#.#...#...#.#.#.#.....#.#.#.#...#.#.#...#.#.#.#...#.#.....#.......#.........#...#.#...##.###.#.#.#####.#####.#.#.###.#.#####.#####.###.#.#.#######.###.#.###.#.###.###.#.###.#####.###.###.##.....#...#.#.#.#.....#.#.........#...........#...#.#.#...#.#.#.#...#.#.#.#.#...#.#...#...#...#...#.######.#.###.#.###.#####.#.###.###.#.#.#####.###.#.#.#.###.#.#.#.###.#.#.#.#.###.###.#.#.#.#.###.######.....#...#.#.#.#.#...#.....#.#...#.#...#...#.#.#.#...........#.#.#...#.#.#.#.....#.#.#.#.#.#.#.....####.#####.#.#.#.###.#.###.#####.#.#.#####.###.#.###.#######.#.#.#.#.#.#.#.#.#.#####.#####.#.#.#.#.####.....#...#...#.#...#...#.#.#.#.#.#.....#.#.#.#...#...#...#.#...#.#.#.#...#.#.#.#.....#.....#...#...##.#.#####.###.#.###.#######.#.#############.#.#.#####.#.#.#.#####.#.#########.#.#########.###.#####.##.#...........#.#...#.....#...#.........#.....#.#...#.#.#.......#.......#...........#.#.......#.#.#.##.#.###.#.#.#.#.###.#.###.###.#######.#.#.#.#####.#.#.#######.#####.###.###.#.#####.#.#####.###.#.####.#.#.#.#.#.#...#...#.#.#...#.....#.#.#...#.#.....#.#...#.....#.....#...#...#...#.....#.......#.....##.###.###.#.###.###.###.###.###.###.#######.#.#.###.#####.#.#########.#########.###.#.#.#######.###.##.....#...#...#...#.....#.#...........#...#...#.#.#.#.#...#...#.........#.#.....#...#.#.#.#...#...#.##.#.#.###############.#.#.#.###.###.###.#.#####.#.#.#.###.###.#########.#.#############.#.#.#####.#.##.#.#.....#.......#...#.#...#...#.#...#.#.......#...#.#...#.........#...#...#...#.......#.....#...#.##.#######.#.#####.#.###.#.#.###.#.###########.###.#.#.###.#######.#.#.#####.###.#######.#.###.#####.##.#.#...........#.#.#...#.#...#...#.#.......#...#.#.....#.#.#.....#.........#.#.#...#.#...#.#.....#.##.#.###.###.#.#.###.#######.###.#.#.###.#.###.#####.#######.#.###.###.#####.#.#.#.#.#.###.#.#####.#.##.....#...#.#.#.......#...#.#.#.#.......#...#...#.....#.#.#.#.#.#.#.....#.#.#.....#...#.#.#.....#...##.#.#.###.###.###.#.###.#.#.#.###########.###########.#.#.#.###.#.#.#.###.#######.#####.#.#.###.#.#.##.#.#...#.#...#...#.....#.....#...#.#.......#.#.......#.#.....#...#.#.........#.......#...#...#.#.#.####.#######.#########.#####.#####.#.#.#####.#.#.#######.#.###.###.###.#.#####.#.#######.###.###.###.##...#.....#...#.#...#.....#.........#...#...............#.#.#.....#...#.#.#...#...#.........#.#.#...####.#.#.###.#.#.###.#.#.#.#####.#.###.###########.#.#.#####.#.#########.#.#.###.#.###.###.#.#.#.###.##...#.#.....#.#...#.#.#.#.#.#...#.#.....#...#.....#.#.....#...#.......#...#.#...#.#...#...#.#.#...#.##.#####.#.#.#.#.###.#.#####.#.#####.#.###.#####.###.#.#.#.#####.#.###.#.###.#.#####.#.#.#####.#.#.####.....#.#.#.#.....#.........#.....#.#...#.......#...#.#.#.....#.#...#...#.........#.#.#...#.....#...######################################################################################################';\r\nms=reshape(s15,101,101)';\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\n%for i=1:nr % Display maze numeric\r\n% fprintf('%i',m(i,:));fprintf('\\n');\r\n%end\r\n\r\nztic=tic;\r\nv = crawler_fill(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\n%fprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=9584 % Lambda15 crawler\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=9584 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n %for i=1:nr % Display maze numeric\r\n % fprintf('%i',mc(i,:));fprintf('\\n');\r\n %end\r\nend\r\n\r\nassert(valid)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-17T17:24:01.000Z","deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-17T16:18:16.000Z","updated_at":"2025-12-12T15:14:10.000Z","published_at":"2024-07-17T17:24:01.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eShown is Lambdaman4 with a best known solution is 348 U/R/D/L commands by completing the lower left before lower right. This challenge requires an Optimal Crawler-Backfill method for paths width==1 and there are no loops.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve multiple Lamdaman mazes by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements an Optimal Crawler-Backfill with recursions for speed where only one choice possible. Optimal checks all viable move directions from an intersection and selects shortest to fill. Fill smallest branch first to minimize total length. The challenge is to make a smaller optimal crawler.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMaze#/Crawler/OptimalCrawler \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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/15/15 2/33/26 4/394/348 11/9988/9622 12/9992/9626 13/9976/9562 14/9994/9478 15/9986/9584\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThese are believed to be optimal solutions. Post in comments if any are beat.\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":60623,"title":"ICFP2024 007: Lambdaman 1, 2, 3 Breadth Solver","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, respectively.\r\n\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\nThis challenge is to solve Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.","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: 315px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 157.5px; transform-origin: 407px 157.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 356.5px 8px; transform-origin: 356.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 332px 8px; transform-origin: 332px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, 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: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\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: 379.5px 8px; transform-origin: 379.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pathbest = Lambdaman_123(m)\r\n% Maze 1 solves in 15 so max states is 4^15=1.07e9\r\n% Each depth loop creates all new legal states from prior depth states\r\n% Maze 3 Fails miserably for pure breadth so key throat points checked for uneaten cheese\r\n%History of prior states maintained to eliminate duplicated states\r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr];\r\n bn2=nnz(m(:)==2);\r\n stateh=zeros(20000,nr*nc,'int8');\r\n spath=zeros(20000,15,'uint8');\r\n c2=nnz(m(:)==2);\r\n statec2=ones(20000,1)*c2;\r\n stateh(1,:)=m(:);\r\n sptr=1; eptr=1;\r\n enptr=eptr;\r\n depth=0;\r\n \r\n m3=nr*nc==72; % Hack for Lambdaman3\r\n \r\n while c2\u003e0\r\n  depth=depth+1;\r\n  fprintf('Depth:%i sptr:%i eptr:%i\\n',depth,sptr,eptr)\r\n  for hptr=sptr:eptr\r\n   ms=stateh(hptr,:);\r\n   \r\n   Lidx=find(ms==1);\r\n   \r\n   if m3 % Hack for Lambdaman3: Check chokepoints for completion\r\n    if Lidx==26 \u0026\u0026 nnz(ms([62 52 34])==2),continue;end %Lower grp\r\n    if Lidx==26 \u0026\u0026 ms(17)==3,continue;end % turn aroud\r\n    if Lidx==12 \u0026\u0026 nnz(ms([24 22 32 14])==2),continue;end %Left grp\r\n    if Lidx==12 \u0026\u0026 ms(11)==3,continue;end % turn aroud\r\n    if Lidx==20 \u0026\u0026 ms(29)==3,continue;end % turn aroud\r\n   end\r\n   \r\n   Cadj=ms(adj+Lidx);\r\n   msn=ms;\r\n   msn(Lidx)=3; %Lambdaman will move\r\n   for i=1:4 % UDLR\r\n    if Cadj(i)==0,continue;end % Ignore into wall Cadj==0 movement\r\n     Lidxn=Lidx+adj(i);\r\n     msn(Lidxn)=1;\r\n     \r\n     c2=nnz(msn==2);\r\n     ptr1=find(msn==2,1,'first');\r\n     ptr2=find(msn==2,1,'last');\r\n     cvec=statec2(1:enptr)==c2; % Reduce vector check only to c2 qty vectors\r\n     cvec=cvec \u0026 stateh(1:enptr,Lidxn)==1 \u0026 stateh(1:enptr,ptr1)==2 \u0026 stateh(1:enptr,ptr2)==2;\r\n     if nnz(cvec) % Perform a check\r\n      if nnz(sum(abs(stateh(cvec,:)-msn),2)==0) %23K/1.9s Pre-exist state check\r\n        msn(Lidxn)=ms(Lidxn); % Reset msn\r\n       continue; %Abort when create an existing prior state\r\n      end\r\n     end\r\n     \r\n     enptr=enptr+1; % new valid state\r\n     spath(enptr,:)=spath(hptr,:);\r\n     spath(enptr,depth)=i; % UDLR as 1 2 3 4\r\n     stateh(enptr,:)=msn;\r\n     msn(Lidxn)=ms(Lidxn); % Reset msn\r\n     statec2(enptr)=c2;\r\n          \r\n     if c2==0,break;end\r\n   end % UDLR\r\n   if c2==0\r\n    eptr=enptr;\r\n    break;\r\n   end\r\n   \r\n  end % hptr\r\n  sptr=eptr+1; % update wave\r\n  eptr=enptr;\r\n   \r\n end % while  c2\u003e0\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(spath(eptr,1:depth));\r\n fprintf('BestPath:');fprintf('%s',pathbest);fprintf('\\n')\r\n  \r\nend %maze_breadth","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 1  optimal solution L15 LLLDURRRUDRRURR\r\nms=['###.#...'\r\n    '...L..##'\r\n    '.#######'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==15\r\n  valid=1;\r\n else\r\n  fprintf('Length 15 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 2  optimal solution L26 RDURRDDRRUUDDLLLDLLDDRRRUR\r\nms=['L...#.'\r\n    '#.#.#.'\r\n    '##....'\r\n    '...###'\r\n    '.##..#'\r\n    '....##'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\n\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==26\r\n  valid=1;\r\n else\r\n  fprintf('Length 26 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 3  optimal solution L40 DRDRLLLUDLLUURURLLURLUURRDRDRDRDUUUULDLU\r\nms=[  '......'\r\n      '.#....'\r\n      '..#...'\r\n      '...#..'\r\n      '..#L#.'\r\n      '.#...#'\r\n      '......'];\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\nztic=tic;\r\nv = Lambdaman_123(m);\r\ntoc(ztic)\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)==40\r\n  valid=1;\r\n else\r\n  fprintf('Length 40 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-14T03:49:34.000Z","deleted_by":null,"deleted_at":null,"solvers_count":12,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-13T14:56:14.000Z","updated_at":"2025-12-08T21:14:18.000Z","published_at":"2024-07-14T03:49:34.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 1, 2, and 3 mazes are small matrices L at various indices,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman1, 2, and 3 solutions take 15, 26, and 40 U/R/D/L commands, 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\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lamdaman mazes 1, 2 and 3 by eating all the cheese via a char path of UDLR, with a common program smaller than the template. The template implements a breadth first search with prior state check.  Optimal length solutions are required.\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":60603,"title":"ICFP2024 003: Lambdaman 5","description":"The ICFP2024 contest was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\nThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\r\nB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  The usage B$ v\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\r\nThe big hint here is that ICFP O is U, \u003e is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\r\n\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nI will be posting the entire ICFP2024 contest challenges and best solutions.\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: 728.767px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 364.383px; transform-origin: 407px 364.383px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 302px 8px; transform-origin: 302px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 372.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 186px 8px; transform-origin: 186px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 230.267px; 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 115.133px; transform-origin: 391px 115.133px; 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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.....########...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e....#...........\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e...#..######....\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e..#..#......#...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#..#...##...#..\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#..#..#L.#...#.\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e.#...#....#...#.\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e..#...####...#..\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e...#........#...\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e....########....\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: 64px 8px; transform-origin: 64px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 64px 8.5px; transform-origin: 64px 8.5px; \"\u003e................\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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\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: 375px 8px; transform-origin: 375px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  The usage B$ v\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\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: 377px 8px; transform-origin: 377px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe big hint here is that ICFP O is U, \u0026gt; is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 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.75px; text-align: left; transform-origin: 384px 10.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; perspective-origin: 0px 8.5px; transform-origin: 0px 8.5px; \"\u003e\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 235.5px 8px; transform-origin: 235.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eI will be posting the entire ICFP2024 contest challenges and best solutions.\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 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Lambdaman5(m)\r\n% m is a maze where 2 is cheese to eat, 1 is Lambdaman the token being moved, and\r\n% 0 is a wall\r\n%v is path moved using UDLR characters for Up, Down, Left, and Right\r\n%Running into a wall or going off maze reults in no movement\r\n\r\n%A correct answer for Lambdaman5 is a string of about 220 RDLU characters\r\n%Answers may vary wildly\r\n v='RDLLLU';\r\nend\r\n\r\n%Lambdaman 5 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nSlllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\n\r\nSolution\r\nB$ L\" B. S3/,6%},!-\"$!-!.Z} B$ v\" B$ v\" B$ v\" SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO \r\nL! B. B. v! v! v! \r\n\r\nwhich defines the function L\" as triple(x) from B$ L\" and L! B. B. v! v! v!  \r\nThe usage B$ v\" invokes triple(x) \r\nthus the main becomes triple(triple(triple(SFOOLL\u003e\u003eLL\u003eFO\u003e\u003e\u003eFFL\u003e\u003e\u003eFFFFOFOFFOLLLLOFOLO) )) \r\nor 27 repeats of the string.\r\nThe big hint here is that ICFP O is U, \u003e is D, F is L, and L is R when decrypted. \r\nRunning into walls causes no movement and since this is a spiral maze there appears to be \r\na short sequence that spans all the cheesy bits when repeated.  \r\nTo me it was nuts that someone devised this short sequence.\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}\r\n\r\n","test_suite":"%%\r\nvalid=0;\r\n%   # Wall 0   L lambdaman 1,   . Cheese 2,   \r\n%11x16\r\nms=['.....########...'\r\n'....#...........'\r\n'...#..######....'\r\n'..#..#......#...'\r\n'.#..#...##...#..'\r\n'.#..#..#L.#...#.'\r\n'.#...#....#...#.'\r\n'..#...####...#..'\r\n'...#........#...'\r\n'....########....'\r\n'................'];\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\nfprintf('\\n');\r\n\r\nv = Lambdaman5(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman start point\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n%mc\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\n.....########...\r\n....#...........\r\n...#..######....\r\n..#..#......#...\r\n.#..#...##...#..\r\n.#..#..#L.#...#.\r\n.#...#....#...#.\r\n..#...####...#..\r\n...#........#...\r\n....########....\r\n................\r\n%}","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-10T06:39:55.000Z","deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-10T05:41:35.000Z","updated_at":"2025-12-16T01:40:53.000Z","published_at":"2024-07-10T06:39:55.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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June 29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 5 maze is a 11x16 matrix L near middle. Points are '#' wall and '.' a cheese bit. Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLambdaman 5 was given as an ICFP encrypted text String: Slllllaaaaaaaalll~llllalllllllllll~lllallaaaaaallll~llallallllllalll~lallalllaalllall~lallallaFlalllal~lalllallllalllal~llalllaaaalllall~lllallllllllalll~llllaaaaaaaallll~llllllllllllllll~\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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e.#..#..#L.#...#.\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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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=\\\"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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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\u003eThe contest's best Lambdaman5 solution was written in ICFP to reduce length versus ~150 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ L\\\" B. S3/,6%},!-\\\"$!-!.Z} B$ v\\\" B$ v\\\" B$ v\\\" SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO L! B. B. v! v! v! which defines the function L\\\" as triple(x) from B$ L\\\" and L! B. B. v! v! v!  The usage B$ v\\\" invokes triple(x) thus the main becomes triple(triple(triple(SFOOLL\u0026gt;\u0026gt;LL\u0026gt;FO\u0026gt;\u0026gt;\u0026gt;FFL\u0026gt;\u0026gt;\u0026gt;FFFFOFOFFOLLLLOFOLO) )) or 27 repeats of the string.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 big hint here is that ICFP O is U, \u0026gt; is D, F is L, and L is R when decrypted. Running into walls causes no movement and since this is a spiral maze there appears to be a short sequence that spans all the cheesy bits when repeated.  To me it was nuts that someone devised this short sequence.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\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\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI will be posting the entire ICFP2024 contest challenges and best solutions.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\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":60628,"title":"ICFP2024 008: Lambdaman4 Breadth Solver","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\r\n\r\nThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.","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: 675px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 337.5px; transform-origin: 407px 337.5px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 317.5px 8px; transform-origin: 317.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 381.5px 8px; transform-origin: 381.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 420px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 210px; text-align: left; transform-origin: 384px 210px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 560px;height: 420px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\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.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pathbest = Lambdaman4_Breadth(m)\r\n% Maze 4 Fails miserably for pure breadth so key throat points checked for uneaten cheese\r\n% Work maze 4 via smallest cul-de-sac from any multi-choice path node\r\n%History of prior states maintained to eliminate duplicated states\r\n [nr,nc]=size(m);\r\n adj=[-1 1 -nr nr];\r\n %bn2=nnz(m(:)==2);\r\n stateh=zeros(95000,nr*nc,'int8');\r\n spath=zeros(95000,15,'uint8');\r\n c2=nnz(m(:)==2);\r\n statec2=ones(95000,1)*c2;\r\n stateh(1,:)=m(:);\r\n sptr=1; eptr=1;\r\n enptr=eptr;\r\n depth=0;\r\n \r\n %m3=nr*nc==72; % Hack for Lambdaman3\r\n m4=nr*nc==21*21;\r\n \r\n tic;\r\n while c2\u003e0\r\n  depth=depth+1;\r\n  if mod(depth,5)==0\r\n   fprintf('Depth:%i sptr:%i eptr:%i  Time:%.1f\\n',depth,sptr,eptr,toc)\r\n  end\r\n  for hptr=sptr:eptr\r\n   ms=stateh(hptr,:);\r\n   \r\n   Lidx=find(ms==1);\r\n   \r\n%    if m3 % Hack for Lambdaman3: Check chokepoints for completion\r\n%     if Lidx==26 \u0026\u0026 nnz(ms([62 52 34])==2),continue;end %Lower grp\r\n%     if Lidx==26 \u0026\u0026 ms(17)==3,continue;end % turn aroud\r\n%     if Lidx==12 \u0026\u0026 nnz(ms([24 22 32 14])==2),continue;end %Left grp\r\n%     if Lidx==12 \u0026\u0026 ms(11)==3,continue;end % turn aroud\r\n%     if Lidx==20 \u0026\u0026 ms(29)==3,continue;end % turn aroud\r\n%    end\r\n   \r\n% Lambdaman4\r\n% BR first L358  5.6s\r\n% BL first L348 11.3s\r\n% based on distance back to node after filling, max dist from node?\r\n    if m4 % Hack for Lambdaman4: Check chokepoints for completion\r\n    if Lidx==152 \u0026\u0026 nnz(ms([65 107 113 195])==2),continue;end %TL\r\n    if Lidx==152 \u0026\u0026 ms(5+7*21-1)==3,continue;end % turn aroud\r\n    \r\n     %if Lidx==172 \u0026\u0026 ms(401)==2,continue;end % TR\r\n     %if Lidx==276 \u0026\u0026 ms(317)==2,continue;end % TR\r\n     %if Lidx==360 \u0026\u0026 ms(403)==2,continue;end % TR\r\n    if Lidx==172 \u0026\u0026 nnz(ms([317 401 403])==2),continue;end %TL\r\n    if Lidx==172 \u0026\u0026 ms(193)==3,continue;end %Turn around\r\n    \r\n    if (Lidx==240 || Lidx==260) \u0026\u0026 ms(197)==2,continue;end  % Force shortest first\r\n\r\n%Go BL First\r\n    if Lidx==281 \u0026\u0026 ms(27)==2,continue;end %Abort BR before BL\r\n    \r\n     if Lidx==202 \u0026\u0026 ms(157)==2,continue;end % Mid BL LU Big slow down without\r\n     if Lidx==204 \u0026\u0026 ms(245)==2,continue;end % Mid BL\r\n    if Lidx==206 \u0026\u0026 nnz(ms([27 35 41 77 83  167])==2),continue;end % BL\r\n    \r\n    if Lidx==162 \u0026\u0026 ms(167)==2,continue;end % BL\r\n    if Lidx==118 \u0026\u0026 nnz(ms([77 41 83])==2),continue;end % BL\r\n    if Lidx==54 \u0026\u0026 nnz(ms([71 115])==2),continue;end % BL L 8,4 10,6\r\n    \r\n    if Lidx==96 \u0026\u0026 ms(54)==3 \u0026\u0026 nnz(ms([27 35])==2),continue;end % Missed 6,2 or 14,2\r\n    if Lidx==204 \u0026\u0026 ms(27)==3 \u0026\u0026 nnz(ms([209 251 293])==2),continue;end % Missed 20 [10 12 14]\r\n\r\n    \r\n    if Lidx==280 \u0026\u0026 ms(323)==2,continue;end % BR\r\n      if Lidx==281 \u0026\u0026 ms(280)==3,continue;end % turn around\r\n      \r\n     if Lidx==364 \u0026\u0026 ms(405)==2,continue;end % BR\r\n       if Lidx==363 \u0026\u0026 ms(364)==3,continue;end % turn around\r\n     if Lidx==368 \u0026\u0026 ms(325)==2,continue;end % BR\r\n       if Lidx==367 \u0026\u0026 ms(368)==3,continue;end % turn around\r\n     if Lidx==388 \u0026\u0026 nnz(ms([373 371])==2),continue;end %BR\r\n     if Lidx==286 \u0026\u0026 nnz(ms([283 243])==2),continue;end % BR 10.7s\r\n        \r\n   end % BL first\r\n   \r\n   \r\n   \r\n   Cadj=ms(adj+Lidx);\r\n   msn=ms;\r\n   msn(Lidx)=3; %Lambdaman will move\r\n   for i=1:4 % UDLR\r\n    if Cadj(i)==0,continue;end % Ignore into wall Cadj==0 movement\r\n     Lidxn=Lidx+adj(i);\r\n     msn(Lidxn)=1;\r\n     \r\n     c2=nnz(msn==2);\r\n     ptr1=find(msn==2,1,'first');\r\n     ptr2=find(msn==2,1,'last');\r\n     cvec=statec2(1:enptr)==c2; % Reduce vector check only to c2 qty vectors\r\n     cvec=cvec \u0026 stateh(1:enptr,Lidxn)==1 \u0026 stateh(1:enptr,ptr1)==2 \u0026 stateh(1:enptr,ptr2)==2;\r\n     if nnz(cvec) % Perform a check\r\n      if nnz(sum(abs(stateh(cvec,:)-msn),2)==0) %23K/1.9s Pre-exist state check\r\n        msn(Lidxn)=ms(Lidxn); % Reset msn\r\n       continue; %Abort when create an existing prior state\r\n      end\r\n     end\r\n     \r\n     enptr=enptr+1; % new valid state\r\n     spath(enptr,:)=spath(hptr,:);\r\n     spath(enptr,depth)=i; % UDLR as 1 2 3 4\r\n     stateh(enptr,:)=msn;\r\n     msn(Lidxn)=ms(Lidxn); % Reset msn\r\n     statec2(enptr)=c2;\r\n          \r\n     if c2==0,break;end\r\n   end % UDLR\r\n   if c2==0\r\n    eptr=enptr;\r\n    break;\r\n   end\r\n   \r\n  end % hptr\r\n  sptr=eptr+1; % update wave\r\n  eptr=enptr;\r\n   \r\n end % while  c2\u003e0\r\n \r\n UDLR='UDLR';\r\n pathbest=UDLR(spath(eptr,1:depth));\r\n fprintf('BestPath:');fprintf('%s',pathbest);fprintf('\\n')\r\n  \r\nend","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\n%Lambdaman 4  optimal solution L348 DDLLRRUULLUUUUDDDDLLUULLUURRLLDDRRDDRRRRRRLLUUUURRRRRRDDRRRRUURRLLDDRRLLLLLLUURRLLLLLLLLDDRRRRDDDDLLRRDDLLDDLLUUDDRRDDRRLLDDLLDDDDUUUUUULLDDDDDDLLRRUULLLLUURRUUDDLLDDDDUURRRRUUUUUULLUUUUDDRRLLDDLLUUUUUUDDDDDDDDUURRRRDDRRDDRRDDDDUURRDDUURRDDUULLLLUUUUUUUURRUURRRRLLUURRRRRRLLDDRRDDDDDDDDLLRRUULLRRUUUULLLLRRDDLLLLUUDDLLRRDDRRDDLLLLRRRRDDDDRRRRLLUURR\r\n ms=[ ...\r\n'...#.#.........#...'\r\n'.###.#.#####.###.##'\r\n'...#.#.....#.......'\r\n'##.#.#.###.########'\r\n'.#....L..#.#.......'\r\n'.#####.###.#.###.##'\r\n'.#.#...#.......#...'\r\n'.#.#######.#######.'\r\n'.#...#.#...#.#.....'\r\n'.#.###.#.###.###.#.'\r\n'.....#...#.......#.'\r\n'.###.###.###.#####.'\r\n'.#.#...#...#...#...'\r\n'##.#.#.#.#####.###.'\r\n'...#.#...#.....#...'\r\n'.###.#.#.#####.####'\r\n'.....#.#.....#.#...'\r\n'.###.#.#.#.#.#.#.##'\r\n'.#...#.#.#.#.#.....'];\r\n\r\n[nr,nc]=size(ms);\r\nmb=ones(nr,nc)*2; %Cheese bits are 2.\r\nmb(ms=='#')=0; % Wall\r\nmb(ms=='L')=1; % Landaman, start point\r\nm=zeros(nr+2,nc+2);\r\nm(2:end-1,2:end-1)=mb; %Wall surrounded maze\r\n[nr,nc]=size(m);\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nztic=tic;\r\nv = Lambdaman4_Breadth(m);\r\n\r\nfprintf('Answer Length: %i  Time:%.2f\\n',length(v),toc(ztic));\r\nfprintf('Path:');fprintf('%s',v);fprintf('\\n')\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\n[r,c]=find(m==1); % Lambdaman\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n if length(v)\u003c=348\r\n  valid=1;\r\n else\r\n  fprintf('Length \u003c=348 required. Given length:%i\\n',length(v));\r\n end\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nzmap=[0 0 0;1 0 0;0 1 0;0 0 1]; % maps to 1:4\r\nfigure;image(m+1);colormap(zmap);axis equal;axis tight\r\n\r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-15T04:13:17.000Z","deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-15T03:21:20.000Z","updated_at":"2024-07-15T04:13:17.000Z","published_at":"2024-07-15T04:11: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\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 Lambdaman 4 maze is medium size,21x21, L near top left,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2. Encircling Walls are added to all mazes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best known Lambdaman4 solution is 348 U/R/D/L commands by completing the lower left before lower right.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003eThis challenge is to solve Lamdaman maze 4 by eating all the cheese via a char path of UDLR, with a program smaller than the template. The template implements a breadth first search with prior state check and a Hack specifically for Maze 4.  Known suspected Optimal length solution of 348  or better required. This maze has no loops but multiple cul-de-sacs. Fill smallest branch first to minimize total length.\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":60598,"title":"ICFP2024 004: Lambdaman 10","description":"The ICFP2024 contest was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\r\nThe ICFP Language is based on Lambda Calculus.\r\nThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \r\nThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\r\nThe puzzle was given in ICFP to produce the maze text string. \r\nB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"   in this language F=\u003eL, l=\u003e., ~=\u003eLineFeed, IR means Integer 49, IS is 50\r\nThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\r\nThe contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\r\nB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u003e I8\r\nThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\r\nThe ICFP competition is more about manual solving optimizations for each unique problem.\r\n Lambdaman21 was solved by Thirteen Team using tools. ThirteenTeam youtube ICFP2024\r\nThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.","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: 544px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 272px; transform-origin: 407px 272px; 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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/task.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP2024 contest\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: 300px 8px; transform-origin: 300px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\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: 14.5px 8px; transform-origin: 14.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2024.github.io/icfp.html\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP Language\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: 40.5px 8px; transform-origin: 40.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is based on \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://en.wikipedia.org/wiki/Lambda_calculus\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eLambda Calculus\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: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\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: 369.5px 8px; transform-origin: 369.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=2 \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: 357.5px 8px; transform-origin: 357.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\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: 195px 8px; transform-origin: 195px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe puzzle was given in ICFP to produce the maze text string. \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: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\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: 354px 8px; transform-origin: 354px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\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: 360px 8px; transform-origin: 360px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u0026gt; I8\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: 371.5px 8px; transform-origin: 371.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\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: 285.5px 8px; transform-origin: 285.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP competition is more about manual solving optimizations for each unique problem.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 100px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 50px; text-align: left; transform-origin: 384px 50px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 100px;height: 100px\" src=\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\" data-image-state=\"image-loaded\" width=\"100\" height=\"100\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-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.5px 8px; transform-origin: 182.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=Xcm3S9VlqqY\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eThirteenTeam youtube ICFP2024\u003c/span\u003e\u003c/span\u003e\u003c/a\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 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v=Lambdaman10(m)\r\n%Simple solver going donw/up columns based upon apriori knowledge of wall structure.\r\n%\r\n%m wall-0  L-1  Cheezy-2  Empty-3\r\n v='';\r\n [nr,nc]=size(m);\r\n [tr,tc]=find(m==1);\r\n%Process Lambda10\r\n\r\n%'L..........#..........#..........#..........#.....' top\r\n%'.....#..........#..........#..........#..........#'\r\n%'..........#..........#..........#..........#......'\r\n\r\n%'....#..........#..........#..........#..........#.'  bottom\r\n%'.........#..........#..........#..........#.......'\r\n%'...#..........#..........#..........#..........#..'];\r\n\r\n%Down odd\r\n% Obstacle - go RDDL , special bottom cases \r\n%Up Even\r\n% Obstacle - go LUUR , special top cases\r\n\r\nwhile nnz(m==2) % Any remaining cheezy bits\r\n%Down odd\r\n while tr\u003cnr\r\n  % 'D'\r\n  m(tr,tc)=3;\r\n  if m(tr+1,tc)\u003e0 % 'D'\r\n   tr=tr+1;m(tr,tc)=1;v=[v 'D'];\r\n  else % wall \r\n   if tr==nr-1 %RD\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr+1;m(tr,tc)=1;v=[v 'D'];\r\n   else % RDDL\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tc=tc-1; m(tr,tc)=1;v=[v 'L'];\r\n   end\r\n  end\r\n end % tr\r\n \r\n %tr=nr\r\n if mod(tc,2)==1 % sitting at (nr,odd) \r\n   if m(nr,tc+1)\u003e0 % shift right\r\n    % 'R'\r\n    m(tr,tc)=3;\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   else % madj r is a wall (nr,tc+1)\r\n    %need to go up and right to get to even (nr-1,even)\r\n    % 'UR'\r\n    m(tr,tc)=3;\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n end %mod(tc,2)==1  odd column\r\n\r\n%Up Even\r\n while tr\u003e1  % case tr==2 and tr==1 has a wall?\r\n  % 'U'\r\n  m(tr,tc)=3;\r\n  if m(tr-1,tc)\u003e0 % 'U'\r\n   tr=tr-1;m(tr,tc)=1;v=[v 'U'];\r\n  else % wall\r\n   if tr==2 %RU\r\n    tc=tc+1; m(tr,tc)=3;v=[v 'R'];\r\n    tr=tr-1;m(tr,tc)=1;v=[v 'U'];\r\n   else % LUUR\r\n    tc=tc-1; m(tr,tc)=3;v=[v 'L'];\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tr=tr-1;m(tr,tc)=3;v=[v 'U'];\r\n    tc=tc+1; m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n  end\r\n end % tr \r\n \r\n if nnz(m==2)==0,break;end\r\n \r\n %tr=1\r\n if mod(tc,2)==0 % sitting at (1,even) \r\n   if m(1,tc+1)\u003e0 % shift right\r\n    % 'R'\r\n    m(tr,tc)=3;\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   else % madj r is a wall (nr,tc+1)\r\n    %need to go down and right to get to odd (2,odd)\r\n    % 'DR'\r\n    m(tr,tc)=3;\r\n    tr=tr+1;m(tr,tc)=3;v=[v 'D'];\r\n    tc=tc+1;m(tr,tc)=1;v=[v 'R'];\r\n   end\r\n end %mod(tc,2)==1  odd column\r\nend % while nnz(m==2)\r\n\r\nend % Lambdaman10\r\n\r\n%Lambdaman 10 ICFP dataset and optimal solution\r\n%{\r\nMaze\r\nhttps://github.com/codingteam/icfpc-2024/blob/master/data/lambdaman/lambdaman10.glx\r\nB. SF B$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\" B+ v# I\" I\"\r\n\r\nSolution\r\nB$ B$ L$ B$ v$ v$ L# L\" ? B= v\" Id S3/,6%},!-\"$!-!.VU} B. B$ B$ v# v# B% B* v\" I9 I,2X BT I\" BD B% v\" I% SFOL\u003e I8\r\n\r\n%}\r\n\r\n%ICFP Language\r\n%{\r\nICFP language\r\nAn Interstellar Communication Functional Program (ICFP) consists of a list of space-separated tokens. \r\nA token consists of one or more printable ASCII characters, from ASCII code 33 ('!') \r\nup to and including code 126 ('~'). In other words, there are 94 possible characters, \r\nand a token is a nonempty sequence of such characters.\r\n\r\nThe first character of a token is called the indicator, and determines the type of the token. \r\nThe (possibly empty) remainder of the token is called body. The different token types are \r\nexplained in the next subsections.\r\n\r\nBooleans\r\nindicator = T and an empty body represents the constant true, and indicator = F and an \r\nempty body represents the constant false.\r\n\r\nIntegers\r\nindicator = I, requires a non-empty body.\r\n\r\nThe body is interpreted as a base-94 number, e.g. the digits are the 94 printable ASCII characters\r\n with the exclamation mark representing 0, double quotes 1, etc. \r\nFor example, I/6 represent the number 1337.\r\n\r\nStrings\r\nindicator = S\r\n\r\nThe Cult of the Bound variable seems to use a system similar to ASCII to encode characters, \r\nbut ordered slightly differently. Specifically, ASCII codes 33 to 126 from the body can be \r\ntranslated to human readable text by converting them according to the following order:\r\n\r\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`|~\u003cspace\u003e\u003cnewline\u003e\r\nHere \u003cspace\u003e denotes a single space character, and \u003cnewline\u003e a single newline character. \r\nFor example, SB%,,/}Q/2,$_ represents the string \"Hello World!\".\r\n\r\nUnary operators\r\nindicator = U, requires a body of exactly 1 character long, and should be followed by an ICFP\r\nwhich can be parsed from the tokens following it.\r\n\r\nCharacter\tMeaning\tExample\r\n-\tInteger negation\tU- I$ -\u003e -3\r\n!\tBoolean not\tU! T -\u003e false\r\n#\tstring-to-int: interpret a string as a base-94 number\tU# S4%34 -\u003e 15818151\r\n$\tint-to-string: inverse of the above\tU$ I4%34 -\u003e test\r\nThe -\u003e symbol in this table should be read as \"will evaluate to\", see Evaluation.\r\n\r\nBinary operators\r\nindicator = B, requires a body of exactly 1 character long, and should be followed by two ICFPs \r\n(let's call them x and y).\r\n\r\nCharacter\tMeaning\tExample\r\n+\tInteger addition\tB+ I# I$ -\u003e 5\r\n-\tInteger subtraction\tB- I$ I# -\u003e 1\r\n*\tInteger multiplication\tB* I$ I# -\u003e 6\r\n/\tInteger division (truncated towards zero)\tB/ U- I( I# -\u003e -3\r\n%\tInteger modulo\tB% U- I( I# -\u003e -1\r\n\u003c\tInteger comparison\tB\u003c I$ I# -\u003e false\r\n\u003e\tInteger comparison\tB\u003e I$ I# -\u003e true\r\n=\tEquality comparison, works for int, bool and string\tB= I$ I# -\u003e false\r\n|\tBoolean or\tB| T F -\u003e true\r\n\u0026\tBoolean and\tB\u0026 T F -\u003e false\r\n.\tString concatenation\tB. S4% S34 -\u003e \"test\"\r\nT\tTake first x chars of string y\tBT I$ S4%34 -\u003e \"tes\"\r\nD\tDrop first x chars of string y\tBD I$ S4%34 -\u003e \"t\"\r\n$\tApply term x to y (see Lambda abstractions)\t\r\nIf\r\nindicator = ? with an empty body, followed by three ICFPs: the first should evaluate to a boolean,\r\nif it's true then the second is evaluated for the result, else the third. For example:\r\n\r\n? B\u003e I# I$ S9%3 S./     evaluates to no.\r\n\r\nLambda abstractions\r\nindicator = L is a lambda abstraction, where the body should be interpreted as a base-94 number \r\nin the same way as integers, which is the variable number, and it takes one ICFP as argument. \r\nindicator = v is a variable, with again a body being the base-94 variable number.\r\n\r\nWhen the first argument of the binary application operator $ evaluates to a lambda abstraction, \r\nthe second argument of the application is assigned to that variable. For example, the ICFP\r\n\r\nB$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK\r\nrepresents the program (e.g. in Haskell-style)\r\n\r\n((\\v2 -\u003e \\v3 -\u003e v2) (\"Hello\" . \" World!\")) 42\r\nwhich would evaluate to the string \"Hello World!\".\r\n\r\nEvaluation\r\nThe most prevalent ICFP messaging software, Macroware Insight, evaluates ICFP messages \r\nusing a call-by-name strategy. This means that the binary application operator is non-strict; \r\nthe second argument is substituted in the place of the binding variable \r\n(using capture-avoiding substitution). If an argument is not used in the body \r\nof the lambda abstraction, such as v3 in the above example, it is never evaluated. \r\nWhen a variable is used several times, the expression is evaluated multiple times.\r\n\r\nFor example, evaluation would take the following steps:\r\n\r\nB$ L# B$ L\" B+ v\" v\" B* I$ I# v8\r\nB$ L\" B+ v\" v\" B* I$ I#\r\nB+ B* I$ I# B* I$ I#\r\nB+ I' B* I$ I#\r\nB+ I' I'\r\nI-\r\nLimits\r\nAs communication with Earth is complicated, the Cult seems to have put some restrictions \r\non their Macroware Insight software. Specifically, message processing is aborted when \r\nexceeding 10_000_000 beta reductions. Built-in operators are strict (except for B$, \r\nof course) and do not count towards the limit of beta reductions. \r\nContestants' messages therefore must stay within these limits.\r\n\r\nFor example, the following term, which evaluates to 16, uses 109 beta reductions during evaluation:\r\n\r\nB$ B$ L\" B$ L# B$ v\" B$ v# v# L# B$ v\" B$ v# v# L\" L# ? B= v# I! I\" B$ L$ B+ B$ v\" v$ B$ v\" v$ B- v# I\" I%\r\nResearchers expect that the limit on the amount beta reductions is the only limit that \r\ncontestants may run into, but there seem to also be some (unknown) limits on memory usage \r\nand total runtime.\r\n\r\nUnknown operators\r\nThe above set of language constructs are all that researchers have discovered, \r\nand it is conjectured that the Cult will never use anything else in their communication \r\ntowards Earth. However, it is unknown whether more language constructs exist.\r\n%}","test_suite":"%%\r\nvalid=0;\r\n% L lambdaman 1,   . Cheese 2,   # Wall 0\r\n\r\nms=['L..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'\r\n'........#..........#..........#..........#........'\r\n'..#..........#..........#..........#..........#...'\r\n'.......#..........#..........#..........#.........'\r\n'.#..........#..........#..........#..........#....'\r\n'......#..........#..........#..........#..........'\r\n'#..........#..........#..........#..........#.....'\r\n'.....#..........#..........#..........#..........#'\r\n'..........#..........#..........#..........#......'\r\n'....#..........#..........#..........#..........#.'\r\n'.........#..........#..........#..........#.......'\r\n'...#..........#..........#..........#..........#..'];\r\n\r\n[nr,nc]=size(ms);\r\nm=ones(nr,nc)*2; %Cheese bits are 2.\r\nm(ms=='#')=0; % Wall\r\nm(ms=='L')=1; % Landaman, start point\r\n\r\nfor i=1:nr % Display maze numeric\r\n fprintf('%i',m(i,:));fprintf('\\n');\r\nend\r\n\r\nv = Lambdaman10(m);\r\nfprintf('Answer Length: %i\\n',length(v));\r\n\r\nmc=m==2; %Create cheese binary matrix for processing path coverage\r\n\r\nr=1;c=1;  % Limit is 50,50 for Lambdaman10 starts at (1,1)\r\nfor i=1:length(v)\r\n if v(i)=='R' % R\r\n  if c+1\u003c=nc\r\n    if m(r,c+1)\u003e0\r\n     c=c+1;\r\n    end\r\n  end\r\n elseif v(i)=='L' % L\r\n  if c-1\u003e=1\r\n    if m(r,c-1)\u003e0\r\n     c=c-1;\r\n    end\r\n  end\r\n elseif v(i)=='U' % U\r\n  if r-1\u003e=1\r\n   if m(r-1,c)\u003e0\r\n     r=r-1;\r\n   end\r\n  end\r\n elseif v(i)=='D' % D\r\n  if r+1\u003c=nr\r\n    if m(r+1,c)\u003e0\r\n     r=r+1;\r\n    end\r\n  end\r\n end\r\n mc(r,c)=0; \r\n if nnz(mc)==0,break;end\r\nend\r\n\r\nif nnz(mc)==0\r\n valid=1;\r\nelse\r\n fprintf('Failed to Clear - remaining cheesy bits\\n');\r\n for i=1:nr % Display maze numeric\r\n  fprintf('%i',mc(i,:));fprintf('\\n');\r\n end\r\nend\r\n\r\nassert(valid)\r\n\r\n%The maze as Text\r\n%{\r\nL..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n........#..........#..........#..........#........\r\n..#..........#..........#..........#..........#...\r\n.......#..........#..........#..........#.........\r\n.#..........#..........#..........#..........#....\r\n......#..........#..........#..........#..........\r\n#..........#..........#..........#..........#.....\r\n.....#..........#..........#..........#..........#\r\n..........#..........#..........#..........#......\r\n....#..........#..........#..........#..........#.\r\n.........#..........#..........#..........#.......\r\n...#..........#..........#..........#..........#..\r\n%}\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2024-07-11T04:23:05.000Z","deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2024-07-09T20:47:10.000Z","updated_at":"2024-07-11T04:23:06.000Z","published_at":"2024-07-11T04: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\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/task.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP2024 contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e was held June29 thru July 1. The contest consisted of five parts: ICFP Language, Lambdaman maze, Starship flying, 3D - graph programming, and  Efficiency - processing complex ICFP message to a numerical value.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2024.github.io/icfp.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP Language\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is based on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Lambda_calculus\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLambda Calculus\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\u003eThe Lambdaman 10 maze is a 50x50 matrix L at index 1,  '.' a cheese bit, # is Wall. Matrix uses Wall=0,L=1,Cheese=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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest goal was to write a minimal size, bytes, expression that moves L, Lambdaman, to eat each cheese bit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 puzzle was given in ICFP to produce the maze text string. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB. SF B$ B$ L\\\" B$ L# B$ v\\\" B$ v# v# L# B$ v\\\" B$ v# v# L\\\" L# ? B= v# I;Y S B. ? B= B% v# IS I! S~ S B. ? B= B% v# I, I! Sa Sl B$ v\\\" B+ v# I\\\" I\\\"   in this language F=\u0026gt;L, l=\u0026gt;., ~=\u0026gt;LineFeed, IR means Integer 49, IS is 50\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 full ICFP language is a comment block in the function template. This is written as a Functional Program which appears is best addressed in Haskell.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 contest's best Lambdaman10 solution was written in ICFP to reduce length versus 2500 U/R/D/L commands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eB$ B$ L$ B$ v$ v$ L# L\\\" ? B= v\\\" Id S3/,6%},!-\\\"$!-!.VU} B. B$ B$ v# v# B% B* v\\\" I9 I,2X BT I\\\" BD B% v\\\" I% SFOL\u0026gt; I8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 return a string of commands [UDLR] with minimal matlab program size that eats all the cheese bits.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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 ICFP competition is more about manual solving optimizations for each unique problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\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=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\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\u003cw:r\u003e\u003cw:t\u003e Lambdaman21 was solved by Thirteen Team using tools. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=Xcm3S9VlqqY\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eThirteenTeam youtube ICFP2024\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\u003eThis challenge is to solve the Lamdaman10 maze, eat all the cheese by a char path of UDLR, with a program smaller than the template.\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.gif\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhyADIAOetAAAAAA0NDRYWFhwcHCIiIiYmJioqKi4uLjIyMjU1NTg4ODs7Oz09PUBAQEJCQkVFRUdHR0lJSUtLS01NTU9PT1FRUVNTU1VVVVZWVlhYWFpaWlxcXF1dXV9fX2BgYGJiYmNjY2VlZWZmZmhoaGlpaWpqamxsbG1tbW5ubnBwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6enx8fH19fX9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiIqKioyMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6ampqenp6ioqKmpqaqqqqurq6ysrK2tra+vr7CwsLGxsbKysrOzs7S0tLW1tba2tri4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2Nra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAP8ALAAAAADIAMgAAAj+AFsJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1903,"title":"GJam 2014 China Rd A: Maze with a Left Hand Rule","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2924486/dashboard#s=p3 GJam 2014 China Cross the Maze\u003e.\r\n\r\nThe Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as moves.\r\n\r\n\r\n*Input:* [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\r\n\r\n*Output:* Path, a string of Movements {N,S,E,W}. If Path is \u003e10,000 moves or No solution return a null string.\r\n\r\n*Examples:*\r\n\r\n  .##.#\r\n  .....\r\n  ...#.\r\n  .###.\r\n  ...#.\r\n  1 1 5 3\r\n\r\nNote: (1,1) is Top Left and start point for this case. \r\n\r\nThe # are replaced by 1s and '.' will be 0s.\r\n\r\nOutput: SEEENSESSSNNNWWSWWSSEE\r\n\r\n*Contest Performance:* Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\r\n","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2924486/dashboard#s=p3\"\u003eGJam 2014 China Cross the Maze\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as moves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Path, a string of Movements {N,S,E,W}. If Path is \u003e10,000 moves or No solution return a null string.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e.##.#\r\n.....\r\n...#.\r\n.###.\r\n...#.\r\n1 1 5 3\r\n\u003c/pre\u003e\u003cp\u003eNote: (1,1) is Top Left and start point for this case.\u003c/p\u003e\u003cp\u003eThe # are replaced by 1s and '.' will be 0s.\u003c/p\u003e\u003cp\u003eOutput: SEEENSESSSNNNWWSWWSSEE\u003c/p\u003e\u003cp\u003e\u003cb\u003eContest Performance:\u003c/b\u003e Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\u003c/p\u003e","function_template":"function Path=Maze_CH(m,sf);\r\n  Path='';;\r\nend","test_suite":"%%\r\ntic\r\nzm=[0 1 ;1 0 ];\r\nzsf=[1 1 2 2 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 1 0 1 ;0 0 0 0 0 ;0 0 0 1 0 ;0 1 1 1 0 ;0 0 0 1 0 ];\r\nzsf=[1 1 5 3 ];\r\nvexp='SEEENSESSSNNNWWSWWSSEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 ;0 1 0 ;0 0 0 ];\r\nzsf=[1 1 3 3 ];\r\nvexp='EESS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 2 2 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 1 0 1 0 1 ;0 0 0 0 0 0 0 0 ;1 1 1 1 1 1 1 0 ;0 0 0 0 0 0 0 0 ;0 1 0 1 0 1 0 1 ;0 1 1 1 1 1 1 1 ;0 1 0 1 0 1 0 1 ;0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 8 8 ];\r\nvexp='SEENSEENSEENSESSWSNWWSNWWSNWWSSSSEENSEENSEENSE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 3 1 ];\r\nvexp='EEEEEEEESESSSSSSSSWWWWWWWWWNNNNNNN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 7 1 ];\r\nvexp='EEEEEEEEESSSSSSSSSWWWWWWWWWNNN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 1 0 0 ;0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 1 ;0 0 0 1 0 0 0 0 0 0 ;0 1 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 3 ];\r\nvexp='NNNNNENNWNNEEEEEEEEESSSSSWSSESSWWWWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 1 4 ];\r\nvexp='SSSSSSSSSWWWWWWWWWNNNNNNNNNEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 2 ];\r\nvexp='NNNNNNNNNEEEEEEEEESWSSESSSSSSWWWWWNWWSW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 1 1 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 1 10 ];\r\nvexp='WWWWWWWWWNNNNNNNNNEEWSSEENENEEEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 5 10 ];\r\nvexp='WWWWWWWWWNNNNNNNNNEEEEEEEEESSSS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 0 0 0 0 0 0 ;0 0 0 0 1 0 1 0 0 0 ;0 0 0 0 0 1 0 1 0 1 ;0 0 0 0 1 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 1 ;0 0 0 1 0 0 0 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 1 9 1 ];\r\nvexp='SEENEEEEEEESWSSESSSWSSESWWWWWWWWNW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 1 0 0 0 0 0 1 1 ;0 1 0 0 0 1 0 1 1 0 ;0 0 0 1 0 1 0 1 0 1 ;0 0 1 0 1 0 1 0 0 1 ;0 0 0 1 0 0 0 0 0 1 ;0 1 0 0 1 0 0 1 1 1 ;0 0 0 1 0 1 0 0 0 1 ;0 1 0 0 0 1 0 0 0 0 ;1 0 0 1 0 0 1 0 0 0 ;0 1 0 1 1 0 0 0 0 1 ];\r\nzsf=[10 1 9 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 1 0 0 0 0 0 0 ;0 1 0 0 0 0 1 0 0 0 ;1 0 0 1 0 0 1 0 0 0 ;1 0 0 1 1 0 0 0 0 0 ;0 1 1 0 1 0 1 1 1 0 ;1 1 1 0 0 0 0 0 0 0 ;1 0 0 0 1 0 1 0 0 0 ;1 1 1 1 0 1 0 0 1 0 ;1 1 0 1 1 0 1 1 1 1 ;0 1 1 1 1 0 1 1 1 0 ];\r\nzsf=[1 1 10 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 0 0 0 0 1 1 ;1 0 0 1 1 0 0 1 0 1 ;0 0 0 1 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 0 1 ;0 0 1 0 0 1 0 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ;0 0 1 1 1 1 1 1 0 0 ;1 0 0 0 1 0 1 1 1 0 ;1 0 0 0 1 1 0 1 1 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 3 6 ];\r\nvexp='';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 0 0 ;1 0 0 1 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ;0 0 1 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 0 0 0 1 0 0 ];\r\nzsf=[10 1 10 3 ];\r\nvexp='NNNNNSESEENNWNWNNWNESEENEEEEEESSSSSSSSSWNNWWSSWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 1 0 0 0 0 ;0 0 0 0 0 0 0 1 0 0 ;0 0 0 0 1 0 0 0 0 1 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 1 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 0 0 0 1 0 1 ;0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ];\r\nzsf=[1 1 5 3 ];\r\nvexp='EESEENSEENEEESWSSEWSWSWSSEENSESSNWWSWWWWWWWNNNNNEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 0 0 1 1 ;0 1 0 0 0 0 0 1 0 0 ;0 0 0 1 0 0 1 1 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 1 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 1 0 0 ;0 0 0 0 1 0 0 0 0 0 ];\r\nzsf=[10 10 8 10 ];\r\nvexp='WWWWNWWSWWWNNNNNNNNNEEEEEEEWSWSWSSEENEENNESSSSWWSSEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 1 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;1 0 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 1 1 0 ;0 0 0 0 0 0 1 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 1 0 0 0 0 ;1 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 10 ];\r\nvexp='ENSEENNWNWWSNNNENENNWWNEEESEENEEEESSSSNWWWSWSSEENESESSS';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 1 0 0 0 0 0 ;1 1 1 0 0 0 1 0 0 0 ;0 0 1 1 1 0 1 0 0 0 ;0 0 0 1 1 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 1 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 1 0 ;0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ];\r\nzsf=[10 10 6 10 ];\r\nvexp='WWWWWWNWWSWNNNNNNNESEWSSEENEENNNWWNWWWEEESEENEEEESSSWSSE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 1 1 0 0 1 ;0 0 0 0 0 0 0 1 0 0 ;1 0 0 0 0 1 0 0 1 0 ;0 0 0 0 0 0 0 0 0 1 ;0 0 0 1 1 0 1 0 0 0 ;0 1 1 1 0 0 0 1 0 0 ;0 0 0 0 1 0 1 0 0 0 ];\r\nzsf=[1 10 6 2 ];\r\nvexp='SSWSSESNWNWNNWWSWSSEESESESESSWWENNWNWWSSEWSNWENNWWWSWWSSEEEWWWNNNEN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 0 0 0 ;0 0 0 1 0 1 0 0 0 0 ;0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 1 0 1 0 ;0 0 0 0 0 0 0 1 1 0 ;1 1 0 0 0 1 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 0 ];\r\nzsf=[1 10 2 8 ];\r\nvexp='SSSSSSSSSWWWWWWWNWWSNEENNWWNEENNWWNNNEEEEEWSSEWSSEENENN';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[1 0 0 0 0 0 0 0 0 0 ;0 0 0 1 0 0 1 0 0 0 ;1 0 0 0 0 0 0 0 1 0 ;0 0 1 1 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 1 ;1 0 0 0 1 0 0 0 0 0 ;0 0 0 1 0 0 0 0 1 0 ;0 0 1 0 0 1 0 0 0 0 ;0 0 0 0 0 1 0 1 0 0 ;0 0 1 0 0 0 1 0 1 0 ];\r\nzsf=[1 10 1 6 ];\r\nvexp='SSSWSSESSSSNWNWWSNNWWSSSEWWNWWSWNNNENNWNENNWENEEEE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 0 0 0 ;0 0 0 0 0 0 1 0 1 0 ;0 0 0 0 0 0 0 0 1 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ;1 0 0 1 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 1 0 ];\r\nzsf=[1 1 7 4 ];\r\nvexp='EEEEESSEENNEESSSSSSSSSNNWWSSWWNWWSWWWNNEENNWNWESESE';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 1 0 0 1 1 1 0 1 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 1 0 0 ;0 0 0 1 1 1 0 0 0 0 ;1 1 1 0 0 0 0 0 1 0 ;0 1 0 0 0 1 0 0 0 1 ;0 0 1 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 0 0 0 1 0 0 0 0 ;0 0 0 1 0 0 0 0 0 0 ];\r\nzsf=[10 1 10 5 ];\r\nvexp='NNNNSESEENNWENEEENNWWWNWWSSEWWNNNSEENESEEEENSEENSSSSNWWSSESESSSWWWWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 0 0 0 1 1 0 1 ;0 0 1 0 0 0 0 0 0 0 ;0 1 0 1 0 0 0 0 1 0 ;0 0 0 0 1 0 0 0 0 0 ;0 1 0 0 0 0 0 0 0 1 ;0 0 0 0 1 0 0 1 0 0 ;0 0 0 0 1 0 0 1 0 1 ;0 0 0 0 0 1 0 0 1 0 ;0 0 0 0 0 1 1 0 0 0 ;0 0 1 0 0 0 1 0 0 0 ];\r\nzsf=[10 1 9 2 ];\r\nvexp='NNNNNNNNNEEEEESEEENSESSWSSEWSNNWWSSSESEENSSWWNNWNWNNWWSSSESSEWWNWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\n%%\r\nzm=[0 0 0 1 0 0 1 0 0 0 ;1 0 0 0 0 1 1 0 0 1 ;0 0 1 1 0 0 0 0 1 0 ;0 1 0 1 0 0 0 0 1 0 ;1 1 0 0 0 0 0 0 0 0 ;1 1 0 0 0 0 0 0 0 0 ;0 0 0 0 0 0 0 0 0 0 ;0 0 1 0 0 0 0 0 0 0 ;1 0 0 0 1 0 0 0 0 1 ;0 0 0 0 0 1 0 1 0 0 ];\r\nzsf=[10 1 8 4 ];\r\nvexp='ENNWNEENNNSEENNNWWWSWSNENNWEESEENEWSSEEENNEEWSWSSSEENNSSSSSWSSEWNWWSNWNWW';\r\nvstr=Maze_CH(zm,zsf);\r\nassert(strcmp(vstr,vexp))\r\ntoc","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-09-30T03:46:21.000Z","updated_at":"2026-02-10T13:15:01.000Z","published_at":"2013-09-30T04:01: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\u003eThis Challenge is derived 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://code.google.com/codejam/contest/2924486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 China Cross the Maze\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 Goal is to minimally traverse a Maze from a Starting Point to Finish Point in less than 10,000 moves where the Bot can only go forward and must maintain its Left Arm in contact with a wall. At the Start Point the Bot can only touch NSEW. After the first move the Bot maintains contact on diagonals. Rotations in a cul-de-sac or turning are not counted as 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\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M, Start_Finish] where M is an NxN (0,1=Wall) array and Start_Finish is [Sr,Sc,Fr,Fc]\u003c/w:t\u003e\u003c/w:r\u003e\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 Path, a string of Movements {N,S,E,W}. If Path is \u0026gt;10,000 moves or No solution return a null string.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eExamples:\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[.##.#\\n.....\\n...#.\\n.###.\\n...#.\\n1 1 5 3]]\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\u003eNote: (1,1) is Top Left and start point for this case.\u003c/w:t\u003e\u003c/w:r\u003e\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 # are replaced by 1s and '.' will be 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:t\u003eOutput: SEEENSESSSNNNWWSWWSSEE\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eContest Performance:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Best Delta Time of 17 minutes with only 134 correct solutions in 3 hours.\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":1944,"title":"GJam 2014 China Rd B: Dragon Maze","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2929486/dashboard#s=p3 GJam 2014 China Dragon Maze\u003e. Small Case.\r\n\r\nThe Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path. \r\n\r\nThe input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)).\r\nEntrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no diagonals.\r\n\r\n\r\n*Input:* [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u003c=10).\r\n\r\n*Output:* [P] maximum Points. If Impossible P=-1;\r\n\r\n*Examples:*\r\n\r\n  [VEE] [M]   [P]\r\n  [0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]\r\n\r\n \r\n*Contest Performance:* Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\r\n\r\n\r\n*Strategy:*\r\n\r\n  1) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \r\n  2) A ring of Zeros around the array may simplify processing.\r\n  3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2929486/dashboard#s=p3\"\u003eGJam 2014 China Dragon Maze\u003c/a\u003e. Small Case.\u003c/p\u003e\u003cp\u003eThe Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path.\u003c/p\u003e\u003cp\u003eThe input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)).\r\nEntrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no diagonals.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u0026lt;=10).\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [P] maximum Points. If Impossible P=-1;\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[VEE] [M]   [P]\r\n[0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eContest Performance:\u003c/b\u003e Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\u003c/p\u003e\u003cp\u003e\u003cb\u003eStrategy:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \r\n2) A ring of Zeros around the array may simplify processing.\r\n3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.\r\n\u003c/pre\u003e","function_template":"function P=Dragon_CH(ee,m)\r\n  P=0;\r\nend","test_suite":"%%\r\ntic\r\nzee=[0 0 0 1];\r\nzm=[97 68 ];\r\nvexp=165;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[1 0 0 0];\r\nzm=[11 ;92 ];\r\nvexp=103;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 1 1];\r\nzm=[47 -1 ;-1 41 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[9541 9311 1035 9921 9342 2262 8685 7151 184 8189 ;3885 4455 8295 4011 4030 7427 4325 7756 3404 3014 ;4402 9158 999 4298 6612 1696 5965 1822 9039 12 ;6015 8579 9322 7049 4851 5015 5663 9888 8517 5846 ;4428 2402 6653 9074 2764 682 6500 3440 8437 6256 ;6453 9191 1765 7452 3488 8377 5499 9452 6550 4537 ;5815 8916 9467 1489 5965 4317 2855 1627 556 1372 ;3824 1335 125 476 409 9240 1158 6908 2679 5946 ;9515 9131 5136 1280 2934 8623 6008 8432 4427 8909 ;2968 241 7825 8786 8081 3789 9455 936 1767 10 ];\r\nvexp=135772;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[2307 5590 1345 8783 2418 1753 4374 9927 5012 7052 ;5872 879 2534 7360 2158 1820 5982 4517 251 6760 ;3425 9571 3353 1249 8356 1433 1389 7810 2368 9507 ;4172 1026 1449 1868 9808 3866 3620 533 3792 4983 ;7584 6015 5861 6470 3374 4370 8289 5708 8886 4891 ;8819 2311 813 2171 9911 5521 3604 1300 9682 5971 ;806 3853 6997 2254 5720 3156 2471 5691 3689 2614 ;7026 7624 8629 9238 445 8354 3608 5085 413 8845 ;9976 9232 7507 7140 1402 7418 2660 5005 5069 8694 ;976 5874 8898 7972 4480 4618 7479 3302 6660 1167 ];\r\nvexp=113799;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[5916 -1 5143 4544 9275 5587 9249 9234 672 9662 ;-1 6999 8893 5585 490 6646 9354 9502 1651 4422 ;8195 2626 6647 7092 6949 7478 8061 779 780 1073 ;1946 6695 1109 3440 7590 6735 9026 6838 5968 6049 ;2851 398 3047 8095 2334 3537 4741 1687 9390 6391 ;6108 7584 5368 2754 1027 8668 232 9088 9446 1011 ;6512 7743 4057 3972 1182 1646 707 6560 4835 3026 ;2608 4038 3423 2007 2132 5756 1895 6872 7442 1284 ;9614 9901 8867 1333 2655 6245 6352 9238 1684 2150 ;6600 8195 6244 656 2167 3778 8653 2873 337 3487 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[5898 9296 7524 5673 1302 6008 7780 3196 9231 5222 ;4479 5197 5122 9697 6529 4128 5942 9233 3365 7625 ;7734 9964 5820 3977 6971 4338 7754 5623 3562 4442 ;5462 5811 3738 9337 1483 1391 5344 9263 4587 4575 ;836 5417 9771 2309 1466 2651 6437 7407 8235 6153 ;1383 5968 2469 3554 6297 9439 7891 402 1414 7804 ;4844 6875 3615 4933 2563 1449 6323 7907 7063 7261 ;8833 7898 9030 4955 6559 495 3957 9347 7901 2192 ;5499 5635 4511 4319 9189 807 110 3431 7561 -1 ;1235 8756 4749 4849 3688 7311 6297 6362 -1 9712 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 2 0 9];\r\nzm=[-1 3591 -1 9384 6034 8580 2003 -1 8780 1295 ;5605 1377 2240 559 -1 -1 4017 4895 4437 -1 ;-1 -1 -1 9865 -1 1505 2777 -1 436 8170 ;1900 6344 8059 9498 8256 -1 7952 7551 -1 5927 ;-1 -1 7609 -1 1257 1902 -1 8040 4203 -1 ;1361 2292 1143 769 -1 -1 -1 -1 2197 -1 ;3846 -1 2480 -1 -1 -1 -1 -1 -1 -1 ;4444 -1 6690 489 813 8790 -1 -1 -1 -1 ;3729 5436 -1 8544 -1 -1 -1 -1 -1 -1 ;-1 3743 -1 6213 -1 -1 -1 -1 -1 -1 ];\r\nvexp=85015;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 4 3 9];\r\nzm=[256 -1 6593 -1 4076 -1 8308 8531 8388 1339 ;6280 8079 6556 5099 3523 1967 7424 -1 1469 -1 ;-1 9317 -1 6682 -1 2996 -1 3140 3913 -1 ;2927 2797 -1 9032 9111 -1 1637 5917 -1 5971 ;3285 -1 6158 5977 -1 -1 -1 6944 5424 6439 ;2389 7565 -1 5558 5485 588 -1 -1 4093 -1 ;-1 8297 -1 -1 7995 -1 -1 -1 6639 8591 ;-1 -1 -1 -1 -1 2803 5365 7702 9610 -1 ;-1 -1 -1 -1 -1 6383 -1 -1 8763 3884 ;-1 -1 -1 -1 -1 -1 4980 966 7330 -1 ];\r\nvexp=81434;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 7 0 9];\r\nzm=[9117 4644 7637 2065 8336 9446 7761 9053 -1 3232 ;-1 9846 -1 898 -1 1074 -1 1715 4774 5778 ;-1 8864 -1 -1 5687 9951 5462 -1 4536 -1 ;-1 -1 -1 -1 -1 7870 -1 7507 1777 4773 ;-1 -1 89 3307 79 1280 -1 -1 -1 2898 ;-1 -1 -1 -1 4952 -1 2748 572 1991 5243 ;-1 -1 -1 -1 2706 4551 -1 8752 -1 7862 ;-1 -1 -1 5293 6847 -1 -1 4293 -1 308 ;-1 -1 -1 -1 -1 8374 5932 3627 -1 9426 ;-1 -1 -1 -1 -1 -1 -1 983 -1 3561 ];\r\nvexp=24552;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 3 9 0];\r\nzm=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 3869 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 7888 2830 -1 -1 -1 -1 -1 -1 ;-1 257 4329 -1 2131 -1 -1 -1 -1 -1 ;-1 2582 -1 6446 8398 -1 -1 6063 6484 -1 ;8837 9043 5373 9819 -1 8087 -1 6474 -1 1335 ;866 -1 4087 -1 424 8975 1557 4839 -1 5800 ;868 7116 -1 6357 8115 -1 8722 -1 1184 5178 ;-1 8558 9689 2863 -1 3838 -1 1762 -1 6184 ;9784 3468 -1 6082 8935 7345 1958 7935 9830 2768 ];\r\nvexp=40444;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1 2 3 4 5 6 7 8 9 10 ;11 12 13 14 15 16 17 18 19 20 ;21 22 23 24 25 26 27 28 29 30 ;31 32 33 34 35 36 37 38 39 40 ;41 42 43 44 45 46 47 48 49 50 ;51 52 53 54 55 56 57 58 59 60 ;61 62 63 64 65 66 67 68 69 70 ;71 72 73 74 75 76 77 78 79 80 ;81 82 83 84 85 86 87 88 89 90 ;91 92 93 94 95 96 97 98 99 100 ];\r\nvexp=1324;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1 11 21 31 41 51 61 71 81 91 ;2 12 22 32 42 52 62 72 82 92 ;3 13 23 33 43 53 63 73 83 93 ;4 14 24 34 44 54 64 74 84 94 ;5 15 25 35 45 55 65 75 85 95 ;6 16 26 36 46 56 66 76 86 96 ;7 17 27 37 47 57 67 77 87 97 ;8 18 28 38 48 58 68 78 88 98 ;9 19 29 39 49 59 69 79 89 99 ;10 20 30 40 50 60 70 80 90 100 ];\r\nvexp=1324;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 1 4 1];\r\nzm=[-1 -1 1134 9086 5787 -1 -1 9759 -1 ;-1 5195 1440 5405 6267 9573 4021 -1 -1 ;-1 8437 7138 1518 3828 -1 4927 7037 5390 ;4445 9948 -1 -1 8054 5367 -1 -1 6378 ;2675 6263 1410 8224 1185 1056 6214 -1 -1 ;3465 4891 179 -1 8233 3186 3146 4940 -1 ;9212 -1 622 9232 2128 -1 4591 -1 -1 ;853 2385 8569 3381 -1 31 9357 1202 -1 ;9153 437 481 3041 9860 -1 802 -1 5243 ;-1 3979 1226 -1 3966 8037 -1 7564 -1 ];\r\nvexp=11154;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[6 1 5 4];\r\nzm=[8935 7055 9523 5947 9420 1029 1519 9655 7310 -1 ;5347 6550 956 3676 -1 -1 1605 165 9339 924 ;7608 -1 -1 -1 9106 2457 7428 1436 1464 -1 ;-1 8605 753 3273 -1 5557 -1 4895 86 471 ;6830 5364 -1 -1 -1 8767 -1 -1 1753 8126 ;1440 -1 -1 -1 7917 7380 870 -1 -1 8426 ;9518 1719 246 1756 1823 -1 -1 6500 9647 6158 ;-1 3753 9179 3752 -1 -1 3927 -1 28 8762 ;3442 1154 -1 2977 -1 -1 -1 -1 497 -1 ;5046 4922 8565 5170 9416 7140 4702 5262 5264 8821 ];\r\nvexp=13461;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 9 0 7];\r\nzm=[-1 -1 -1 -1 5591 -1 6865 6361 -1 9574 ;5326 2417 -1 -1 6193 9084 1910 5890 9530 4249 ;5130 -1 -1 -1 2376 -1 -1 3886 8309 1892 ;-1 4623 6047 744 2180 817 6660 2425 2867 4950 ;-1 -1 -1 7617 1260 2832 4751 -1 -1 5698 ;-1 2864 4297 8644 3112 1812 2562 5793 4826 1341 ;737 4961 6790 3341 876 9914 9275 -1 9924 756 ;7283 3200 4971 4962 -1 8083 -1 8819 -1 7409 ;7651 5137 -1 1403 6483 -1 6406 7515 -1 -1 ;7345 1246 2469 3331 251 -1 8029 6777 3210 -1 ];\r\nvexp=43605;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 6 9 8];\r\nzm=[4471 2340 6565 -1 -1 3663 -1 -1 4562 8294 ;8432 -1 -1 383 9745 3207 944 340 7820 3426 ;2977 97 5374 1193 4024 2963 2227 2262 6405 2380 ;4866 6164 3694 178 1313 4376 6297 6060 4583 9330 ;9358 7274 6389 6195 2179 -1 3397 7809 557 2087 ;1977 -1 2617 9973 -1 907 -1 5864 -1 -1 ;-1 6127 2119 7554 3268 7556 -1 4465 1297 3716 ;-1 -1 730 1361 5616 -1 -1 7981 7319 3103 ;-1 -1 6599 4345 -1 5421 7790 4406 876 1764 ;7527 -1 -1 8441 7260 9243 9942 -1 8987 -1 ];\r\nvexp=46698;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[3 5 3 4];\r\nzm=[5297 1690 2134 6500 -1 378 99 -1 7714 7786 ;1895 -1 5584 1030 1354 3108 9637 -1 4744 4892 ;-1 7743 6128 3847 -1 9009 -1 -1 9951 -1 ;9108 2993 -1 4347 2520 1147 3077 8541 5470 2062 ;-1 6534 4545 1801 -1 -1 1137 8521 -1 7866 ];\r\nvexp=3667;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[7 6 4 6];\r\nzm=[199 9295 8751 5145 2157 3343 -1 -1 7184 -1 ;3780 3730 6605 -1 8658 -1 3573 -1 -1 -1 ;6749 6135 -1 7631 -1 4179 -1 -1 4080 -1 ;3592 1382 9020 -1 6831 -1 6736 8383 -1 2258 ;1674 -1 4663 -1 6161 2406 268 -1 931 4237 ;100 6649 6439 -1 -1 5266 3204 4114 5940 5908 ;1230 -1 4134 6819 3172 8035 6784 -1 6391 -1 ;9181 -1 -1 7310 -1 1576 1892 5821 4469 2080 ];\r\nvexp=12148;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 3 2 0];\r\nzm=[290 -1 5107 7466 7064 ;6249 -1 3213 6568 -1 ;1037 -1 4971 4915 -1 ;6851 9043 8163 1379 6540 ;2051 8939 1483 -1 4184 ;7062 137 -1 5275 9462 ;-1 -1 4316 3265 2838 ;-1 -1 1471 9758 7724 ;-1 -1 3883 -1 4987 ;6843 7025 6749 7147 1906 ];\r\nvexp=51934;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[7 2 5 2];\r\nzm=[3900 9521 7343 2759 -1 ;5239 -1 1132 4911 3520 ;1517 9058 -1 -1 -1 ;-1 -1 -1 -1 8097 ;-1 7717 4099 5529 7959 ;-1 6950 9579 5029 -1 ;6687 9672 -1 -1 -1 ;1507 5064 2149 1922 7228 ;-1 8639 6134 -1 933 ;-1 511 -1 -1 744 ];\r\nvexp=33414;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 5 6 0];\r\nzm=[6137 3305 6360 4891 6396 4463 8888 7982 ;7881 -1 4743 6730 360 4945 9032 -1 ;7273 3476 8679 -1 3569 2493 -1 7527 ;5487 562 9739 813 6484 6067 -1 9545 ;-1 5162 -1 4989 8112 -1 8032 1019 ;-1 -1 5009 404 1699 1676 5849 8070 ;1003 4164 2297 4730 4313 6194 5684 -1 ];\r\nvexp=24377;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 2 6 7];\r\nzm=[8353 7263 7609 -1 2120 5314 -1 9477 1416 3433 ;-1 590 7657 2619 -1 -1 4684 9284 -1 -1 ;3862 -1 2692 4001 1891 -1 7719 6477 -1 5973 ;-1 8015 -1 -1 148 2255 3535 -1 1866 1644 ;1340 1620 3925 5165 -1 3694 4100 1434 3612 -1 ;7843 -1 -1 1391 7637 -1 5855 -1 7250 9629 ;1768 2379 -1 -1 3330 410 -1 9549 -1 -1 ;9493 9719 4813 1231 -1 -1 -1 5478 -1 5106 ;82 8285 251 6695 8652 -1 4552 79 -1 3502 ;3118 7594 8758 -1 -1 -1 8470 4711 -1 2424 ];\r\nvexp=-1;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[5 4 7 0];\r\nzm=[6808 5848 -1 9349 6503 5045 2772 -1 -1 8778 ;9668 4184 2263 -1 1288 1153 2705 7033 2495 -1 ;5880 2410 -1 7454 -1 2978 2427 4378 -1 4913 ;208 2853 -1 4005 3964 -1 9828 -1 4786 7602 ;-1 -1 -1 -1 -1 329 7985 -1 -1 28 ;-1 -1 -1 -1 4433 4085 9221 6038 7258 3834 ;9013 -1 5560 2745 5061 -1 3495 -1 -1 -1 ;2760 6565 7246 6924 -1 2700 -1 -1 4588 -1 ;9953 4344 8740 -1 152 8435 6756 3520 3078 9535 ;9930 9193 2399 246 4552 5468 -1 -1 -1 -1 ];\r\nvexp=35734;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[4 0 7 0];\r\nzm=[919 3728 6660 -1 5410 4513 8419 6070 482 6421 ;111 -1 4828 8468 -1 3201 -1 4659 -1 4738 ;-1 361 8017 4673 8999 4687 852 -1 7981 -1 ;-1 1520 9557 5945 8837 3767 9832 9775 -1 9935 ;5796 9072 -1 -1 392 341 3808 4109 4905 -1 ;9614 -1 8450 977 247 2107 7400 6786 -1 -1 ;4341 -1 4733 2658 -1 6043 8860 1838 6912 523 ;2432 4045 -1 -1 5361 895 -1 3895 1321 6672 ;2026 5899 1723 1201 1691 9580 1387 -1 -1 1689 ];\r\nvexp=22183;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[1 2 2 1];\r\nzm=[-1 -1 -1 -1 7201 7409 -1 9659 2860 9119 ;-1 9984 7612 9104 607 -1 9877 -1 2932 1986 ;5397 1618 2580 -1 69 2446 -1 -1 1160 7900 ;-1 9269 -1 6227 5896 200 5386 8138 -1 8909 ;7316 1699 -1 3087 -1 -1 -1 4699 -1 3670 ;8428 9133 3314 3461 4829 6483 7198 8227 8516 5217 ;325 54 8642 8561 -1 8582 -1 6678 3552 -1 ;7012 3037 6339 9407 6933 -1 9350 1820 5500 -1 ];\r\nvexp=19214;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 9];\r\nzm=[1505 3402 2754 9713 414 2610 2749 8975 8948 1456 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 8381 ;2838 4740 4009 1596 442 4853 3416 6467 6705 1640 ;9059 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;7197 4825 212 7826 2129 6298 2502 1979 9061 4006 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 1733 ;1814 3718 8498 4423 2818 7472 9722 625 2204 8912 ;5365 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;6212 507 5806 7416 274 8624 4120 1914 7683 7669 ;3090 4246 1846 5219 6895 4347 3549 5955 8352 5281 ];\r\nvexp=259550;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[0 0 9 0];\r\nzm=[4120 8421 130 8543 1238 7601 4616 1863 6156 3527 ;3579 8719 386 9384 6135 7011 4359 6606 5276 8393 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 626 ;8366 2638 2471 3584 5884 6817 3484 8190 5168 8765 ;2310 9940 5246 7204 1178 2847 1819 9392 5354 1698 ;2970 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;4073 8435 8705 6559 1797 3063 9516 7073 1456 142 ;1790 445 2612 1725 6329 9429 5208 4518 948 3972 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 6827 ;888 5570 382 8417 4768 2201 7808 121 250 7129 ];\r\nvexp=243332;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[9 0 0 9];\r\nzm=[4193 5036 5833 7103 6832 8895 6619 3904 350 6760 ;2045 7147 9371 3769 3475 8799 8977 4344 9747 9300 ;7523 6986 4869 7904 5402 9636 104 3209 9757 6705 ;337 301 1740 6169 7404 8572 1415 4022 8827 8117 ;7133 872 5263 6503 4640 8737 1654 3616 9432 7752 ;9268 6954 4737 4136 4858 138 3772 1313 9698 3528 ;8018 6386 180 6109 8906 7583 1032 320 7956 9859 ;8436 5088 7082 50 1591 8073 5138 9596 8041 4570 ;7347 7308 1523 2083 1443 6380 8572 1566 4045 4621 ;1445 2062 1006 1625 4522 9911 5559 5554 230 3515 ];\r\nvexp=137679;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\r\n%%\r\nzee=[3 7 3 6];\r\nzm=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 2896 5067 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ];\r\nvexp=7963;\r\nv=Dragon_CH(zee,zm);\r\nassert(isequal(v,vexp))\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":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-19T03:06:44.000Z","updated_at":"2026-02-10T13:28:34.000Z","published_at":"2013-10-19T03:25:25.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 Challenge is derived 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://code.google.com/codejam/contest/2929486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 China Dragon Maze\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Small Case.\u003c/w:t\u003e\u003c/w:r\u003e\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 Goal is determine the optimal minimum distance path that maximizes score. Multiple minimum distance paths may exist. Output the score for the path that maximizes the cumulative sum of the path.\u003c/w:t\u003e\u003c/w:r\u003e\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 input is a vector of Entrance/Exit [ENx,ENy,EXx,EXy] and a Matrix of Points. The Matrix and Entrance/Exit are zero based (Top Left is (0,0)). Entrance and Exit will be valid. A [-1] in the matrix is a Wall that can not be traversed. Movement is limited to NSEW, no 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: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 [VEE] [M], VEE is 1x4 [ENx,ENy,EXx,EXy], Matrix (NRxNC \u0026lt;=10).\u003c/w:t\u003e\u003c/w:r\u003e\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 [P] maximum Points. If Impossible P=-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\u003eExamples:\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[[VEE] [M]   [P]\\n[0 2 3 2][-1 1 1 2;1 1 1 1;2 -1 -1 1;1 1 1 1] [7]]]\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\u003eContest Performance:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Best Delta Time of 17 minutes with 336 of 2010 able to process the small data set.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eStrategy:\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) Check Start/Finish path existence while creating path distances from start. (Suggest offset by +1 to match array). \\n2) A ring of Zeros around the array may simplify processing.\\n3) My preference is to work from Finish to Start while tracking best scores for the Kth distance from the Start. A few tricks here to only check for valid prior values.]]\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":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":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":283,"title":"Give the Shortest Path Through The Maze","description":"*Description*\r\n\r\nThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size _M_ x _N_ where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\r\n\r\n                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \r\n\r\n                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\r\n                                           \r\n                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\r\n\r\n                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\r\n\r\n_Note: all outer boundaries are walls. My test cases provide for this already. You do *not* need to account for this._\r\n\r\nThe path will always start at the NorthWest corner (subscript |(1,1)|) and end at the SouthEast corner (subscript |(M,N)|). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\r\n\r\n    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\r\n\r\nwhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\r\n\r\nYou are *NOT* guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\r\n\r\n*Example*\r\n\r\nInput maze:\r\n\r\n    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\r\n    \r\nGraphical Representation:\r\n\r\n    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\r\n\r\nSolution:\r\n\r\n    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\r\n\r\nGraphical Representation:\r\n\r\n    \r\n    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+","description_html":"\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\u003c/p\u003e\u003cpre\u003e                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \u003c/pre\u003e\u003cpre\u003e                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\u003c/pre\u003e\u003cp\u003e\u003ci\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do \u003cb\u003enot\u003c/b\u003e need to account for this.\u003c/i\u003e\u003c/p\u003e\u003cp\u003eThe path will always start at the NorthWest corner (subscript \u003ctt\u003e(1,1)\u003c/tt\u003e) and end at the SouthEast corner (subscript \u003ctt\u003e(M,N)\u003c/tt\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\u003c/p\u003e\u003cpre\u003e    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\u003c/pre\u003e\u003cp\u003ewhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/p\u003e\u003cp\u003eYou are \u003cb\u003eNOT\u003c/b\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eInput maze:\u003c/p\u003e\u003cpre\u003e    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\u003c/pre\u003e\u003cp\u003eSolution:\u003c/p\u003e\u003cpre\u003e    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+\u003c/pre\u003e","function_template":"function path = solve_maze(maze)\r\n  path = zeros( size( maze ) );\r\nend","test_suite":"%%\r\nassert(isequal(solve_maze([3 2;1 2]),[1 0;2 3]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2;3 3 1;1 1 1]),[1 2 3;0 0 4;0 0 5]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 3 2 2 2;1 0 1 2 1;3 2 3 3 0;1 0 2 2 0;1 1 1 0 1]),[1 4 5 6 7;2 3 0 0 8;0 0 0 0 9;0 0 0 0 10;0 0 0 0 11]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3;3 1 2 1 1 3 1 3;1 0 3 0 0 1 3 3;1 1 0 2 0 0 1 1;3 1 3 3 2 1 2 1;3 2 2 1 3 0 1 0;3 3 2 3 1 2 2 0;1 3 3 0 0 2 0 2;1 2 3 1 0 2 1 3;1 1 3 2 3 1 1 0]),[1 2 0 0 0 0 0 0;0 3 0 0 0 0 0 0;0 4 0 0 0 0 0 0;0 5 6 7 8 9 0 0;0 0 0 0 0 10 11 0;0 0 0 0 12 11 12 13;0 0 0 0 13 14 15 14;0 0 0 0 14 15 16 0;0 0 0 0 0 0 17 0;0 0 0 0 0 0 18 19]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 2 3 3 2 3 3 3 2 3 2 3 2 3;3 0 3 3 1 2 2 3 3 0 2 1 0 1 2 2 0;1 0 2 3 2 1 1 0 0 3 1 0 2 1 1 0 2;3 1 1 2 0 0 2 0 2 3 3 1 0 3 1 0 3;1 0 1 0 3 0 1 0 0 2 2 1 0 2 1 2 1;1 2 0 0 3 1 2 1 2 3 1 1 0 1 3 1 1;3 1 1 3 2 2 2 2 2 1 2 3 2 0 3 1 2;1 3 0 1 0 3 0 2 1 3 2 2 2 1 1 1 2;1 3 3 1 1 1 2 3 2 2 2 2 3 3 2 0 1;3 1 3 0 2 0 2 0 1 0 3 1 2 3 2 0 0;1 1 0 2 3 3 1 2 2 1 3 0 2 3 2 2 0;3 0 0 2 3 3 0 0 2 2 0 0 1 3 1 3 1]),[1 2 0 0 0 0 0 0 0 0 0 0 21 22 0 0 0;0 3 0 0 0 0 0 0 14 15 16 19 20 23 24 0 0;0 4 5 0 0 0 0 12 13 0 17 18 0 0 25 0 0;0 0 6 7 8 9 10 11 0 0 0 0 0 0 26 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 32;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 33;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 34;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 3 3 2 2 2 3 2 3 3 2 2 2 2 2 2 2 2 3 3 2 3 2 3;1 2 2 2 1 1 1 3 0 3 1 1 0 2 3 0 2 0 0 3 3 0 3 1 3;3 1 3 2 3 1 2 2 2 3 3 0 3 3 3 3 3 3 0 0 2 0 3 0 3;3 1 1 1 3 3 3 1 0 1 1 3 3 2 2 2 3 1 3 1 3 1 3 1 0;3 1 3 0 1 3 2 1 1 2 1 0 3 1 3 2 1 0 1 0 2 0 3 2 0;3 0 2 2 2 3 2 1 2 2 0 3 0 0 1 1 0 1 3 1 3 0 2 0 0;3 3 0 0 2 0 3 0 1 1 2 3 1 0 3 1 3 3 0 1 2 3 1 3 2;1 0 2 0 3 1 1 0 3 2 0 0 0 0 0 0 1 3 3 2 2 0 0 2 2;1 2 1 3 2 1 3 1 0 3 2 3 3 3 1 0 1 2 0 1 3 3 0 2 1;1 0 3 2 0 0 3 3 2 2 0 0 3 3 0 1 2 0 2 1 2 0 2 3 3;3 0 2 3 3 2 3 2 1 3 3 1 2 0 3 2 1 0 2 0 1 3 1 2 0;1 0 1 1 2 2 1 2 2 1 3 1 0 3 3 2 3 2 1 2 3 3 3 1 2;1 2 1 0 0 3 3 3 0 1 2 1 1 2 2 0 2 3 3 3 1 0 3 1 3;3 3 2 3 1 2 2 2 1 0 2 0 3 1 3 0 0 2 1 3 0 1 3 0 1;1 2 2 0 0 3 1 1 1 3 1 0 3 3 1 0 2 0 3 3 1 0 0 0 3;1 2 1 2 1 1 0 0 2 0 3 0 0 1 0 0 1 3 0 0 1 3 2 0 1;3 3 1 2 0 1 1 1 1 2 2 0 1 2 1 1 3 0 0 0 1 1 3 0 0;3 2 2 0 0 0 0 3 2 2 1 1 0 0 2 3 1 3 3 3 0 3 1 3 0;1 2 2 0 3 1 2 0 3 1 3 2 3 3 2 1 2 3 3 2 2 1 2 0 0;1 3 1 3 2 1 3 1 2 1 0 0 0 2 1 3 0 3 0 2 3 0 0 0 0]),[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 10 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;13 14 0 0 0 0 0 0 0 0 0 0 0 0 43 44 0 0 0 0 0 0 0 0 0;14 15 0 0 0 0 0 0 0 0 0 0 0 41 42 45 46 47 0 51 52 53 54 0 0;0 16 17 0 0 0 0 0 0 0 0 38 39 40 0 0 47 48 49 50 0 0 55 56 0;0 0 18 0 0 0 0 0 0 0 0 37 38 0 0 0 0 0 0 0 0 0 0 57 0;0 0 19 20 21 0 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 58 0;0 0 0 0 22 23 24 25 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 59 0;0 0 0 0 0 0 25 26 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 60 0;0 0 0 0 0 0 26 27 28 0 0 33 0 0 0 0 0 0 0 0 0 0 0 61 0;0 0 0 0 0 0 0 0 29 30 31 32 0 0 0 0 0 0 0 0 0 0 0 62 63;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3 2 3 2 3 2 3 2 2 2 2 3 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 2 3 3 3 2 2 3 2 3;3 2 0 1 3 2 1 0 1 2 2 1 2 1 1 0 2 1 0 2 1 3 3 2 3 3 0 0 3 2 3 1 3 1 3 3 0 3 1 0 0 2 1 1 0;1 1 3 0 3 3 0 1 2 2 3 0 0 2 2 3 3 0 0 1 3 3 3 1 3 2 3 1 3 3 1 0 0 0 0 2 2 2 0 3 3 0 1 1 2;1 0 2 2 0 1 0 2 2 3 2 1 0 3 1 3 1 1 1 3 3 2 1 1 2 0 1 1 2 1 3 0 3 3 0 1 1 2 2 3 1 1 1 1 3;1 1 0 0 0 3 0 2 2 0 0 2 1 3 2 3 2 1 3 2 0 2 3 0 0 0 3 0 0 1 0 1 0 2 0 1 1 1 2 3 0 2 1 3 1;3 3 1 1 2 0 3 0 0 3 2 1 1 1 3 1 3 0 1 0 1 0 3 1 3 1 2 3 1 2 1 1 3 3 2 1 2 1 3 0 2 3 2 0 2;3 1 2 0 0 3 3 1 1 2 1 0 3 3 3 0 2 1 3 0 3 0 0 2 2 3 2 1 0 1 3 2 0 2 3 3 3 0 1 2 1 1 1 0 2;3 1 2 0 0 3 1 0 3 3 2 3 2 0 2 3 2 2 0 0 2 0 1 1 3 1 1 3 2 0 1 0 0 2 2 1 2 1 0 0 3 0 2 2 1;3 0 0 2 0 0 1 0 3 2 2 0 0 3 1 1 2 0 0 0 3 2 0 2 1 1 2 0 3 2 3 2 0 3 3 3 1 3 2 1 0 2 0 1 2;1 0 1 0 1 2 3 2 0 1 0 0 0 1 1 2 1 3 0 2 0 0 0 3 2 0 0 1 2 0 2 1 2 3 2 1 0 3 2 0 2 1 1 2 2;3 0 0 1 0 2 0 2 0 2 3 2 3 0 2 3 3 1 0 2 3 2 0 3 0 0 2 0 2 3 0 3 1 0 3 1 0 2 2 1 0 1 2 2 3;1 3 3 1 2 3 1 2 2 3 3 3 3 0 2 1 2 1 1 3 0 2 2 2 0 3 3 2 0 3 0 0 0 0 3 2 2 0 0 1 3 3 0 0 0;1 0 3 1 2 1 0 3 0 0 0 0 3 2 3 0 2 2 0 0 1 1 1 2 3 3 1 0 2 1 2 1 3 1 2 0 2 3 0 0 0 3 1 0 3;3 2 0 0 1 1 2 3 1 1 2 1 2 2 0 3 2 1 2 0 0 1 3 1 3 2 2 3 3 3 3 0 3 1 2 0 0 1 1 3 3 2 2 1 2;1 3 3 1 3 0 0 2 0 3 0 3 1 2 2 3 0 3 0 2 0 3 1 1 0 2 3 2 1 2 0 0 2 0 3 1 0 3 2 1 0 1 1 1 2;3 1 3 3 2 1 2 1 1 3 1 3 1 0 3 3 2 3 1 3 0 0 1 2 1 3 0 2 2 2 2 1 2 3 2 0 3 2 0 2 1 2 1 1 2;1 2 2 1 3 2 0 3 1 1 1 0 2 3 1 2 0 0 2 0 0 2 3 2 3 1 1 3 2 1 1 3 3 3 0 1 3 3 1 0 2 0 1 1 0;1 2 0 0 2 1 1 0 2 2 0 2 0 3 1 2 2 0 2 0 3 2 0 0 2 1 1 1 0 1 2 0 0 2 3 1 0 0 1 2 0 3 2 1 2;1 2 2 1 0 2 1 1 3 1 2 3 1 2 2 3 1 2 2 2 1 1 0 0 1 2 0 2 0 3 2 1 0 2 3 1 1 0 2 1 1 0 0 0 2;3 0 2 0 1 1 2 0 3 3 3 3 0 1 0 1 3 1 1 2 1 1 1 3 0 0 3 0 0 3 1 0 2 3 2 0 2 2 0 3 0 1 1 3 0;3 1 3 0 2 1 3 1 0 3 0 3 1 2 1 3 2 3 0 1 0 3 3 3 0 1 2 0 0 1 2 2 3 2 0 2 1 2 2 3 1 0 0 3 1;3 1 2 0 1 2 3 0 1 0 0 1 2 0 1 1 1 2 1 1 3 1 1 2 0 1 3 0 3 0 0 0 0 1 1 2 1 3 0 2 0 3 2 2 1;3 0 2 1 0 3 2 2 1 0 2 3 1 1 2 1 1 1 1 3 3 2 2 3 2 1 2 2 0 1 3 3 0 3 3 0 1 2 0 0 3 2 1 0 1;3 3 2 2 3 3 2 0 2 1 1 3 3 3 1 2 0 3 0 1 1 3 3 1 0 3 0 1 0 2 1 2 2 0 0 0 2 1 2 1 0 3 0 3 2;1 0 3 2 1 0 2 3 1 1 3 1 3 2 2 2 3 0 2 1 3 2 1 1 1 3 1 0 0 0 0 0 3 2 3 3 3 1 2 2 1 2 0 3 0;1 0 3 3 3 2 2 3 0 0 0 3 3 3 0 0 3 3 0 0 2 3 1 3 3 3 1 1 3 2 3 0 0 2 2 1 0 0 2 3 3 3 3 3 0;3 0 1 1 0 1 2 3 1 3 1 3 0 3 3 1 2 3 3 2 3 3 2 3 1 3 2 1 0 1 0 1 3 1 0 2 2 0 0 3 1 0 3 0 0;1 3 3 2 2 2 1 0 1 0 3 3 2 0 2 3 0 1 0 0 3 1 0 1 2 1 0 2 1 3 2 3 2 0 0 2 0 3 2 1 3 1 0 0 3;3 2 3 2 2 3 1 3 0 1 2 0 3 3 2 3 3 1 0 1 1 1 0 2 2 2 3 3 2 0 2 0 1 1 0 2 0 1 0 2 1 0 3 2 0;3 0 3 1 0 3 3 3 0 2 1 2 2 2 0 2 0 3 1 1 0 2 2 0 0 2 2 1 0 1 0 0 2 3 3 0 0 0 0 2 2 0 3 2 0;3 1 3 0 1 2 3 3 1 1 3 1 2 0 1 1 0 3 1 1 0 2 3 1 3 2 1 1 3 0 3 3 3 0 1 3 2 0 0 3 2 3 2 0 1;3 2 2 2 2 3 3 0 1 2 1 2 3 3 2 2 2 2 3 0 1 2 0 3 2 2 3 0 2 2 3 1 1 0 0 3 2 3 0 0 1 2 2 0 0;3 1 3 2 1 3 1 2 3 2 2 2 2 0 1 3 0 2 3 0 0 3 3 2 3 3 1 2 1 1 0 0 3 2 0 3 0 2 1 0 2 3 2 1 3;3 1 0 0 1 2 3 2 2 3 1 0 1 2 2 0 3 2 1 0 1 1 0 2 1 3 0 1 1 0 1 2 1 3 1 3 3 0 2 0 0 1 0 0 2;3 0 0 3 0 2 2 1 1 0 0 2 0 3 0 2 1 0 3 2 0 3 3 3 3 0 3 0 0 1 2 0 1 3 2 3 0 3 0 2 3 1 2 0 0;3 3 0 2 0 0 2 0 0 0 1 2 2 0 0 1 0 2 2 1 0 2 2 2 3 3 2 3 0 2 0 2 1 2 0 1 1 3 3 0 3 2 1 2 3;3 2 0 2 1 3 3 0 3 0 1 1 0 3 0 2 0 3 1 2 0 0 3 2 2 1 1 2 1 0 2 0 0 1 3 2 2 2 2 1 2 1 2 3 1;1 3 1 2 2 0 2 0 3 3 3 2 1 0 2 3 1 2 3 3 2 3 2 1 2 0 3 3 1 1 1 0 3 2 0 0 1 2 2 2 0 2 1 3 3;1 3 3 3 0 0 3 2 2 1 2 0 2 3 1 2 0 2 1 3 3 2 0 1 3 0 0 2 3 1 3 3 1 0 0 0 2 2 3 3 2 0 1 2 1;3 3 2 0 0 0 1 2 0 0 3 1 2 1 0 1 0 2 1 0 2 1 2 2 2 1 0 1 1 3 1 3 2 3 3 1 3 2 0 3 3 0 2 2 2;1 1 1 0 3 1 0 0 3 2 3 2 2 0 2 2 3 0 1 2 0 1 3 3 2 1 3 1 1 0 2 1 0 0 0 0 2 3 1 3 0 1 1 2 0;3 1 0 1 0 1 3 3 2 2 3 2 1 3 2 0 1 1 2 0 0 2 2 2 2 1 1 3 3 1 0 3 0 2 0 1 2 2 2 2 2 0 1 3 1;1 0 3 1 1 2 3 1 3 1 0 1 1 1 3 0 2 3 1 3 1 0 3 3 3 2 0 1 3 3 1 3 0 0 2 3 0 2 3 1 3 2 1 3 2;3 0 3 2 3 3 2 3 3 1 0 0 3 2 0 1 0 3 1 1 2 0 0 3 2 1 1 2 2 1 1 1 2 1 3 1 3 3 3 2 0 1 0 2 2;1 3 3 1 3 2 2 3 2 0 2 3 3 1 3 1 0 3 0 1 2 2 1 1 1 2 2 2 0 3 0 2 1 0 3 1 2 0 1 0 0 3 0 3 0;3 2 3 1 0 0 0 0 2 3 1 3 3 2 2 1 2 1 3 2 2 1 0 2 2 1 0 3 1 3 1 3 2 0 1 3 2 2 3 0 2 1 3 1 3;1 3 3 1 3 0 3 1 0 3 1 1 2 0 3 2 1 2 1 2 3 0 1 2 3 0 1 2 1 0 0 3 1 3 0 2 3 2 2 2 0 1 0 3 3;3 0 0 0 0 0 3 0 0 1 3 0 1 3 3 3 1 0 1 2 1 0 1 0 3 1 0 1 2 1 3 1 0 2 0 3 0 3 0 2 2 0 2 0 3;3 2 0 3 2 3 3 1 1 3 0 0 0 3 3 2 2 3 1 3 3 2 1 3 3 2 0 2 0 3 2 0 1 1 2 2 1 1 2 0 0 2 0 1 1;1 1 1 2 0 1 0 0 2 0 2 2 3 3 3 3 0 3 0 3 1 3 3 1 3 0 3 3 0 1 0 1 1 2 2 0 3 3 0 3 0 3 3 0 0]),[1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 8 9 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 13 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 48 49 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 17 18 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 44 45 46 0 0 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 20 21 22 0 0 0 0 0 0 0 0 0 0 37 38 39 40 41 42 0 0 0 0 0 52 53 54 55 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 23 24 25 26 0 0 31 32 33 34 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 56 57 58 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 27 28 29 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 58 59 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 66 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 70 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 74 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 79 80 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 81 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 83 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 84 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 85 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 88 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 91 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 93 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 96 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 101 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 106 107 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 109 110]))","published":true,"deleted":false,"likes_count":14,"comments_count":0,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":57,"test_suite_updated_at":"2012-02-08T22:51:09.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2012-02-08T03:01:26.000Z","updated_at":"2026-02-07T15:43:43.000Z","published_at":"2012-02-09T00: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\":[],\"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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\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 purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size\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\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That 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[                                           +   +\\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \\n                 NW                        +   + \\n\\n                                           +   +\\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\\n                                           +   +]]\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003enot\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e need to account for this.\u003c/w:t\u003e\u003c/w:r\u003e\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 path will always start at the NorthWest corner (subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(1,1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) and end at the SouthEast corner (subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(M,N)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. 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[    path = [  1   2   0   0   0   0 \\n              4   3   0   9  10   0\\n              5   6   7   8  11   0 \\n              0   0   0   0  12  13 ]]]\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 represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/w:t\u003e\u003c/w:r\u003e\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\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNOT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output 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=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput maze:\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[    maze = [  3  2  2  2  3\\n              1  3  2  2  3\\n              1  3  2  3  1\\n              1  1  0  2  0\\n              1  0  2  1  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\u003eGraphical Representation:\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[    +---+---+---+---+---+\\n    |               |   |\\n    +   +---+---+---+---+\\n    |   |           |   |\\n    +   +---+---+---+   +\\n    |   |       |   |   |\\n    +   +   +   +---+   +\\n    |   |               |\\n    +   +   +---+   +   +\\n    |           |   |   |\\n    +---+---+---+---+---+]]\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\u003eSolution:\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[    soln = [  1   0   0   0   0\\n              2   0   0   0   0\\n              3   0   0   0   0\\n              4   7   8   9  10\\n              5   6   0   0  11 ]]]\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\u003eGraphical Representation:\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[    +---+---+---+---+---+\\n    | 1             |   |\\n    +   +---+---+---+---+\\n    | 2 |           |   |\\n    +   +---+---+---+   +\\n    | 3 |       |   |   |\\n    +   +   +   +---+   +\\n    | 4 | 7   8   9  10 |\\n    +   +   +---+   +   +\\n    | 5   6     |   |11 |\\n    +---+---+---+---+---+]]\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":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":44378,"title":"Five-dimensional maze","description":"*Description*\r\n\r\nThe traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes _x_ and _y_. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\r\n\r\nThis problem is a generalization of \u003chttps://www.mathworks.com/matlabcentral/cody/problems/283 Problem 283\u003e. If you haven't solved that yet, I would recommend solving it first.\r\n\r\n*Encoding*\r\n\r\n* The maze will be represented by an [ _M_ x _N_ x _O_ x _P_ x _Q_ ] matrix. \r\n* Each element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\r\n* Walls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\r\n* The start position is at the origin: subscript |(1,1,1,1,1)|.\r\n* The end position is at the furthest extent: subscript |(M,N,O,P,Q)|.\r\n* The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/283 Problem 283\u003e for a 2-D example.\r\n* You are *NOT* guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.","description_html":"\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes \u003ci\u003ex\u003c/i\u003e and \u003ci\u003ey\u003c/i\u003e. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\u003c/p\u003e\u003cp\u003eThis problem is a generalization of \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/283\"\u003eProblem 283\u003c/a\u003e. If you haven't solved that yet, I would recommend solving it first.\u003c/p\u003e\u003cp\u003e\u003cb\u003eEncoding\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe maze will be represented by an [ \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e x \u003ci\u003eO\u003c/i\u003e x \u003ci\u003eP\u003c/i\u003e x \u003ci\u003eQ\u003c/i\u003e ] matrix.\u003c/li\u003e\u003cli\u003eEach element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\u003c/li\u003e\u003cli\u003eWalls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\u003c/li\u003e\u003cli\u003eThe start position is at the origin: subscript \u003ctt\u003e(1,1,1,1,1)\u003c/tt\u003e.\u003c/li\u003e\u003cli\u003eThe end position is at the furthest extent: subscript \u003ctt\u003e(M,N,O,P,Q)\u003c/tt\u003e.\u003c/li\u003e\u003cli\u003eThe output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/283\"\u003eProblem 283\u003c/a\u003e for a 2-D example.\u003c/li\u003e\u003cli\u003eYou are \u003cb\u003eNOT\u003c/b\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/li\u003e\u003c/ul\u003e","function_template":"function path = solve_maze5(maze)\r\n    path = zeros(size(maze));\r\n    path(1) = 1;\r\nend","test_suite":"%%\r\nmaze = reshape([15 15 15 15 15 15 15 15 15 31], [1 1 1 1 10]);\r\ntruth = reshape([1 2 3 4 5 6 7 8 9 10], [1 1 1 1 10]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([28 28 30 28 30 30 29 30 28 29 29 30 31 29 28 29 30 30 31 29 29 28 30 29 29 29 28 30 31 29 29 30 29 31 29 29 30 30 28 31 30 29 28 30 31 30 30 29 30 29 28 31 30 29 28 30 29 29 28 31 29 28 30 31 30 29 30 31 29 29 29 29 28 30 30 31 28 30 31 29 29 31 29 28 29 28 31 30 30 29 30 30 31 31 30 30 30 30 30 31], [10 10 1 1 1]);\r\ntruth = reshape([1 2 3 4 5 6 7 0 11 12 0 0 0 0 0 0 8 9 10 13 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 16 15 0 0 0 0 0 0 0 0 17 18 0 0 0 0 0 0 0 0 20 19 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 24 23 22 0 0 0 0 0 0 26 25 0 0 0 0 0 0 0 0 27 28 29 30 31], [10 10 1 1 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([20 29 22 23 23 23 22 30 29 21 28 29 23 29 29 29 30 29 29 29 23 22 31 30 31 23 23 29 23 21 29 29 23 22 31 23 23 22 22 31 28 23 21 28 29 31 23 30 31 23 30 22 31 23 23 28 30 31 29 21 31 29 31 21 29 22 31 29 29 29 23 23 23 31 23 22 31 22 31 31 28 23 28 23 23 23 22 31 30 23 28 23 23 28 23 31 30 31 23 23 28 31 29 28 29 31 29 29 31 31 29 31 30 29 31 29 30 31 30 31 30 30 30 31 31], [5 5 1 5 1]);\r\ntruth = reshape([1 2 0 0 0 0 3 0 0 0 13 14 0 0 0 12 15 16 0 0 11 18 17 0 0 0 0 0 0 0 0 4 0 0 0 0 5 0 0 0 9 8 25 28 29 10 19 26 27 30 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 7 24 0 0 0 20 23 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 22 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33], [5 5 1 5 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([18 23 19 28 27 22 23 22 31 19 25 22 29 25 21 27 25 29 27 29 30 30 31 22 31 29 23 29 29 29 29 21 29 21 31 31 30 31 31 29 29 29 21 29 29 23 23 23 30 31 23 23 29 27 19 27 27 31 22 31 30 23 28 23 27 22 29 29 19 25 19 30 31 27 23 30 22 30 28 31 29 31 21 23 23 30 29 29 21 29 22 31 31 31 31 31 30 31 30 23 27 23 22 23 29 17 19 29 23 29 25 23 19 27 29 31 22 30 31 29 18 31 19 27 31 23 31 21 28 29 31 23 31 31 29 30 29 29 31 29 23 29 30 28 31 23 30 31 31 23 19 27 29 23 27 31 30 31 27 25 19 27 30 30 31 22 31 21 26 27 31 19 31 22 23 31 30 31 22 29 28 31 28 31 31 31 29 23 21 21 23 30 23 31 31 23 23 22 30 31 29 26 31 30 29 27 26 30 29 29 30 30 30 31 27 29 26 31 25 25 30 31 27 31 31 30 30 28 31 29 30 31 30 30 31 28 29 30 31 31 31 31 30 31 29 30 31 30 30 31], [5 5 2 5 1]);\r\ntruth = reshape([1 2 0 0 0 0 0 0 0 0 0 24 23 0 0 0 19 22 0 0 0 20 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 13 0 0 0 17 14 0 0 0 3 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 11 0 0 0 0 12 0 0 0 16 15 0 0 0 4 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 35 36 0 6 7 0 0 0 0 0 0 0 0 28 0 0 0 0 29 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 38 0 0 0 34 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 32 39 0 0 0 0 40], [5 5 2 5 1]);\r\nassert(isequal(solve_maze5(maze), truth));\r\n\r\n%%\r\nmaze = reshape([21 5 22 29 19 23 31 7 30 15 21 26 23 7 19 23 22 29 11 11 14 15 30 30 23 11 7 11 25 15 13 13 15 15 27 23 31 28 29 27 13 14 31 31 15 23 14 23 30 19 30 30 31 29 25 7 14 29 23 31 25 27 30 29 23 30 29 12 31 19 7 23 31 19 11 28 30 15 26 27 15 13 25 26 23 27 23 23 28 15 19 20 23 27 15 7 31 19 23 27 28 23 22 31 15 30 23 29 30 15 15 28 31 23 21 23 30 23 29 23 22 15 15 23 23 26 15 23 7 29 23 28 31 25 15 23 27 27 31 23 29 23 14 29 25 23 7 15 23 31 27 30 15 25 21 28 23 19 31 15 31 27 23 19 23 22 30 30 27 15 30 15 27 7 23 30 27 26 31 25 23 19 30 31 23 29 29 14 31 27 23 30 23 15 23 23 23 30 31 19 7 23 23 25 27 26 27 23 13 23 21 31 23 27 15 31 15 29 26 23 15 19 31 23 15 29 23 30 31 15 31 31 7 28 31 14 23 13 23 15 29 21 31 30 31 31 31 23 30 31 26 27 25 31 21 15 21 31 28 31 15 23 21 29 29 26 31 29 27 29 30 31 27 15 15 27 23 23 13 27 25 23 23 29 19 30 27 27 31 19 31 28 27 15 29 15 23 23 23 15 15 26 31 5 15 31 30 15 29 31 26 31 30 31 29 15 13 31 17 31 27 31 27 15 15 27 31 30 30 27 11 13 23 19 29 31 27 29 14 31 28 29 27 27 15 31 31 27 30 23 30 31 15 13 15 15 15 29 31 13 13 31 15 31 29 29 29 23 23 23 15 23 30 23 7 22 27 7 19 29 25 30 30 30 31 23 29 23 30 25 11 29 7 22 31 26 31 26 30 27 29 31 27 28 27 15 15 27 27 27 28 30 27 19 31 31 14 15 27 21 30 31 31 23 31 19 28 31 27 15 21 21 23 31 29 27 31 29 23 15 22 29 29 31 25 27 23 15 7 15 29 25 13 30 29 15 27 21 27 23 30 15 29 26 23 28 29 15 22 31 27 23 3 14 31 13 15 14 30 29 29 15 23 23 29 31 14 30 31 23 22 23 15 15 29 23 15 23 15 31 15 30 28 30 29 28 27 31 11 27 31 13 30 15 11 13 28 31 15 11 15 27 14 30 15 28 27 28 15 11 30 31 15 29 13 28 30 27 31 31 30 30 30 27 31 30 31 26 31 15 15 29 28 15 27 25 31 31 13 13 31 26 31 31 29 29 27 26 31 29 27 30 31 30 31 25 28 27 30 31 31 27 27 28 31 26 31 26 31 15 26 29 30 31 27 15 31 31 14 27 29 15 15 14 15 30 31 31 29 15 30 15 30 31 15 31 29 30 30 15 15 15 15 14 31 25 30 30 18 31 15 21 23 14 31 7 30 29 15 13 14 27 27 23 31 23 27 7 26 27 31 27 23 31 29 29 15 15 15 29 30 15 19 21 15 29 31 29 29 27 15 31 23 31 23 21 29 13 22 15 31 31 27 25 11 14 29 29 22 31 28 31 31 11 27 31 14 30 30 31 7 22 31 25 13 23 25 27 23 31 25 23 25 22 31 29 28 31 27 31 31 27 30 26 15 21 23 21 29 15 15 23 31 15 23 31 13 30 30 23 28 31 21 15 13 23 31 31 22 31 19 31 7 30 23 26 31 30 29 15 30 15 22 31 15 19 28 31 30 23 23 31 26 31 7 15 7 27 14 29 29 26 30 27 31 23 26 31 23 25 30 30 14 31 31 26 31 27 30 31 23 11 31 15 21 7 23 28 31 23 26 31 31 31 27 26 30 30 31 25 30 23 31 14 31 31 31 21 26 15 30 30 31 31 7 15 23 28 31 31 15 29 27 13 15 15 30 30 31 27 29 23 29 29 15 23 23 31 30 31 30 23 30 29 31 28 31 31 15 15 15 14 15 31 15 30 23 27 7 17 30 15 19 13 31 27 7 23 30 23 31 22 27 29 27 30 23 22 31 31 22 31 23 15 15 22 29 15 19 11 31 23 19 30 29 22 23 27 23 31 19 19 22 15 31 31 11 19 31 31 31 29 30 31 31 19 29 29 14 29 29 31 31 25 29 31 31 19 31 31 27 29 31 11 19 29 31 28 30 31 31 29 23 30 15 14 29 13 23 29 7 27 31 14 31 22 30 31 31 31 31 15 7 13 15 15 29 30 31 23 7 23 15 14 15 15 31 14 15 23 21 23 31 27 27 30 23 27 28 27 27 27 15 29 27 27 29 21 30 27 27 31 31 14 27 15 11 23 27 23 31 23 27 23 15 15 31 30 15 23 31 31 15 23 27 15 27 30 30 31 25 27 30 31 23 30 29 30 27 27 15 30 27 14 31 14 23 27 13 27 7 27 31 31 23 15 27 23 19 15 29 22 30 31 25 27 23 31 25 27 21 7 23 31 23 31 15 27 15 15 21 31 15 29 15 15 29 29 15 7 15 31 29 23 29 30 31 31 23 7 14 31 30 15 15 31 30 30 30 29 25 15 11 15 15 27 29 29 29 31 30 31 31 31 15 15 14 31 11 27 28 27 27 29 29 31 27 31 31 31 29 28 30 29 15 27 30 29 31 9 14 27 27 15 31 15 15 30 31 27 11 29 13 15 29 13 30 31 25 15 31 30 30 31 29 15 30 31 11 31 13 14 31 30 31 31 15 28 30 29 26 31 27 27 15 30 31 30 15 29 15 30 11 31 27 29 14 31 29 15 31 14 29 15 31 30 31 31 31 15 28 30 30 31 15 31 15 31 30 31 7 28 30 15 13 15 30 23 15 15 15 21 21 30 31 29 23 27 7 27 23 23 23 22 15 24 30 29 19 21 21 15 31 27 23 31 30 29 28 31 22 15 31 29 29 30 23 30 23 23 31 11 27 15 23 25 28 15 29 29 31 30 23 29 29 23 11 19 31 27 19 27 19 26 27 23 23 29 7 23 23 7 30 29 9 30 11 15 23 15 25 27 30 15 15 31 27 15 27 31 14 30 29 14 31 29 13 29 29 31 23 31 15 23 7 30 31 21 23 15 23 15 30 31 15 30 27 30 15 19 22 27 30 28 31 13 31 29 30 31 29 27 30 31 13 31 30 27 23 31 27 31 21 31 31 27 15 27 14 31 22 15 11 25 19 30 31 27 30 23 19 23 30 31 15 23 29 26 31 29 15 27 30 29 15 28 27 31 31 27 23 21 14 30 29 31 23 23 23 15 29 30 31 27 31 31 31 19 26 31 15 15 28 31 23 30 29 23 29 23 30 31 26 31 23 22 29 29 29 29 28 31 29 31 15 31 22 31 30 29 14 30 31 31 31 31 23 31 14 31 11 15 11 23 29 30 31 22 31 23 29 29 19 24 27 26 31 22 31 13 26 15 14 31 31 30 29 31 23 11 13 30 31 14 31 31 7 23 31 31 14 31 11 25 27 31 15 23 31 19 27 15 7 13 19 28 15 25 15 7 30 27 27 27 15 30 31 15 23 15 14 31 27 30 31 27 19 29 29 31 21 7 31 30 23 30 31 27 27 31 30 29 31 13 15 27 15 27 31 7 31 15 7 22 29 7 29 15 15 31 23 31 29 15 13 15 30 15 23 31 31 23 31 30 23 29 11 7 30 27 11 27 27 25 15 28 23 31 15 19 15 28 31 11 13 11 30 23 30 31 27 31 27 30 31 11 7 29 29 23 29 15 31 31 29 29 22 31 23 15 15 14 11 19 23 30 23 30 27 23 31 19 22 15 29 23 21 21 15 29 30 15 15 31 29 27 30 31 30 31 23 30 29 15 15 29 31 29 21 15 30 23 15 27 11 21 27 22 30 25 31 23 7 23 31 14 23 31 15 29 15 14 23 23 15 31 23 14 31 23 7 23 7 15 31 15 15 30 15 31 13 11 27 13 13 30 31 29 31 31 14 31 15 11 27 28 30 28 31 15 31 15 31 30 27 25 29 30 29 27 15 31 14 31 15 28 30 30 31 31 27 29 27 15 31 15 30 27 31 31 31 31 26 29 29 30 31 31 31 15 31 31 27 26 31 27 25 30 27 11 30 31 15 30 15 31 31 30 30 15 30 30 15 30 27 14 31 30 31 31 31 29 14 31 15 15 31 31 27 27 13 31 28 15 15 30 31 31 31 15 14 31 13 13 31 29 15 31 15 29 30 31 14 31 31 30 27 21 30 31 30 29 27 30 31 23 29 28 15 21 21 15 30 31 29 15 22 15 11 31 25 27 11 30 25 27 27 15 13 15 11 26 31 27 7 22 31 25 26 29 22 30 31 27 15 23 31 27 27 21 29 23 27 30 27 31 27 14 31 7 28 31 15 26 31 15 7 23 30 15 28 31 29 31 25 25 23 31 13 31 27 14 31 15 31 26 15 7 31 27 19 19 23 11 7 30 15 13 15 29 30 7 30 23 15 23 14 31 21 15 15 22 30 31 31 15 31 7 30 15 30 7 29 30 27 26 27 30 29 13 31 22 29 23 31 30 31 27 19 27 22 31 26 15 15 14 30 30 23 15 23 31 26 31 25 22 31 27 11 31 29 25 30 31 27 31 15 23 22 27 30 30 15 19 31 25 29 23 7 31 29 27 23 27 27 29 29 29 28 31 15 31 31 23 31 21 13 21 29 19 31 31 29 23 21 29 31 23 15 31 27 28 31 26 15 27 31 15 26 31 21 7 14 30 31 29 20 30 31 15 31 31 13 30 29 31 29 30 31 29 30 31 23 31 15 27 11 15 22 23 14 27 15 7 15 25 30 29 29 11 23 28 31 31 27 27 31 30 30 15 23 31 22 31 31 31 23 21 30 29 31 29 30 23 31 27 30 31 22 15 15 30 31 15 19 14 31 29 31 13 22 31 31 31 31 25 27 23 25 19 31 11 30 31 27 27 27 22 31 23 26 31 27 19 27 15 30 23 15 27 30 15 29 15 31 7 27 30 31 31 27 15 30 22 27 31 31 31 15 15 14 31 30 31 15 14 29 13 30 31 15 31 31 7 29 30 15 30 23 23 22 31 27 15 27 15 21 28 31 7 15 15 15 23 13 31 13 25 23 31 23 31 22 30 23 30 27 31 11 15 15 31 30 15 25 14 31 22 31 27 26 29 23 31 27 15 31 23 11 23 22 31 21 15 19 29 14 31 23 23 23 7 15 29 15 23 29 30 31 27 14 31 15 23 23 28 30 23 29 31 29 19 27 29 15 23 25 29 31 15 29 15 27 14 31 30 30 31 31 7 30 30 30 31 7 29 31 29 13 29 23 29 31 23 23 15 29 31 31 7 23 31 7 31 15 31 15 26 31 15 13 29 13 30 31 31 29 31 31 13 29 30 30 31 31 15 27 30 27 31 11 28 31 28 15 27 29 27 29 15 13 15 27 15 13 29 25 15 30 31 31 31 15 15 15 31 25 30 15 15 29 30 31 29 31 31 29 27 27 25 25 31 28 27 31 14 31 31 27 31 28 31 15 13 29 27 15 30 31 15 31 15 30 31 15 15 13 11 27 15 30 31 14 31 15 29 28 29 29 31 31 15 31 15 15 31 14 31 31 31 28 31 31 31 29 31 15 31 14 31 30 18 22 30 31 26 23 22 30 25 22 29 26 31 31 19 31 28 30 23 26 31 31 27 23 25 29 23 22 27 31 31 23 27 31 30 30 31 27 29 23 21 22 27 27 22 30 23 30 31 27 26 29 26 31 29 25 23 30 27 29 29 29 27 23 27 23 31 23 23 30 31 26 30 31 29 23 28 31 19 27 23 29 23 23 26 23 27 30 23 28 27 30 27 27 23 23 30 27 23 22 31 31 30 31 23 31 22 29 29 29 23 29 29 29 31 31 23 31 23 30 30 31 31 23 21 31 29 28 23 29 27 31 27 27 31 25 25 22 27 29 23 30 29 23 30 23 19 31 27 29 25 23 21 27 27 31 23 31 23 21 29 23 23 23 31 31 23 30 23 27 27 31 22 23 25 29 27 26 31 31 27 30 31 23 21 22 23 26 31 23 27 22 31 23 31 30 27 26 27 27 31 30 31 23 23 31 28 31 27 19 31 21 31 29 25 27 31 21 31 30 31 31 31 31 31 30 31 22 23 29 21 30 29 31 31 31 23 29 23 31 29 29 29 23 22 31 30 31 31 27 29 30 29 21 23 29 29 31 23 28 31 29 23 23 29 23 29 19 23 23 23 30 31 23 29 22 31 27 19 29 25 29 28 31 31 29 31 31 21 21 23 30 31 31 31 26 23 31 27 23 19 30 31 31 28 31 22 27 19 31 29 29 21 25 29 31 31 31 31 30 31 27 26 31 23 30 30 23 29 18 31 25 31 31 30 31 31 23 23 29 29 22 31 21 27 30 30 31 19 22 23 23 31 31 31 29 23 29 23 30 31 31 30 21 30 30 30 31 31 31 23 30 22 31 26 30 29 27 31 31 28 31 29 31 21 31 29 27 31 29 23 30 31 23 31 23 26 23 23 27 27 19 31 31 23 26 30 31 25 23 25 19 27 31 27 31 26 23 25 23 19 31 30 31 31 31 23 29 29 21 31 23 27 31 27 31 31 21 29 27 29 29 23 31 27 27 31 30 19 29 26 29 30 23 31 25 30 31 27 29 27 19 23 31 31 29 30 31 31 23 31 22 23 31 23 31 30 30 23 28 31 29 29 31 23 23 31 29 29 23 23 28 31 31 22 31 31 30 31 30 27 30 27 27 30 29 29 26 29 29 27 30 29 31 29 27 28 31 29 31 27 30 31 31 29 30 30 31 31 31 26 30 31 29 31 31 30 31 31 28 31 27 30 29 31 31 27 27 31 28 30 31 27 27 31 30 31 29 25 25 26 30 31 27 30 27 30 31 29 30 27 30 31 31 26 30 31 31 31 28 31 27 25 31 31 31 27 31 31 31 31 31 25 27 27 27 31 31 27 31 28 28 30 31 30 31 29 31 29 29 31 31 29 29 31 29 28 31 31 31 30 31 30 31], [5 5 5 5 5]);\r\ntruth = reshape([1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 94 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0 0 0 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 0 0 0 0 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 90 0 0 0 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 89 0 0 0 105 0 0 0 0 106 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 51 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 0 0 0 0 0 0 0 0 0 0 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 20 47 48 63 0 0 0 49 52 27 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 21 46 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 53 58 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 45 0 0 0 0 44 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 0 0 0 121 120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 85 0 0 0 0 0 0 0 0 0 111 0 0 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 74 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 0 0 0 0 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 0 0 0 0 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 0 0 0 70 77 0 0 0 0 24 0 0 0 26 25 0 0 0 0 0 0 0 0 0 79 0 0 0 69 22 0 0 0 68 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 116 0 0 0 0 117 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 54 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 67 0 43 42 55 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 41 32 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 37 0 0 40 39 122 123], [5 5 5 5 5]);\r\nassert(isequal(solve_maze5(maze), truth));","published":true,"deleted":false,"likes_count":5,"comments_count":19,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":48,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":35,"created_at":"2017-10-12T15:00:57.000Z","updated_at":"2026-03-19T20:06:56.000Z","published_at":"2017-10-16T01:51:01.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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\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 traditional maze is 2-dimensional: the navigator can move in the positive or negative directions along two axes\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\u003ex\u003c/w:t\u003e\u003c/w:r\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:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ey\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Now imagine, if you will, a 5-dimensional maze. As in the 2-dimensional case, the navigator may only move along one of these directions at any time, and some of the directions are blocked by walls. Your task is to find and give the shortest path through the given maze.\u003c/w:t\u003e\u003c/w:r\u003e\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 problem is a generalization 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://www.mathworks.com/matlabcentral/cody/problems/283\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 283\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. If you haven't solved that yet, I would recommend solving it first.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eEncoding\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 maze will be represented by an [\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\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eO\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eP\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\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\u003eQ\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e ] matrix.\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\u003eEach element of the matrix represents a valid location in the maze and the value of each element is a binary-coded representation of the walls, positive directions in which you can not move. If a value reads 0, it means the navigator is permitted to move along any of the five dimensions in the positive direction.\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\u003eWalls are bi-directional: if a wall exists between two locations, you cannot traverse it in either direction. A skilled navigator must check the destination location's walls if she wishes to move in the negative direction along any dimension.\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 start position is at the origin: subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(1,1,1,1,1)\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=\\\"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 end position is at the furthest extent: subscript\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:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(M,N,O,P,Q)\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=\\\"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 output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. Refer 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/283\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 283\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for a 2-D example.\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\u003eYou are\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNOT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\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":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":1122,"title":"USC Fall 2012 ACM: Rover Maze","description":"This Challenge is to solve Question F, Martian Pits, of the \u003chttp://contest.usc.edu/index.php/Fall12/Home USC ACM Fall 2012 Contest\u003e.\r\n\r\nThe task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on array.\r\n\r\nThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\r\n\r\n  Initial conditions are Rover Stopped and Facing +Y.\r\n  Commands are processed at 1 second intervals\r\n  \r\n  Commands and their attributes:\r\n  FORWARD: Starts rolling forward at 1 cm/s\r\n  BACKWARDS: Roll backwards at 1 cm/s\r\n  FASTER: Increase forward speed by 1 cm/s up to 5 cm/s\r\n  SLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \"Stopped\"\r\n  STOP: Halts rover movement\r\n  RIGHT: Turn rover 90 degrees to the right\r\n  LEFT: Turn the rover 90 degrees to the left\r\n  NOOP: No change in anything \r\n\r\n\r\n  Commands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\r\n\r\n  Commands FASTER and SLOWER only take effect if the rover is moving forward.\r\n\r\n\r\n*Input: [Char array]* \".\" is Flat ground, \"P\" Pit, \"R\" Rover start location, \"D\" is Destination.  Matrix max dim 50, min 1. \r\n\r\n*Output: [T]*; Drive Time to destination; -1 if not possible\r\n\r\n*Scoring: Time (msec)*\r\n\r\n\r\nThe full \u003chttp://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.in.txt USC data file\u003e\r\n\r\n*Example:*\r\n\r\n*Input: [A]*\r\n\r\n  ...................D\r\n  .P......P.P.........\r\n  .P...PPPP.P.........\r\n  .P...P....P.........\r\n  .P...P.PPPP.........\r\n  .P.PPP.P............\r\n  .P.P...P............\r\n  .PPP.PPPPPPPPPPPPPPP\r\n  ....R...............\r\n  PPPPPPPPPPPPPPPPPPPP\r\n\r\n*Output: [19]* as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop. \r\n\r\nOnce again my code is large thus the contest will be scored based on Processing Time.\r\n\r\n*Hints:* One Speed-Up method is to do an initial Start/Finish connectivity check.\r\n \r\n\r\n\u003chttp://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.yucheng.cpp.txt Martian Pits C solution\u003e.  Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.","description_html":"\u003cp\u003eThis Challenge is to solve Question F, Martian Pits, of the \u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home\"\u003eUSC ACM Fall 2012 Contest\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on array.\u003c/p\u003e\u003cp\u003eThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eInitial conditions are Rover Stopped and Facing +Y.\r\nCommands are processed at 1 second intervals\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands and their attributes:\r\nFORWARD: Starts rolling forward at 1 cm/s\r\nBACKWARDS: Roll backwards at 1 cm/s\r\nFASTER: Increase forward speed by 1 cm/s up to 5 cm/s\r\nSLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \"Stopped\"\r\nSTOP: Halts rover movement\r\nRIGHT: Turn rover 90 degrees to the right\r\nLEFT: Turn the rover 90 degrees to the left\r\nNOOP: No change in anything \r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eCommands FASTER and SLOWER only take effect if the rover is moving forward.\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput: [Char array]\u003c/b\u003e \".\" is Flat ground, \"P\" Pit, \"R\" Rover start location, \"D\" is Destination.  Matrix max dim 50, min 1.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput: [T]\u003c/b\u003e; Drive Time to destination; -1 if not possible\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring: Time (msec)\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe full \u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.in.txt\"\u003eUSC data file\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput: [A]\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e...................D\r\n.P......P.P.........\r\n.P...PPPP.P.........\r\n.P...P....P.........\r\n.P...P.PPPP.........\r\n.P.PPP.P............\r\n.P.P...P............\r\n.PPP.PPPPPPPPPPPPPPP\r\n....R...............\r\nPPPPPPPPPPPPPPPPPPPP\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput: [19]\u003c/b\u003e as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop.\u003c/p\u003e\u003cp\u003eOnce again my code is large thus the contest will be scored based on Processing Time.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e One Speed-Up method is to do an initial Start/Finish connectivity check.\u003c/p\u003e\u003cp\u003e\u003ca href=\"http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.yucheng.cpp.txt\"\u003eMartian Pits C solution\u003c/a\u003e.  Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.\u003c/p\u003e","function_template":"function t=Pits(A)\r\n  t=-1;\r\n\r\nend","test_suite":"feval(@assignin,'caller','score',1000);\r\n%%\r\nurlwrite('http://contest.usc.edu/index.php/Fall12/Home?action=download\u0026upname=pits.in.txt','pits.in.txt');\r\n%%\r\n fid=fopen('pits.in.txt','r');\r\n t_expect=[19 2 2 3 -1 7 14 23 401 200 42 -1 27 -1];\r\n \r\n t1=0;\r\n qty=fscanf(fid,'%i',1);\r\nfor q=1:qty %qty\r\n  n = fscanf(fid,'%f %f\\n',2)'; % array size\r\n  A=zeros(n);\r\n  for i=1:n(1)\r\n   strv=fgetl(fid);\r\n   %A(i,:)=strv-'.';\r\n   A(i,:)=strv;\r\n  end\r\n\r\n  ta=clock;\r\n   [t]=Pits(char(A)) ;\r\n  t1=t1+etime(clock,ta)*1000; % Time in msec\r\n   \r\n  fprintf('%2i  Cmds %3.0f  Sum Time %.0f \\n',q,t,t1)\r\n\r\n  %isequal(t,t_expect(q))\r\n\r\n  assert(isequal(t,t_expect(q)));\r\n\r\nend % q\r\n\r\nt2=min(1000,t1);\r\nfprintf('Actual Time = %.1f msec\\n',t1)\r\nfeval(@assignin,'caller','score',floor(t2));","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":"2012-12-14T01:14:38.000Z","updated_at":"2012-12-14T02:24:14.000Z","published_at":"2012-12-14T02:24: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 Challenge is to solve Question F, Martian Pits, of the\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://contest.usc.edu/index.php/Fall12/Home\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUSC ACM Fall 2012 Contest\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 task is to determine the minimum time for the Rover to drive from its current position to a Goal location. The Rover must STOP on the Goal location. Commands are processed at 1 Cmd per sec. Rover must stay on 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:t\u003eThis is an intriguing Maze problem that incorporates turn penalties, variable speed forward, and a fixed reverse speed.\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[Initial conditions are Rover Stopped and Facing +Y.\\nCommands are processed at 1 second intervals\\n\\nCommands and their attributes:\\nFORWARD: Starts rolling forward at 1 cm/s\\nBACKWARDS: Roll backwards at 1 cm/s\\nFASTER: Increase forward speed by 1 cm/s up to 5 cm/s\\nSLOWER: Decrease forward speed by 1 cm/s down to 0 cm/s. At 0 cm/s Rover is \\\"Stopped\\\"\\nSTOP: Halts rover movement\\nRIGHT: Turn rover 90 degrees to the right\\nLEFT: Turn the rover 90 degrees to the left\\nNOOP: No change in anything \\n\\nCommands FORWARD, BACKWARDS, RIGHT, LEFT only take effect if the rover is stopped. A moving rover ignores these commands.\\n\\nCommands FASTER and SLOWER only take effect if the rover is moving forward.]]\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: [Char array]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \\\".\\\" is Flat ground, \\\"P\\\" Pit, \\\"R\\\" Rover start location, \\\"D\\\" is Destination. Matrix max dim 50, min 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\u003eOutput: [T]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e; Drive Time to destination; -1 if not possible\u003c/w:t\u003e\u003c/w:r\u003e\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: 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:t\u003eThe full\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://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.in.txt\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUSC data file\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: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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput: [A]\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[...................D\\n.P......P.P.........\\n.P...PPPP.P.........\\n.P...P....P.........\\n.P...P.PPPP.........\\n.P.PPP.P............\\n.P.P...P............\\n.PPP.PPPPPPPPPPPPPPP\\n....R...............\\nPPPPPPPPPPPPPPPPPPPP]]\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: [19]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as the best path is L, Fwd, Faster, Slower, Stop to (9,1). The cmds to reach (1,1) are R, Fwd, Faster, Faster, Slower, Stop. Cmds to optimally reach (1,20) are R, Fwd, Faster, Faster, Faster, Faster, Slower, Stop.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eOnce again my code is large thus the contest will be scored based on Processing 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e One Speed-Up method is to do an initial Start/Finish connectivity check.\u003c/w:t\u003e\u003c/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://contest.usc.edu/index.php/Fall12/Home?action=download\u0026amp;upname=pits.yucheng.cpp.txt\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMartian Pits C solution\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Time to Solve: 40 minutes. Only three solved this puzzle during the contest. Start.\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\"}]}"}],"term":"tag:\"maze\"","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:\"maze\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"maze\"","","\"","maze","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f251531e890\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f251531e7f0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f251531df30\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f251531eb10\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f251531ea70\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f251531e9d0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f251531e930\u003e":"tag:\"maze\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f251531e930\u003e":"tag:\"maze\""},"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:\"maze\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"maze\"","","\"","maze","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f251531e890\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f251531e7f0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f251531df30\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f251531eb10\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f251531ea70\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f251531e9d0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f251531e930\u003e":"tag:\"maze\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f251531e930\u003e":"tag:\"maze\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1246,"difficulty_rating":"easy"},{"id":1245,"difficulty_rating":"easy"},{"id":60591,"difficulty_rating":"easy"},{"id":60608,"difficulty_rating":"easy"},{"id":60638,"difficulty_rating":"easy"},{"id":60593,"difficulty_rating":"easy"},{"id":60642,"difficulty_rating":"easy-medium"},{"id":60623,"difficulty_rating":"easy-medium"},{"id":60603,"difficulty_rating":"easy-medium"},{"id":60628,"difficulty_rating":"easy-medium"},{"id":60598,"difficulty_rating":"easy-medium"},{"id":1903,"difficulty_rating":"easy-medium"},{"id":1944,"difficulty_rating":"medium"},{"id":1231,"difficulty_rating":"medium"},{"id":1238,"difficulty_rating":"medium"},{"id":1241,"difficulty_rating":"medium"},{"id":283,"difficulty_rating":"medium-hard"},{"id":1244,"difficulty_rating":"medium-hard"},{"id":44378,"difficulty_rating":"hard"},{"id":1255,"difficulty_rating":"unrated"},{"id":1122,"difficulty_rating":"unrated"}]}}