{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.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":"2026-04-06T00: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":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":44237,"title":"Mastermind II: Solve in 8 or less","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved \u0026\u0026 Lmax\u003c9 % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==8 % length of 8 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 8\r\n fprintf('\\n Solution exceeded 8 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":15,"test_suite_updated_at":"2017-06-18T18:19:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T17:46:47.000Z","updated_at":"2025-12-12T14:09:25.000Z","published_at":"2017-06-18T18:16:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44236,"title":"Mastermind I: Solve all 1296 cases","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 1 1];\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n   mguess(end+1,:)=mguessn;\r\n   mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n   mpegs(end,2)=mc(ptr,mguessptr);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Lsol=size(mguess,1);\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\n\r\nif solved\r\n fprintf('Solved in %.2f\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T14:17:00.000Z","updated_at":"2025-12-12T14:05:24.000Z","published_at":"2017-06-18T15:51:46.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Brute force can work but masking is much more efficient. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":46938,"title":"Numerical computation of the optimal shooting angle of a catapult","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 879.667px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.5px 439.833px; transform-origin: 406.5px 439.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 64.3333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 32.1667px; text-align: left; transform-origin: 383.5px 32.1667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eConsider a capapult that fires a projects into the air with an initial velocity\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"56.5\" height=\"20\" style=\"width: 56.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. The free-flying projectile is subjected to air friction and a gravitional force. Given a desired target \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"109\" height=\"21\" style=\"width: 109px; height: 21px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and an initial velocity \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"56.5\" height=\"20\" style=\"width: 56.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, find the optimal shooting angle \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAlCAYAAAAjt+tHAAACp0lEQVRYR+3WWchVdRQF8J8USUSID5qKEInigCmKOECSgggi2KQoRg4oOEFOIBGoUCil4IQDkSShmSPaQxTiSCg+KinRS+BDSi+WhKaBKBv2lcPh3u8OCh/CvU+Xc/5n77XXXnvtfxed/OvSyfm1AbQZaDPw3DHwIoZhLF7FNZzH3Vb9pFEG4tw4bMMFbMZQfIMrWIS/qoB4BYNxHf9VA9kIgDjzHrbgR6zJioOBXfgIK7ADj0pJZuIQ3sLFVgG8jW/xRyb7sxBoLT7DMSzEnax4JE5iELZjXr6bilO4WYlRj4EB2I8hmfyHUhUVAJcwGzewBF9m5cHaYuzJZ+MxHecaARD924SlOJp9/rsGgKsIun/P990Ryd5F/6T/BH4ta6EjBt7J6iNm9Llc/Uv4AitRC0BU2xe/pH5CsP8Xi6gFoCe+xjQE8gUoV/8ytiYzMYofZm8rwH9OgPOxFxtycmbhcr0WvI/jeWhVJiqLuAcOYlJWFywFyKB8dD6L/ztThP9iIn7C7Y4ARO8rH/2GGTnHZQCh8CN4E7uxGvdLhz7APkwuVl2vBeF0MVaVCViGQF/+RXsquqjFUlf0yxF+0KgPRC8PNGGtAS6M6kwT3zw5WhZhUdkReEoNB+uWwgqVn8Yc3HoWAIqBi8ouxw6RhdP1zt7HNJRtuCE8ZQaKyv4qZ7y8RF7AeoQLdiTSlgAMxGEMxzp8XiXKG/geY/BpuuXDhrJVOVRmoB6AqD624cb085j94nJqGkcZQB98hwk1GBiVIxqJ5ubdoOmkHflAzG0soI9T5ctxLz94DaGLWDLhDdGqloRXz4gqVf5T2HC9EliYVDje2WeRPIBUW0bxbAQ+yXtfXKdez6UUztfy/a9RJ3yqnjb7cb0bUbPxmj7fBtBmoNMZeAwulJEmqW2YowAAAABJRU5ErkJggg==\" width=\"16\" height=\"18.5\" style=\"width: 16px; height: 18.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eof the catapult that minimizes the distance between the target and the trajectory of the fired projectile. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42.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: 383.5px 21.25px; text-align: left; transform-origin: 383.5px 21.25px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etip 1:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e Consider the states \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAABwElEQVRYR+3VS6hNcRTH8c9VKDKSiTKRiYzlGUaSYsRAMbkD14SSooiUt4nEwMDUoxhI6d6ukRtKMWBmrESUwkheLa20O23249zTGdy964zO/7++a/1+a63/iCF8I0Ng6qADVb2Tt5N3WhToGmlaZPxXkJkt7ywswVZsxzrcx3584s8jsQbnsQL7cKeJH2XyzsVSvMV63MICbMZDbMRBfMMWHMXVfqHF+4txA5sy+D0cwjG8bwIqnq1qpDkpY1T2IKs7iVdtgXGvChpnxnAtIXtxHb8GDV2NSXzFNryoAC7KRCOxM2Vn61QaTXUbK7E7PS6LNR978kx0/AmcagONTo5so3niO4fj+FESbHbKvgqP20JDhV1Yiw+IBprIaj7+R+KosjV0OY7kbxnG8Q47snvDu1gOU/hZSKIRNMYjfPmChbiMK3iC4ryGrzGv4ddNPO+pujY0gBHkMF5n5qdzG0UXhrcXcQAv8Sb/i23VOz61oeHfzgz8Of2Laoqyxb69hHk4i7v4XuJtbWg/s957t4P+VaTORmoq/VDk3YBHbTdS0wrjoY8qR3MSnuECnva+vYOQtzLZDlopUT8HZo68vwGa/l8pXtmErgAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6hOYRQG4OfIJSTlklImIsmY3IoMJOUyIAmlFCYIhQ5K7ilJJMVEuRUDkYgZmYhESsZyi1IuyV3r9P3atv8//22fzsC/p9+31vu973rftdt0w9fWDZhaoF2qekvelryFKNAyUiEyVmryf8vbAyMwG3MxBZexBu/o+ElMwn6Mw2pcqGce5eTtg5F4gak4hwGYiZuYhvX4illox9FmQbP1w3EG01PzS9iIrXhdD1D2bjUj9U4yBrOrid0OPGoUMOqqgcadVTieQFbiJH51NehE3MBHzMH9CoCDEI+alwx2ByeSCb/XI2/cDVOdx3gsTTPO4w7FMbxKY5iAdeiV3B1m/KNONXnDyXuSeQJoH7bjRw51BYbgIEqsZuA0HmIZ3pZqOgONs8WYjDcIA13PN0BfbE5SPs88ZmCa/2gswtNaQMemZtFwFK4l+RYk94aksRxuIxT5nDNYPOYQxmBJyn0HbpZpxKM/PmAwDuMIwhDZvMZcI6+7cBb3KhirxDSWzCZ8yTMNwGgShyHDT+xO2ygMEEwOYG2a0bN09pdBcuChwilswK1y7g3GC1Pj92l+wSbAS1/s25CrH/biYsY0ebI9sQXfcub6R95m8p6vjf0ceQ2nf8ofVotMIw8JA3a6n4sGHZZyHXl9UunFRYJGhLalvD7OAMZ8l+NK6c9UFGhELdwdUXuQYxgZj9jsLG2yIkAjThG1aFrue4n5uFvLRmrERDXVFMG0JqByy6HuwmYKWkybUa9q7W9V624prHV7AQAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e as the x- and y-position of the projectile, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6iNcRQF8N+lKGJAJkpJSh5T5VVIJEURRZ6lPAoloUgpz0wklIGJgUchUiJCkUwYUAbKQJSIUh6FvNq3ffX5Oufee65z3IFz6nTqfP9vr73XXmv9W3TDp6UbMDVBG8p6k94mvXVhoCmkutBYrcj/TW8PDMEszMFEXMJ6vKP1khiP/RiNNThbyz4q0dsbw/ASk3Aa/TAD1zEZG/EVM7ENR/4WtPj+YJzElCx+EZuwHa9rASqe7UhIvZLGmOxyTrcTj7oKGO91BBpnVuNYgqzCcfxsNOg4XMNHzMaDKoADEE2twAjcwF7cKjfZmUlDVGcwFktyx2Xc/tiXDcUaRmEXopEFeFzLTkPJe1I88V4U3oHvJdS5+Iyrhanm4XylRtubNJ4twgS8QQgoii7F2wJo+HoonuNb4f/w9xVEQ0H17097oCOxNb/Ds8ArzE/1DspwuI0fpcmjboTGGGzBp2qgYY+++ICBOITDuIuiX2Ov4dfY2SncrwA4NQMkUuxZWQBtkwZgFImunmTnuzONwh6x2wPYgId4kc8irYr2CdWuw/JMsTi7FvcqTRrgobIo/D73F9MUaYu8PYg+aYVzpR221W3bcYBHqFzAyszt1jOdsUxXcyBsFOuZXvZ3I0Gj2WU4kRdHaKPhkwbA4qR4IZ7+C9CeKc4QadxKX+oJGsVDodNwFDdT0WGbyOHN5WuwHjuNGhEYYbmwzJ20VfxGDv8RDI1Wb1XV12PSmi3VBK2Zslpe6BZ6fwFJmW0pj/+3QwAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAAB8ElEQVRYR+3VS6hNcRTH8c+VR8hIiiuSGMjERHmFkaQwIQlTjwElhTxK4XpMJIqBmWcxQMlrpmRCogyMRYQIKfJq3dapM7jOPpu7u4Ozd+3B7v/4rvVbv7V2lwF4ugaAqYZWqnotby1vvyhQG6lfZPzbJZ0t7yBMwBIsw1xcx2Z8oPcnMRuHMR0bcblMPfqSdxgm4xXm4SJGYRHuYgG24jsWYxdO/i+0+Xw3zmNhXn4V27Abb8qAmvcWGWloyhiZ3cjs9uHpvwLjXBE09mzA6YSsxxn8rho6C3fwBUvxqA1gJLMa67AW78vIG3vDVJcwMy+IGhc9U3EWH7GmLDScfDDNE6BD2IufLajDcQSr8LgstCHRHLxFGOhWSvauBXQ5ZmAixpeFTsOOfKfgJl5jRbp3TA6He/iVQUzCHvRgO+K7pbzRHiPxGaNxHCdwH839GsaIft2PC3iYwMEJjCAe4FgRNIBxSUT3PCM/kNMo2iNqexRb8AQvci2mVaN9YmLNzzIMaQca9VuZF3/Kg5FNQ7ZIJuZtRD8i5buCH5nl2DwTgb9EmKkw06IWaLUesoZCz3AtN1YOjb/QTpzC14RGuTZhXLZcuD/a51u7Y7BIhXDnuYJNt5td3M7sLYL2tV65vJ0NbVmSqmpaQ3sV6Bx5/wD4ZmspFWOBmAAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e as the x- and y-velocity. Then, the trajectory of the projectile can be found by solving the following ordinary differential equation (ODE):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAsCAYAAADl06/eAAAETUlEQVRoQ+3aaai9UxTH8c9f5jEkESl5I5Eyz0oZQ4okQ0JmMmSIDJmHJJEo74yFMmSIFzIW8QJ5gTcyy5Qp89Dvbz//zr33dM8599z/Pp3au26dzrOfs/b+rrXX+q3nuUu0UYXAkipWmhENdKUgaKAb6EoEKplpEd1AVyJQyUyL6Aa6EoFKZlpETwnoOOoIXI/HcDl+qbT2qTIzbkSvi3txEL7DAXhjqghUWuy4oFtED+mocUEPaaZNa6ArxUAD3UBXIlDJTIvoBroSgUpm+kX0CtgUB+IQ7IYncBa+Z+nLgl1wA7bCqXi40nqXl5k1sAMOw37YAMfjyWJwLVyAM/B8YfH1KIvpB3oVbI7PsTseRAztW4zshXPxB/bHJbhjFKMD5l6Gq8b8vbdxJN4f8nc2KfP+xM04tjRiAftP6XxXw06lMTsOHw/520unDcrRG+N+7F2Aps0+H5fiq1EMjTB3EqB7l3cK7sJbBfjB+LQE3L8j7GPG1EGgVy4pIhH8VIniK/HOQg1OwX3blZSxEe7GN8ie/xpn7YNA57c7D+fzybgHC/bsOIutdG/vKX6hRPVn49oeBvTOeA4/I8coR2q+kUIS58QZ1467wAncvypuwem4FReXk9xvKVuXenVoufgorsYnsycPAzqF8aFSlY8pObuf0VTuFJHMiVLJI9MYnbYRJlEYN+LZsqekj9ljm1K37ixFN4olgRWFdubsx8WDQEeB5OYUwIw8d06x+ruP4ZVKFKcyvzIG6EkXw+3xCDbDhzi8T00KlzC5r0d95LubEFU2R/HMBzrXjsKuiGZMQZjPwx37RPO0gt4QtxUZe0LZe79TnNO7fh+JlyDZE5F/X/QG43ygt8RF5W8LPIMvezycXJyG5aWiNRcL9KRSzYq4EB/h8ZKnU2u6Uxw9vUdJE/2k7Tq4vQRjeo8ZgqEXdKRcPPVT8VY8mxtfRW8ljoejp5N/H8Cbs8iMG9G1QGfva5c0mNdvOb0p/AmuX3vUVneKE1Rp2tJM/T5rkUkb52FNXFPunzGlAx3IARePppuK93JD55ku/5yNdF2pqrk2x3OlEI6TOmqB3rYEzHr4oKSB03oasR3L9ejpRHhUV/JybzTnFOxTlEda94y82su8GS16B7p7JZVk/mPJx4naAO9Gnm9E7qyO60rB6CfipyWik48j4/I8J6oqKimpsRtpua8o+TZRnc9zZFuZnEDNaUjHnKgP6LBalj4GqY6FRNe0gF7I3gbdE8kXp72Hk/BDd0MDPQjdaNdz2lPb8vTzaHzbQI8GcNjZSTdJGekzkj5+a6CHRTfavKizNDGJ6hTQZWN5pI4I9hfH6AxH29pkZqeHiCqLWEirHu0dZXZO+S5RPUMoLCbovBxIIUxHlX8Te70s4rXl+Ox6Mpj/7zeiQk4sC3gZ7+Lpsu9etbZ0ymKCntSmp8JuA13JTQ10A12JQCUzLaIb6EoEKpn5D7tJ5C2FZ3WyAAAAAElFTkSuQmCC\" width=\"45\" height=\"22\" style=\"width: 45px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e,     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAsCAYAAAAKEcTgAAAEXUlEQVRoQ+3ZWah3UxgG8N+HjFEIEYkIKZR5doUUETLLPEaGzPM8ZVYooWSKC0MiLkTciAtKwo15iChD5qFHa2t3cv72//zPt84+X3vVqa++vdb7rmc963mfd/0XGEY1BBZUizQEMoBdkQQD2APYFRGoGGpg9gB2RQQqhhqYPYBdEYGKoQZm9xjs5XA59sZ5eAx/Vcx3Xocal9nb4HksjydxJL6d1whUTH5csAdmT3A444I9Qahh6gB2RQ4MYA9gV0SgYqiB2QPYFRGoGGoUs2PztsQ+2A2r4Ag8XfKL1z4LJ+MFnIKvKuY+26EWw1rYA3thezxV9pVeIlhti2uxMU4oTV3nPEaBvWZZ5TfcgMPwQAH3T1yDZbA1vsHh+Khz5NEfboBHsemE612MKzqusRTWxWfYAQ+X5m3XQqadcTp+xe44H3d0XPufz7pq9vG4C28U0PfEJyWhhdGuzwXYbdzWwIPYpYD6BM7EBfhyHIDb33YFe/MiH6vjbnyNS/H7TAP3fN6SRS7C5GcKm7PftybJuyvY7ZN+sbD700kCz4O5zW1Oqsfhnkkf3bqCvTRuxEm4GeeW056KWdbbqXwXLf+5MOMWfDwPAG6n2Dy6/YDIZiS0y4i2X4Wj8e5MZCQgxnlch+cKsyMlU8eBOA134kccU5xMXgjDlBnrXZddzvI3KZaPFEd2aNHw/wsRxxaZzdwDZgr2Fngca+N97Pcf+hU9D/tT/d8pWcU+5iYci64JZ+pcF8g4k7AzRTEjzusi/DEC7cUL0c7G5zMFezXcWuzPUdhuGuDiSzfEvVO0LZ41zB7Hhs0l2LnFB5V9pm9IYRx1mxv8Q8jMy4HELo7N7CWQk/qgABbmRg6ak47f3rFcl+ZHhPjQ9sghvFKagFyxvo+NcE75Ww/P4ovWbY5UpKl5Gdl/xoq4HjeV7/btAnZOdYVyOtHcnFQKRYL/VICO325OOkFzivmp7JdpUAyzMyc/pb3WQ6Rj8yJ332Plcotvx6tou7DIYPx2ZPIhvF72EsxSm4JPvPmF6AT2ZmXBlfBe6QhPbBW2rcr/R58jDanU0bXpCl907BKsWrqvJNSnEaADXm5vnEOYemWrWYt2h7Gn4s3iqNJZ5q9p5jYptzYO7bui7Z3Ajj5HKsLGVOLobK5QM9KeB7y05mF3/j3K0uVKptWPk2mKZp/ADiv3L4AGqOhz2NvIQ3LNe0iK/LK4uhiFppnLjcjh3NcyDCmkncCeTSCSSFiTG/DSbC7ck7VyUIcU6bmtxfTqYKewnrGQ30/mGvP1kWbt/imvnQeXN5XL8GGRn9SDzg9R42yssU55NUx1XlTfTxqXNQqb6Py/FrBru94V7KyX9+91yvNj26FEv+Ne0hwtyqOajORdIAU23jROpRmp+nkzSSv/9qKM9DhuZBIcYhvjp/MA9V8jRSQWazo/PknsPs2txuw+bbp3ucy2Zvdug31KaAC74mkMYA9gV0SgYqiB2RXB/huK2uktuGazvgAAAABJRU5ErkJggg==\" width=\"45.5\" height=\"22\" style=\"width: 45.5px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"63\" height=\"22\" style=\"width: 63px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e,  \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e    \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"87.5\" height=\"22\" style=\"width: 87.5px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.   \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63.1667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 31.5833px; text-align: left; transform-origin: 383.5px 31.5833px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"97.5\" height=\"19.5\" style=\"width: 97.5px; height: 19.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAAAjCAYAAADyrNZPAAAElUlEQVRoQ+2ZachVVRSGny+h0tBwtn6o/VBRcEKUKAwKy5BCxcRUFMURJ0gpSqkoySlTK2cUxxx+OOMsSRoRkZGgNPyLCCvDQDE1TOWVdT72dzznnrPv7d4j9zsH7q+7h7Xftfa73rV2DfmXGQI1me2cb0wOfoZBkIOfg58hAhlunUd+Dn6GCGS4dR755Qf/AeAF4DvgT3e7+gT+Q8AAYCDwK/AY3FV7m4HTwK0S/NAJ2Al0j1ljLvAe8F99BL8dsBR4EJgK/GIgPAWsA/YA84CrRThADnwN+Chm7gVgEPBN+P/6EPktgTVAP+AV4JgDgs4/HlgLvGkA3vR0QHtgI7Ad+Cli7iXgXNTNqnbwdb4ZwDKL7nHA3yGAnjDg2gKvAqc8wdeazwDTgcs+c6sdfPG6OF1R/zbwAXA7BFBDo6RJwCfAG8CNlCAG668CdqecUzus2sF/3qEZJdr9MQCJs5cAZ4FhMfQRNXUksNX++Bo4ARwAvgf+TXJGtYMfgHrF5J4ASgJRsvB4EnBAU2A9MDhirLj/fWBXoVsUBb6uYRugC9AbeBL4Fng3LJUAybcJJrMupjC4kkMetgQ6JUVEPw18acbNNBpKsrWxSUvlih5GbT1Dk6SgYlVUFPiSZR2BscBwWyzuyipZTTYN+0+Ctc2Bz4D+SadK+F/KRRF9LWFcI+BjUzNJdOKC/w4gXe77qZhSwL4OjHYmK4eI0upofP1fiHa0wKaEqFGmb5IyUioNvrufD/hpnRvnHDlhCPAhoEBWTSGdrzxQ54sD31UA0rDTIgoQgS6PSiPfU0D4hk0Zxj9qBZS0vQ/4Ksak+RMTZgGbhatYYzUgeoqksjjw5bFtgCpA0YqiIfwpMYnvJ0Zo5zJg6b2kG0A+4BdLO2ED3YS8EpgFXHcHxYEfSDSVxi8DZ0Ira2E55KhlfG9kKjChgXH3W56RPxuY/z/ZF6itSCqLAl9GS9moKDkCjAL+cowJqsaXLLHIQffrl1ZqStvvsEMUqgd8zxnUAXKm8ExsrLUAtgAvRlSFAv5Z4zJl9X0e1lQ64co0qZjDxrtpiqwfgKHAeY9zFRoagJ+a83tZlabS2S04BLwcolJaklG3w6cJlQX4bnshTr+79UCcuCjGFwHtjfHpaqrHoSz9FTDCpJI6g0oYKlh0K6Rdi2m/FnOIUua4XUvZrXayql33C8RFV6PY8G1uBej3o2ewdbaGnVoOc6Iq3TDnSxatMCP2GtDPmWxqBiywii18gFIAKvfcoKWsSj3ctXSds9yCyi3exAK65Xos0U1XY068rTU/BSRMNgCLgd+dgwjHhcDjgIL5j6hDhsGPe5HRS496FZ+X+OJTbqDj1u/gVJmK/t9soMBVsEnNKSGq9+5+biI+aEGplrQrxTVeUlbz1TtSxIsllD8WRaxZu34Y/D6WoBTZWvCkyUk1ikp5ZssKdHffR+wJUYlXCk11gFoQ4vkvYiiltUV4N0CSVWwQtKRFU3or6Gs3Q3tpnUMmRH6OaF/XwaHau5r3g9NjbcjBz9A9Ofg5+BkikOHWeeTn4GeIQIZb55GfIfh3AC3XATPu1FSdAAAAAElFTkSuQmCC\" width=\"47.5\" height=\"17.5\" style=\"width: 47.5px; height: 17.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eis the friction coefficient between the air and the projectile. Use the ode45.m function to compute the trajectory of the projectile with initial conditions \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"231.5\" height=\"20\" style=\"width: 231.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. Plotting \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAABwElEQVRYR+3VS6hNcRTH8c9VKDKSiTKRiYzlGUaSYsRAMbkD14SSooiUt4nEwMDUoxhI6d6ukRtKMWBmrESUwkheLa20O23249zTGdy964zO/7++a/1+a63/iCF8I0Ng6qADVb2Tt5N3WhToGmlaZPxXkJkt7ywswVZsxzrcx3584s8jsQbnsQL7cKeJH2XyzsVSvMV63MICbMZDbMRBfMMWHMXVfqHF+4txA5sy+D0cwjG8bwIqnq1qpDkpY1T2IKs7iVdtgXGvChpnxnAtIXtxHb8GDV2NSXzFNryoAC7KRCOxM2Vn61QaTXUbK7E7PS6LNR978kx0/AmcagONTo5so3niO4fj+FESbHbKvgqP20JDhV1Yiw+IBprIaj7+R+KosjV0OY7kbxnG8Q47snvDu1gOU/hZSKIRNMYjfPmChbiMK3iC4ryGrzGv4ddNPO+pujY0gBHkMF5n5qdzG0UXhrcXcQAv8Sb/i23VOz61oeHfzgz8Of2Laoqyxb69hHk4i7v4XuJtbWg/s957t4P+VaTORmoq/VDk3YBHbTdS0wrjoY8qR3MSnuECnva+vYOQtzLZDlopUT8HZo68vwGa/l8pXtmErgAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e vs. \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6hOYRQG4OfIJSTlklImIsmY3IoMJOUyIAmlFCYIhQ5K7ilJJMVEuRUDkYgZmYhESsZyi1IuyV3r9P3atv8//22fzsC/p9+31vu973rftdt0w9fWDZhaoF2qekvelryFKNAyUiEyVmryf8vbAyMwG3MxBZexBu/o+ElMwn6Mw2pcqGce5eTtg5F4gak4hwGYiZuYhvX4illox9FmQbP1w3EG01PzS9iIrXhdD1D2bjUj9U4yBrOrid0OPGoUMOqqgcadVTieQFbiJH51NehE3MBHzMH9CoCDEI+alwx2ByeSCb/XI2/cDVOdx3gsTTPO4w7FMbxKY5iAdeiV3B1m/KNONXnDyXuSeQJoH7bjRw51BYbgIEqsZuA0HmIZ3pZqOgONs8WYjDcIA13PN0BfbE5SPs88ZmCa/2gswtNaQMemZtFwFK4l+RYk94aksRxuIxT5nDNYPOYQxmBJyn0HbpZpxKM/PmAwDuMIwhDZvMZcI6+7cBb3KhirxDSWzCZ8yTMNwGgShyHDT+xO2ygMEEwOYG2a0bN09pdBcuChwilswK1y7g3GC1Pj92l+wSbAS1/s25CrH/biYsY0ebI9sQXfcub6R95m8p6vjf0ceQ2nf8ofVotMIw8JA3a6n4sGHZZyHXl9UunFRYJGhLalvD7OAMZ8l+NK6c9UFGhELdwdUXuQYxgZj9jsLG2yIkAjThG1aFrue4n5uFvLRmrERDXVFMG0JqByy6HuwmYKWkybUa9q7W9V624prHV7AQAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e will result in the x-y trajectory of the projectile, as shown in the figure below.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.8333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.9167px; text-align: left; transform-origin: 383.5px 10.9167px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etip 2: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eUse the following update law, to incrementally update the shooting angle \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAoCAYAAADpE0oSAAAC8klEQVRYR+3WTagWdRQG8J8UWUS1Ma021UItSUOMPoTIRUptlESpLDUoFQr60EpRzEySKKiUNMSPiErpQyylTVnaIjFaZFBUm9CFSpJkiJqIGAfOXF7mzvveudzh3s2d3cz8/+c5H895zhligJ4hA4RrELjfMj+Y6p5SfTHG4U5cgV+wF6d6ulj+XzfVce4uvI3v8AZuwRYcwAL81RvwOsBx5gG8iS/xYkYYEa/DbDyLtbhQF7wO8D14H38myOEW48vxCj7DE/i3KeCR+ABjEvSLkuECeB9m4VATwJfjdTyJT7OO/7QB/hkP4o8mgKdltGEr6liO9hK8hufQGPBwbMRU7MDjKEd7Gd7KTERLPYIjfY14OrankYUJULZ5Nbbi3mR7ZKXsXFs/qlgdtX0Hj+E3zMSvFRZuwicYi/VYhP/6EnEoU7RHweincLLCYJShqHu7rPQq4qjVh3U9T6dCYL7pxZ1ui0ArUyPK+/F9hcGrsAkzsBtzcLQvwK0GOzH1dnyOa7O2we6Qy2D6lbgZo7MjjlU5VCZXK1M3ZI+eKV28CCsQqlUmXwCHym3G7wh+HK8DHF5+jFvxElZVXLoR23AHlqa6nW85V7A9MrISrf+6jpUj7gk4oo3ptBp7KoZGGJ6MrxBaEOJT+ZSBr8NHmNQm4tuy1cLY3JzNrYbD3rIkXUftLgMPzdQ9nax9BqfT8ghE3e/O2kVJyvO3IGfcid6OTSWIFs9+/IBz8VKlXEVUJ1omzjXpUIhLKNS3bYZ+IT7v5fkg6wuI91C/LkergOPbeCzJvSouXJ/1CqXqtF+F+Lybqf4JD2dpug2POhtIXV0oxGdidkOkOCZc5VbSJPCwnN/3paexPMzrD+AJ2IU1CCeexxR8XUdA6qa16lysuKFoD+V4DAGJrTQ649IUkq60N5XqYhsZlaLyN17FfDyKG7ATBwuPmwIO1sc28iMW42x2QgyPSPvLqXQd26kv6a59t6mIawM2nepB4B4zMGA1/h/Q3qEpP5IZBgAAAABJRU5ErkJggg==\" width=\"15\" height=\"20\" style=\"width: 15px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.8333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.9167px; text-align: left; transform-origin: 383.5px 10.9167px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"153.5\" height=\"20\" style=\"width: 153.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 43.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 21.8333px; text-align: left; transform-origin: 383.5px 21.8333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAoCAYAAAB6tz31AAAE/klEQVRoQ+2Zach1UxiGrw+RKWPGxA+RiIwJITJEROYx8zzPZeaHIUOmzGQeMiSilFCEkOmHEJkzRIaQWVc963u3be9z1t7v3vq+9927TqfOWetZa93rfu5n2DMYnl4RmNGr9cE4A8A9k2AAeAC4ZwR6Nj8weAC4ZwR6Nj8weAC4ZwRgMeAuYKuMlV4DPgKeBZ4A3gX+HjVvYPAEwA8CDwHrAhcDBwIfFMCbA1gJOAnYIH6/NcZ+WwfyAPAEwHcEkzcErgF2A94pATcvcDnweTD4KuBl4BTglyqQB4DbAfwZcD6wGXBLsP2p2RFgCbA8sCuwJbAesOAYrbweOL6OURVzkwY3YXAC2L3I9reBC2Y3gBcN1zsiA9Ti2f5PgF33TGDZukudVSViSUB92wUwgFwB3Al8CPyVEe2bDJkMgzsDeIlwU130C2Br4HngLODrJqfJGGsgMYofBbwEHAm8mjGv7ZDJADxfXL7ZRiuJmB84BDg5XEEW/QacHZ8TIqq2PVzVvM2BhyNF2iP0rUv7ZVuTAXj18Cw1v3GQS24qWw8D7omkep5g2DHxu5rX1TM3cGHo2XHAleMS+Q4WbgvwDYBnN+CZpv3UJMgVNfDqUp63CXBbSMU+wHsdHDKZWCZy0UVq8tAOl5ppqgrgaysKDScsFATwWzJ8Apw4SiargtxcMUkmmX7sDrwZ21kNuAlYONhryTiyVGyIyMrAfcAaDed1nUU8V7P+j5H+WYAYfxz3x6i9VgG8DvBA5J+6qPRXFnYGTguj50VEL9peIID3EmSiQFW6zYgNzSoAp0rOXoNx4BxgT+AVYJUoLsxykmzWHqkM8JwRvMztfK4DjOq60ePAY8CnNawV4I1i8fuBU4FfGzIxSYTu54FsrPT9jNNgPfpcYFXgUOCrAugHR+MnG2C1z4pmW+Bp4HDg/XFuULC+cSx4EHBzC2RSZaS27xTNlxZmGk0ZB7DGjEkGtBeAS8O62rsdsHeFN8/cQJnBKwL3AmuHwSYlp0a9YRfeF3ix0TEnBtvFUudvB44GfmhpJ3daDsDaMrjfGCnrI4BkFHTrgOwswrr/7mjHechjgZ9LO/VS1gS+Kblw6jQtDeg6ulKbZ4XILe1qyWR7tV0G0vKecgH23HqmBNg/EgD12JalebvM/k/AKzPYwsK0bL+KDMKN+b+yYe19RimIpct5BrgoZGa50GGzjbeAPzMQd08GFvX/92CxXtV1iZy2kgtwOr9Vpk9ibZnZ/zpiVRaR8lwBMx3RDezke1vqjQyX3eUAtgXwZIyRdY4/IHoKH2cAWxxSTBX9Xbm4JC59ZFrUcB2HJ4CLDXdT1Kp+sOMTa820ZK97VUo3LTC7VoP9I0mAnXtfo9jVEmC7/R60CiznnB6R37xZWRFwL+P7Fod2ihvfC7gs9pBrpm03rfjK6I0xhY6tUwEut07VZuPQl2mzXXXTrGxktVppbrh46Ghllz8XqRhno2kHYEdAXe66H9xwO82GdwVwuUCQdRYlaui0froCeHtA9zDKquHrR+WXSuxpC3IXAFv9+X5qm9AtKx4DhtWPn6WA7xq8wplSl9EFwOqt1Z95r4WBgBto7En4usfehi8Ga19tTylES4fpAmCrvkcj9zWHNtddK3q5gm5j6PWpDOKos3UB8HTFLuvcA8BZMLUfNADcHrusmQPAWTC1HzQA3B67rJkDwFkwtR/0D/qlRTiN/knXAAAAAElFTkSuQmCC\" width=\"44\" height=\"20\" style=\"width: 44px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e the smallest Euclidean distance between the trajectory of the projectile and the target \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACMUlEQVRYR+3VS6hOYRQG4OdErhEiEwOSMMBMBkopRi6RXEsZMJNbKUnHJZJcykCSkkvIxG3gUhQTlBEDGQjFgKGSktDS+k/b6eyzf/v8OpP/G+79fev91vu+6/069MPq6AdMbdD/ynqb3ja9LWGgbaSW0FhWpE3vdBzCsF54voSLdXQoo3cdomjZOoWd+Noq0EHZ5UtcwfdC4WBgB3bjUx3AONNTp+OwHtHNt0Lh8TiIY3hVF7AMtKd6w3EAN/GoL4DNgg7EdnxIun81ARoMjsQkzEjtb+BnM6BxeA0m4Dh+NAHYqDsqtV+L1XjcOFsVDvOwFHtqOHVASjIXARxM/Vm9gfbVqWNzjt9jW9GUZaCtcOpshI6dOIsuL/QEWtepcW4xpmJw+mBOjt/Tohe6g4ZTY/gP4xnO40ITek7BUdzKJAvXXsNbbMTnMtCGU09jRGFTMfKimxifoCpCIsIjtD+HOziS36Yl6O2k9y/XFzsdjXDaQ4Smm/KWY7AVJzEZV/NCMQYfE2gWNuBN/luA+1iO693HrGpkJmIfYnQi4O/hRObu3rxkFI0OQ5LoKEYlzLMEq/D6X0EbYxXhsBDBxnM8yYcggj8uswwPsnjoGQ9FgG3GlzqgZSE0NLuejxV4ka6NRyHMGJLE8xj7uoKhKhyqEq+ROLsSNKjfgplYmfEZXV9GBETXqtK0CjhGJTJ5UdIbug7BGdzFfrxrJb1VFyr939dOawG3QWvR1uyhfqH3N7pTaimzbBiRAAAAAElFTkSuQmCC\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"298\" height=\"20\" style=\"width: 298px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eis a difference angle, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAAAjCAYAAACaX1R3AAAFTUlEQVRoQ+2ad8h+YxjHPz9kJJtkl8ysPwgZIUXKHtmjzJBZsmdGysiWvUdGZhGyifyhpJSsbCHZo+hT152745zznPO+53mf9+Tc9fzznPvcz3Vf32t9r+uZw7B6q4E5vZV8EJwBvB4bwQDeAF6PNdBj0QfPG8DrsQZ6LPrgef8T8AR6J+Bc4GvgCOD9nt19LmBzYH/gO2ABYFHgIeBJ4Pdp3Gcp4ABgbeATYE3gPeAm4KOG5yrfJsBhwPnxfuWrbTxvA+Bu4DdgHeCM+IG/Gwo26W2LA+cB6wNHAW+FQKsB1wGfAicC37QUVB1uC1wO3ANcDPwKzAMcCZwQn4eBKl0l0Ny7C/A2sGdX4M0bF38ReBo4G1ghlPBjy8tOYrseplKPDqu+saDIbYAHgDuAk4CfWwi5KXAX8EF49GfZuwsDVwJbAAcCL5ScuxawH+B7OwDK0il4KwEHARdFaNkxrGpf4NsWF53UVsO9wLwL7A18WBBksQhvWr2KFIwmy/euB/YIr72sxLt2BR4EHgUOjZSTn61j/BFfGHZv6xq84kW0NsNmH8BbELgqjE9FHx9hLb+Toe+0iC6Gt4OB7xugtzXgftd2wCsl76wO3AesB+wW+bXqaPV55wDev+pZN0LiqpF79I6yZTR5BDANVAGRvzd3gH0K8CqwD/BxycGLAIbp3cNLy4wnvTZj4BlGjwV+aWChk9ySQFGGvcILyuQxmrwcD6yk9dK6lYPyROS7Mm8132owhwPPR7T6vOLgsYNnFXUysHxFCJokUGW/rWdcEA82qwhtPs7Dm8r2jikXlZ27CnBvVK9V4Ti9Z4qRYn0RRUmqdIvnjh28vDKztJY6NF1LRDFgaT2dNUpZ6Wxz2Vnx8bum4DU5fw3g/qBNo/Yn8EbJMFbwJJ63ABsBZ0bMbwPCTIOXh6xRiss976kGxVgeZtuAV1fNjg08qza5ksTTNRXw2gDdxV7LcOmNRUIb8OR8hwA/1Agh2X8MWKZBIZJ7nrRF2lC2xgKelZXsX/CejVBpN6EpH+oCiKme0TRk5Z43ypOUpc3+pjKMBTw7BJJHLdm+2/bASz0BzyrP9lcbz7smSHddPl827r9lC8+ThlgzvD5TnrdcdCe2CmKuIq6N76rcf6peMo73mlKFjaP1t9AIPphkbEoV5gcuiXRTxwc9t1PPy/OcXMY88GdYnE3eso5CHQAzXbAUw5uhvwlJt01meqhbeVemKUm/NfqrVb3TzsBTOPuAetpP0fN7DnD04XTB5nQCT+tynDJqwjAJ8PL2WB1/S3zwmRjtyMlGrdQeUz82lcv4W84HNX5HRFWrM/BSt9ymtAnXqu2vLFEfAzhl2DA+9g9n60rcVOWqoGKHIw+BxwFXFAzR6cDKMaJx3JNWmhrYUK7qyqSwraFLE+pme52At3QkYcvaFC6/DIlTlXU7cEOAenOF1c0WMPORUBnPSuDqdRY4+UxP4zXcWZh4X2lHHvaSkTvGKU4NEriGYQs9OzJ1a9rg2f46Bzg12jle1nCZVqqy5Dle0gm0M7DcImcLaLkchnujh/Mzw9c78VBwro5WmMAUm8t5IaPn2h/N/0FgetkZuDAq8ksjhahHZ3jWBoZkaZWRq2q53+m5ujRke+YbdYosTtLzPGfVlYfLdI57nPLK+fRKyXrb6fOkwJ0PsGrWwm2oa3CSbEn54xUGaM5Uqf514vTwvjIQVoxc6RTDway936/CMJwfVtUDS8aoSPrlJ603Q67XAsT//EWjzd8gJqXw4XcrNDCA12PTGMAbwOuxBnos+uB5A3g91kCPRR88r8fg/QP5CXUzNiH7HQAAAABJRU5ErkJggg==\" width=\"55.5\" height=\"17.5\" style=\"width: 55.5px; height: 17.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ean update parameter.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample of algorithm's numerical result:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 80px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 403.5px 40px; transform-origin: 403.5px 40px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etheta = catapult(25,3,25)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etheta = \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    0.8431\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 264.333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 383.5px 132.167px; text-align: left; transform-origin: 383.5px 132.167px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"570\" height=\"259\" style=\"vertical-align: baseline;width: 570px;height: 259px\" src=\"data:image/png;base64,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WFJSEhUVJZfLPT09f/rpp9jYWJVKVVZWFhkZ+cgjj7i6ur7xxht/+tOfOpxWVSaT/c///M+LL77o6+u7Y8eOvXv3Dhw4kM9/LgCLE3g1YwCrsXbtWqMl6m/fvj127NiLFy+2tbW9/vrrdNXzS5cu+fn5tbS00H24F9wOlFar5V6/8847H374IX0dHh6+dOlSnU7X1tbGMMyECRP0ej396Nlnn921axf3rbq6ura2tgULFnz66ad0y8WLF/39/el3O7R3796xY8e+++67vfoHALBqqF0BdMrZ2ZkQ0tjYaLjxscce0+l0hw4dmjt37vDhwzvrW+Hs7HzhwoW7d++2tbUpFIpbt25xH61cuZLOHzpjxoyWlpbGxkYnJ6fCwkKWZVevXs3t5uTkdOPGjevXr/v7++fm5tKNer0+JydnxowZHZ60urqaEGLYQwRAMhBXAJ2iy9aNHj3acOPw4cM///zzv/zlL7t37x46dOibb765cOHC9t+NiIh4+PDh/PnznZ2d7e3tuU4QhBAu4Qwnw753756dnZ1RC97t27ft7OwOHjzIbZkxY8agQYM6LG12dvbXX3+9f//+3//+988+++yYMWN6fMEAVgxxBdCpEydOeHl5ta+sTJ8+ffr06a2trWlpae+88868efOMVlu4ceNGTk7OP//5T5pMVVVVt2/fNn0uT09PnU5XXV3t6urKbfTw8NDr9du3b+8sojj19fWbNm165513Zs+eHRkZuX79+uPHj4t6hQsAI/hpBjCm1+sLCwtjY2NTU1Pj4uKMPr17925FRQUhRCaTGfYVlMvlJSUl9LVCoWhra6MNgFVVVYcOHerypEqlctKkSTt27KD1sObm5qqqqt/97nePP/74tm3buMpZfn5+h1/fuXPnyJEjX3nlFULIunXr9Ho97SUIIBmoXQH8W2pqampqqr29/aOPPvrUU0+lpaV5e3sb7XPv3r3Q0NBHH3300Ucf/fnnnzdv3kyrVqtWrXr//fc/++yzGTNmJCQkhIaGLly40M/P786dO88//zxtVzQtISFh3bp1AQEBSqWyuLj4yy+/dHNz++STT9avX+/v7z927Njr1697enqmpaUZfZE2A548eZK+lclku3btWrx4cXBwcPvyA4gUlmcE6I3q6ura2tpRo0aZaHBrbm4uLy/nZproppqampqaGqMjNzc337hxw9vb2wrXeAXgB+IKAABEAM+uAABABBBXAAAgAv8PggpY/n7NrQUAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function theta = catapult(xd,yd,v0) \r\n  \r\n    global g nu;\r\n    \r\n    g   = -9.81;  % grav. acceleration\r\n    nu  = 0.5;    % air friction coeff.\r\n    k   = 0;      % solver increments\r\n    dt  = 1e-2;   % timesteps\r\n    T   = 10;     % simulation time\r\n    TOL = 1e-2;   % absolute tolerance\r\n    \r\n    [~,y] = ode45(@ODECatapult,0:dt:T,[v0,0,0]); \r\n    \r\n    % solver for optimal angle\r\n    while (e \u003e= TOL) \u0026\u0026 (k \u003e 150)        \r\n        \r\n        %theta = theta + beta;\r\n        \r\n        k = k+1;    % add increment\r\n    end\r\n  \r\n    function dx = ODECatapult(t,x)\r\n        global g nu;\r\n        %% fill in ordinary differential equation %%\r\n    end\r\n    \r\n    function e = EuclideanDistance(y,xd,yd)\r\n        %% fill in computation of smallest euclidean distance %%\r\n    end\r\n    \r\n    function beta = UpdateLaw(y,e,lambda)\r\n        %% fill in update law to update the shooting angle %%\r\n    end\r\nend","test_suite":"xd = 8;\r\nyd = 2;\r\nv0 = 35;\r\ny_correct = 1.446;\r\n\r\nassert(isequal(round(catapult(xd,yd,v0),3),y_correct))\r\n\r\n%%\r\nxd = 15;\r\nyd = 5;\r\nv0 = 35;\r\ny_correct = 1.33;\r\n\r\nassert(isequal(round(catapult(xd,yd,v0),2),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":636373,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-10-19T12:41:43.000Z","updated_at":"2025-01-02T11:31:42.000Z","published_at":"2020-10-19T13:39:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider a capapult that fires a projects into the air with an initial velocity\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_0 \\\\in \\\\mathbb{R}_{\\\\ge 0}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. The free-flying projectile is subjected to air friction and a gravitional force. Given a desired target \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$z_d = [x_d, y_d] \\\\in \\\\mathbb{R}^2$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and an initial velocity \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_0 \\\\in \\\\mathbb{R}_{\\\\ge 0}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, find the optimal shooting angle \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta^*\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eof the catapult that minimizes the distance between the target and the trajectory of the fired projectile. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etip 1:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Consider the states \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the x- and y-position of the projectile, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the x- and y-velocity. Then, the trajectory of the projectile can be found by solving the following ordinary differential equation (ODE):\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x_1} = x_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_2 = x_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_3 = -\\\\nu x_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_4 = -g - \\\\nu x_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003ewhere \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003eg = 9.81\\\\; (\\\\text{m/s}^2)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\nu = 0.5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eis the friction coefficient between the air and the projectile. Use the ode45.m function to compute the trajectory of the projectile with initial conditions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex(t = 0) = (0,0,v_0 \\\\cos(\\\\theta_k), v_0 \\\\sin(\\\\theta_k))\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. Plotting \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e vs. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e will result in the x-y trajectory of the projectile, as shown in the figure below.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etip 2: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eUse the following update law, to incrementally update the shooting angle \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_k\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_{k+1} = \\\\theta_k + \\\\lambda \\\\, \\\\text{sign}(\\\\theta_{e,k})\\\\,e_k\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003ewhere \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ee_k \\\\in \\\\mathbb{R}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e the smallest Euclidean distance between the trajectory of the projectile and the target \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ez_d\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_{e,k} = \\\\text{atan2}(d_y,d_x) - \\\\text{atan2}(v_0\\\\sin(\\\\theta_k),v_0\\\\cos(\\\\theta_k))\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eis a difference angle, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$\\\\lambda = 0.01$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003ean update parameter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample of algorithm's numerical result:\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[theta = catapult(25,3,25)\\ntheta = \\n    0.8431\\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\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=\\\"259\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"570\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\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,iVBORw0KGgoAAAANSUhEUgAAAjoAAAEDCAIAAACztzlvAAAACXBIWXMAAA4mAAAOJgGi7yX8AAAAB3RJTUUH5AoTDQsAojFZfAAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxOS1PY3QtMjAyMCAxNToxMTowMBMPJ7UAACAASURBVHic7d17XBNXogfwYyAE0Sog1qIiYUXxcZFSwdb6In4UW7XYh49aRUi5LYoubbda2/rg0epWvWvV28U+7CWIrvJhq4W6ulJXBvVDaUW02wKKAkNVUEHCorwCgfvHaWezAcIrmclMft8/+kkmk5kzDuXHOXMe/dra2ggAAIB1kwldAAAAgK4hrgAAQAQQVwAAIAKIKwAAEAHEFQAAiADiCgAARABxBQAAIoC4AgAAEUBcAQCACCCuAABABBBXAAAgAogrAAAQAcQVAACIAOIKAABEQARx1draum/fvldeeSUwMDAsLOyHH37gPtLr9bt27ZoxY8YLL7yQmZkpYCEBAMCiRBBXer2+rq5uw4YN586dmzdvXkRERFlZGf1o9+7dBQUFp06d2r59+9tvv33t2jVhiwoAABbST3TLMy5ZsiQiIuKZZ54hhDzxxBNffvmlv78/ISQ2NlYmk23dulXoAgIAgPmJoHZlqLa2tqioyMPDgxBSVVVVV1fn5+dHP5o8efLNmzcFLR0AAFiKvdAF6JkNGzY899xzEydOJIQUFRU5ODjIZL8mrkKhKCoqMto/NDTU8FkXAAC0N2XKlOTkZKFL0QUxxdX69esJIfHx8fTt8OHD9Xo996lOpxs1apTRV3744QepPtDy8fGR6qURXJ1oSfjSiKSvzsfHR+gidE00jYEbNmzQarWffPIJV52i4cR1uygpKRk2bJhg5QMAAEsSR1xt3ry5qqoqISFBLpdzG2Uy2dy5c48ePUoIqa+vT09PX7BggXBlBAAACxJBY2B9fX1qaiohZNKkSXTLzp07Fy1aRAjZvHlzWFhYbm5ueXn5/PnzVSqVkAXl18qVK4UuggXh6kRKwpdGpH511k98Hdl7RMJtzSzLKpVKoUthKbg6kZLwpRFJX50oflWKozEQAABsHOIKAABEAHEFAAAiIIKuFgBgRhg7b5tEMRDYNMQVgG2R8Nh5MEEUA4FNQ2MgAACIAOIKAKzXw4cPW1paurOxRzuAGCGuAEAwW7ZsOX/+vIkdvLy8GIYhhKSkpFRUVBht7PJbICWIKwAQTE5OTnl5uYkdjhw5Qhe0W7duXX5+vtFGsCnoagEAwouOjl6+fHlKSsqtW7eeffbZiIgIuv3kyZMjR4786quvHjx4sHv37pSUlFdffZVuHDJkCCEkIyPj8OHDDx48GDVq1MaNG93d3Ts8vlar3bZtG8uyM2fOHDp0KCFk+fLlhJCoqKh9+/bZ29sTQpKTk+3t7en2PXv2ZGdny+XyqKioadOmEUKysrIOHDjQ0NAwZMiQzZs3e3h4tN/Cyz+V7UJcAdgulmVNfNp+wqG+79/ZJEYajebcuXN0eaDIyEgPD4/g4GBCSHJy8vz586dMmeLg4DBt2jR/f/9Ro0bRjePGjSOE3L17d8mSJY6Ojt9///2sWbPaL3pHhYSEeHt7v/766wUFBZGRkatWraKx9H//93979uyh+5w7d06hUCxfvnz58uXNzc2rV6+ura1dvHhxenr64MGDly5d+sUXXzg5OWm12vv37zc0NBhtQVxZGuIKwHZpNJq4uLjOPm0/oaiXl5eJo3Vn/5iYmNjY2A6/Hh8fHxISQghhGObrr7+mcUU9/vjjCoXiySefnDNnjtG3QkNDW1tb6+vrn3rqqcOHD3///fdPPvmk0T6XLl26fPkyfUgWHBx85swZE1dx9erVtLS0mpoaBwcHQsi9e/f27NmjVqvd3d1nz549cOBAutuZM2eMtoClIa4AbFd4eHh4eHj39y8tLe3R8dvvb2KKWBcXF/pi4sSJOTk53TzFpk2bDh065O/vL5PJ7t+/f//+/fb73Lx5c+bMmdzbzhoMqatXr7a0tHBBq9PpZsyYMWfOnMDAQDc3t2nTpi1YsCA6Orr9FtqiCJaDf18A29XT+cUtvX9PXbp06dChQ9evX6c1obFjx3a4m6OjI9dNgxDS2NioUCi4t62trYYvHBwcRowY0T5ov/jii/379589e3bLli1arfaDDz5ov8W8VwdG0DMQAETA3d29vr7eaCPdQlcYz8jIuH79eoffDQ4ObmlpSUlJIYQUFBSkpaVxHymVypMnTxJC7t+/f/bsWbqzTqc7duwYt8+NGzfu3r2r0+ns7e2Dg4MXLlz4yy+/tN9i5guGdlC7AgAR2Lhx42uvvbZy5crPPvuM2zhjxgw/P78JEyZ4enoOGDBg9uzZHX5XJpMdO3ZMrVa/9tprM2fODA4OdnJyoh999NFHK1euPHDgQHl5ua+vLyHE3t4+PT19xYoVH3744fDhwy9cuLBz504fH58FCxbMnDmzoaHh9u3bJ06cuHr1qtEWHv4RbByWZ+wNa1ilzRrKYDm4OssRxUJ8PaLVahUKBZdAXVKpVKtXr162bBl929LSUllZ2f6B1sOHD5ubm7knavREcrncsG9F+y1Wy/R9F8VPBWpXPUN7UtFfNz197AwAlmCYKJ3Zs2dPXV3dqFGj0tLSKisrFy1axH1kb2/fYeeL9iHU/kTdOTWYC55d9YBGo1Gr1YmJiTSo1Gq10CUCgG6ZP3++UqnU6XTLli3Lzc11dHQUukTQY6hd9QDNqqCgIEJIYmKiWq2WdpsVgGSMHTu2s36DIBaIq+5Sq9VBQUHcIJWgoCA0BgIA8AaNgd2l0WjCwsKELgUAgI1CXHVXaWlpj8b/AwAIJTExUegimB8aA7sLz6gAwPqlpKT0798/IyOjvLz897///aBBg4QukdmgdgUAYtXHVYPNu+hwX47W2Xd7ccwlS5acO3eOYZhFixZJKasI4qrvYmNjsW4pQK+dP38+JCTE1dV10qRJMTExjY2NJnY2XFOY9HnV4L4vOmxYnuHDh3/33Xd9L0nvjpmRkZGVlUUIOXHixNtvv/3SSy/l5+c/fPiwd+WxToirvkpKSjK9CBAAdCY1NXXRokWhoaF37tw5duzYpUuX5s2bZ2J/wzWFiRUsK2xUnl4zvJBeHPPdd9/18/PLz8+/dOlSSEiIu7t7aGjosmXLRDHdRvfh2VXXGIahY606pFQqk5KS0AsDxIitNlWVsQSl67/H57a2tr755pu7du1asmQJIcTb2/vYsWNjxoxJTk4ODQ2Njo5etmzZ4cOH7927RyPt888/N1xTeOrUqdyywnTn1NTUW7duhYeHP/PMM3/84x8vX7785JNPbty4kXR70WFCSPvzdvZ1o/IQQiorK998802jBZGp77777urVq3RugR07djz22GO0p/EHH3zw0ksvcRfSo2NS6enp/fv3HzZs2JAhQ/75z39OnjyZENJ+0S8JQFx1gc5kYWJmxVmzZiUlJfFZJABz0VysiMvgdfhgTLBX7Lxfl5L67rvv7t69azg+xMHBYc6cOSdPngwNDdVoNBkZGTt37pTJZG+88QYhxGhNYfLbWsPjxo3TaDQXLlyIj49/8ODByy+//NxzzwUHB0+ePHn9+vXDhw8PDQ3t5qLDhJD25+3s6+3LEx8f335BZMre3n7Xrl1qtbqlpWXHjh1KpTIsLKylpWXbtm3vvfcedyE9Oia1efPmv/3tb4SQmzdvDhkyxBx3yUohrrqQlZVluuYUFBRkYj1WAGsWHugeHmhqrUKzM6xdVVZWOjk5Ga1q+PTTTx8/fpy+3rJlC11f+MGDB7t27crLy+tsTWFCSGxs7MKFCwkhqampnp6etB5TUlJy5syZ0NDQ7iw6zDE6b2dfb7/GsYkFkQMDA3/55ZeKior8/Px58+ZdvnxZq9VmZWVNnTrV8F+gR8ckhPz88893797Nzs4mhBw/fnzDhg1d3QERQ1x1gWGYmJgYEzvQDu6mGwwBrJNhePDPwcFBp9MZbbx27Rpda5EQQqsXhJDAwMCrV6+aPho326xCoZg4cSJ9PXjwYHqK7iw6zGl/3m5+3fSCyM888wzDMAUFBSqVysXFJTMz89y5c13+3jB9zMuXLz///PPLli1rbW197bXXOgxyyUBcmcIwDMuypn+elEqlUqlEbwuAnpo9e3Zra2tWVtasWbO4jVlZWS+++CJ93dDQQF+wLDtgwIBen6ibiw5zjM7b0693Jjg4+MSJE7du3fryyy/d3NxOnTp18eLFvXv39u5o1I0bN+gqX2fPnn3ppZck1rfCCHoGmkJDqMsBwogrgF5wdHTctGnTmjVruH7bf/zjH3/55Zc1a9bQt0eOHKEvUlJSaHeMDtcU7lI3Fx3mGJ3XxNd7VJ6ZM2eeOXPml19+8fb2Dg4OzsjIKCoqmjFjhtFuPTrm7373O4VCQQhJTEz88MMPu/ktkULtypQuH1xRs2bNoiMeAKBHaEv7mDFj/P39b9y4oVQqs7KyuMGtra2tAQEBdnZ2TU1N3377LfnPNYWXL1/ezbN0c9FhjtF5hw4d2tnXO1zjuDPjxo2TyWQzZ84khAwcOHD48OF+fn40BQ316JizZ88+cOCAVqsNCwsbMWJEl/uLW5ukjR07ti9fVyqViYmJXe6WmZmpVCr7cqJeKC0t5fmMfMLVWU4f/6ewBL1eX15e3tTUZLjxkUceOXfuXFNT071798xylurq6rq6ui536+y83fw6/5qbm5ubm7vczfR9t8KfivZQuzKlywdXlFKpNN0dAwBMkMlknQ2EcnBwGDp0qFnO0qOVf9uf12oXDjbqWilheHbVKY1GQ7o3s61SqcQwYQDz+t///V9vb2/bOS90yVZiuReUSmVmZqbQpQCwUUItL4dl7awW4qpTGEcFAGA90BgIAAAiII7aVV5e3smTJ2/fvj116tRVq1Zx2/fv33/lyhX6WqFQ7Nu3T6ACAkCP0TmTjGzcuLH9UKS+SElJmTlzpok5bUEsxBFXP/30k7Oz8/Xr140mpszPzx8zZkxgYCAhxM7OTqDSEUIIy7JqtRrPugC6Lyoqir5YvHjxxo0b6f/IZu/msG7duiNHjiCuJEAccUUffm7evLn9RxMmTDCcwUUoLMtikUaQPpYlGg3JyiIsS4KCyKxZpA99YufPn09f2NvbBwYGcm87XK2DWyLk/v37ycnJWq1227ZtLMvOnDmT9jino4b37NmTnZ0tl8ujoqKmTZvWfs0ReoorV678+c9/5kri6+sbHR3d6wsBfogjrkw4ePBgWlrakCFDXn31VTP+XaZWq8PCwrrf2wIT3YL0sSxRqwn3Z5lGQzQawrIkNta85+lwtQ6NRnP27NmYmBg6eWBISIi3t/frr79eUFAQGRm5atWq5cuXL1++vLm5efXq1bW1tYsXL05PT2+/Hgfl7u7+wgsv0NdxcXHtp5YAKyTuuAoJCZHL5XK5PCcnZ+nSpcePH/f09DTax8fHh75YuXIlXWmtOzQaTURERE9nArxz5w5vkwfeunWLnxMJAldnjeLiSPsmhLg4EhREzPpXWmeLfcTHx9PZby9dunT58uXz588TQoKDg8+cOUMIuXr1alpaWk1NDZ2I9t69e3v27Dl8+HCHa44MGzaMVub27dun1+s//vhjM5bfahn9dkpOTj506JBAZekNcccVt/TL9OnTCwsL09LS2tfor1271tPD0gHC06dP79G3lEplY2Njd4YVmwuf5+Ifrs7qaDQdb2cY88ZVZ6t1cNNM3Lx5k868R9HWwqtXr7a0tHh5/br2o06n67LLxokTJ3bs2JGXl+fk5GTG8lsto5+6LVu2bNmyhb7m/qy3ZuKOK0Ourq5VVVXmOlovfptgXnaQMhOPZsvKzHie7qzW4ejomJ+fz71tbGxUKBQODg4jRowoLe3u4siXLl2KjIz89ttvhw0bZpaSg6WJuMW2tbW1vLycvi4pKWEYRqVSmeXIWVlZvXgEpVQqy8z6/y2AFTHxB1y7Fvi+6M5iH8HBwS0tLSkpKYSQgoKCtLQ0ulGn0x07dozb7caNG6ST9TgqKipCQkISExMnTJjQYTGmTZtmnusB8xFHXMXHx/v4+KSmpqampvr4+MTHxxNC2traFi5c+NRTT6lUqkWLFoWFhZkrrhiG6UVvQ09PT9SuQLKUyk5b/Mw6YSa32MfcuXMTEhI6XOxDJpMdO3YsLi5u0KBB77zzTnBwsJOTk729fXp6+vvvv//EE08sXLjQ2dn57Nmz5Lf1OAYNGsStYkUIOXny5P3791esWDF06NChQ4e2X4uE+1MYrIc4GgO3bt26detWo412dnZ5eXmWOF2vUwdxBVKWmEhUKmL0Q56YaKri1T21tbWGb9PT07VarUKhMHykZLTPk08+WVBQQF+rVCq6eOPkyZOvXr368OHD5uZmbgL1FStWrFixwuiMERERERER7Uvy4osvymQyFxeXlpaWPl4UmJ044opPdPhULxoDg4KCkpKSzF4eAGuhVJLMTDOOuzKhy9U69uzZU1dXN2rUqLS0tMrKykWLFnEf9XoB+K+//trX1zcuLq6iouLrr7/u3UHAchBXxrq54H17dC1Hs5cHwIoolWYfZdU78+fPv3jxYmNj47Jly5577jlHR8e+H/PevXv+/v6EEHd3d7McEMwLcWWsmwvet6dUKkXZOxlAhMaOHdthp8G+GDx4MB33cv/+/cbGRvMeHPoOcWUM6wID2KaXXnrp2WefLSoqamlpQe3KCiGujKGGBGCb7O3tv/3228bGRmSVdRJHR3YAAH4gq6wW4goAAEQAjYHmFBsbW1ZWhv6BYM2mTJkiigniwLymTJkidBH6CnFlZhgpDFYuOTnZcgdnWVbCT3+lfXXWD42B/0GtVsf2bVgJ4goAwBJ4javc3Nzs7Gw+z9hTDMP05a8n/OUFAGAhvMaVm5ubWq3+wx/+wOdJe4Rl2b4sB4w1RAAALITXuFIqlT///HN5ebmvr++PP/7I56m7g84W2PfaFRILAMDs+O5qIZfLjx49mpaWtnTp0okTJ3Lb7ezsUlNTeS6MEcQMAIDVEqarxYABAwghOgPWMENXr2cL5KB2BQBgIQJ0ZI+IiLhw4cLnn3/eiyUQrR96WwAAWAKvtavy8nI6PvHatWtWmFW9W0S4PdSuAADMjtfaVXl5+Z///Oc5c+bwedLuM8sYwMTExL70LQQAgA7xGlcBAQF8nq5H+t4tkEJWAQBYAiZh+lVQUFBbW5vQpQAAgI5hEiYAABABxBUAAIiAkHFVXl5eUlJCX+v1egFLAgAAVk6YuDpz5oyPj09ISEhUVBQhpKKiYsaMGYKUxOxYlvXy8hK6FAAAUiNAXOn1+rVr16anp586dYpucXd3r6+vb2pq4r8wHNozsO9YlsW4KwAAsxMgru7evevh4WG0numAAQMaGhr4LwzFMIxKpTLLoTAPEwCAJQgQV/369WtubjbaWFNT079/f/4LQyFdAACsnABx5e7uXldXd+jQIfq2qalp48aNPj4+CoWC/8JQLMv2cXJbDmpXAACWIMww4e+++27WrFkffPABIWTSpEljx4795ptvBCkJVVZWJuDZAQCgS8LElVwuz87Orq6ubmxsdHJycnZ2FqQYHIZhYmJizHU0rCkMAGB2Qk7C5OrqKuDZDZk3XRBXAABmJ8y4q+vXr3e5hWeYmhYAwJoJEFcPHz5cvny50caFCxfyXxJKo9EQLKsIAGDdBGgM1Gq17ZsB3dzcampqhHqIZd6sSkxMRPhBl9jqRkIIq21gqxvpa0JImbaREMJWG49BZLW/7qB0ceQ2Kl1/Hfvh6eKodHUkhPz6X5f+9AWAlAgQVw4ODnV1dUYba2trHRwc+C8MFRYWZsajIauAQ3OIKdbSF1nFWkIIU1xDSAm3z28ZQ/OmPyFk1mgXo+OE/RY/XLCR37KNHjarmLDaRsNP6WGDRrsQQmaNdla6OiLGQNQEiKthw4bpdLq9e/dGRUXJ5fKmpqatW7d6eHg4OTnxXxhCiLlGXAGw1Y2stoG5UUMIySrWMsU1dDuXHDSHFnjJA8aOtFB4GFbaCCFZxTVsdQPNS+50QaNdaIAFtctFAKslTM/AzMzMOXPmJCQkODg46HQ6T0/PjIwMQUoC0Gs0DzQXK4hBOBkmU1ige4eRwLKsUmmpnPh3q+BoQggJD3Q3LC1TrCWEZBXXJF2s4AqM9AJRECauBg4cmJOTU1VVpdPprGHcFUA3sdWN7fOJhlPMPC9r/nVPYyzc1Z38lmG0LshWN2YV18RllNLqF6ILrJaQ464cHR3p86ra2lpCyKBBgwQsDECHuPY90eVTl5SujrQSxqUXU6zlKl5cdHH1MwBhCRNXH3/88aeffmq4xc7OrqCgQJDCmB3LsiqVqrS0VOiCQC91GFFhAe5izyfTlK6O4a7uhtGVdLFCc7EiLqMUuQXWQIC4qqmp+fTTT48dOzZ+/HiZTMjljMlvy1OZfYwwZrUQI9rQRyNK6eqodHGUQBWqd7jo4qpc6qOFcRmlShfHsEB35BYIQoC4qq+vHzFixMSJE7v/lby8vJMnT96+fXvq1KmrVq3ituv1+t27d6enp7u5uUVHR/dizSqNRpOVlWWJKS1YlkWPdutnGFHENmpRPcLlVkywF6ttSLp4h+ZW0GiXsMDH8K8EfBIgrh577DH6sKr7fvrpJ2dn5+vXrxcVFRlu3717d0FBwalTp27evLlixYojR44YrfrYpbKyMguFCuLKmtGUSsqtoP0LwgLcUWkwjT7oChrtEhPsRetbqoTL9J8uPNAdw7mABwLElUwme++991Qq1Z/+9KdHHnmE2z5mzJjOvkKH8W7evNlo+5EjR7788suBAweOHz8+JCQkJSVl69atPSoMy7KzZs3q0Ve6hJSyTtwTqbiMUvJbRQq/anvKsL5FK6ZJuRWobAEPhGkM3LdvHyHkrbfe4jbKZLLMzMweHaeqqqqurs7Pz4++nTx5cnp6ek8Lw7Kseae0AGtDK1Jl2kbNxQr6RCom2Ct2npfQ5RI9patj7DwvQrzY6sa4jFJa2Xreu//H+HMNLEOAuHJycsrKyur7cYqKihwcHLjOGgqFwqipkOKaB1euXBkaGmr0Kcuy3t7eZu8ZMXLkyNzcXItWs27dumW5gwuu71d3q7blq8IHtx60/LXwwchB9ovHPbJrztDF43+tzQvbF0Z69y7mqf4RE0Z9Vfhgzw/av149t3jcI288KcGalsRuXHJyMrequygIOe6qj4YPH67X67m3Op1u1KhR7Xe7du1aZ0egv7NGjhxp9lyxt7d3c3OzdKugtFsde311sadLubpUWID7WpW3FTZSSe/eKQmZPom8NP7GmQq7pNyKr280hAW4S68WK6Ubt2XLli1bttDXPX3qLwjB4mr9+vV5eXlc3vSiMZCGU1lZmaenJyGkpKRk2LBhPToCwzDEMj9/WKGRf7TRLy6jlKZU4svj0XWCfyMH2cdOUoYHujPF2riM0qTcCkmGFghCmLgKCAgIDg7+7//+b4VCodPptm/fnpCQ0NODyGSyuXPnHj16dOPGjfX19enp6Zs2berpQaT0t5Jt4lKKEBI02hkpZQ1od4yg0S4ILTAjAeLq7t27CoVi+/btubm5CoXC19d38eLFgYGBV65c6ewr8fHxhw8fpq9TU1NXrFhBewBu3rw5LCwsNze3vLx8/vz5PR13ZaERVwRLXlmeUU909J6wQlxo0TuF0II+EiCudDrdgAEDCCF2dnYVFRW+vr5yuXzw4MG1tbWdTRu4devWDnuoDx069OTJk70uidm7sHOQVZZD+6Fxj6bQE93K0Q6E4YHutBKclFuR+PJ4K3yaCNZPgLh65JFH6PKMbm5ub7/9dnBwcGVl5Z07d+RyOc8lwUpXImLY6BceiEdTImMYWqqEy3TYFv7OgB4RIK6cnZ09PDwqKys9PDweffTRiRMntrS0LFmypH///vwXBqyfYXUKjX6ixoWW+miBan8e2gahR4TpanH06FHuRVVVlYODA1YPASOGT6digr0yo/zRgiQNSlfHxJcnoG0Qekr4cVdubm5CFwGsC1vduPd77Z4fSujTKfwBLj2GbYPqo4W4y9AdAqzfUV9fv2zZMqONs2fP5r8klsMwjJcX/vfrsdjTpV7bsr22Zf/16oPEl8eXbnoav8UkjIZW4svjk3IrvLZlM8VaoUsEVk2Y2tWdO3eMtty9e5fnMjAMw7IseltYA6MRvuGB7qT2jlKJnhQ2IWi0S+aaJ1DNgi7xHVeFhYW0W2BhYSG38cKFC05OTjyXJCkpiViycyBmtegOw6Ay7EbB9myFGRA3Ws0K8nZWHy1Myq3IXPMEOg1Ce7zGVW1t7erVqwkhd+7coS8ouVx+8OBBPktC0dmbQBCG/f3QKx2IQTULnQahQ7zG1aBBg7Kysurr6996663PPvuMz1O3xzBMTEyMhQ5OhwljhcYOxZ4u5fr7lW56Gn9HA+e3RUkIHWCHxAJDwiwgYphVTU1Nra2t/A+6QmMd/wyDCrNRQGdop0HV/jw0DIIhAXoGEkJmz57d0NBACElJSZk0adLjjz/+xRdf8F8MC00YyEEiUmx1Y+zp0n5vn6WzxrX9aXbsPMxoAKYoXR0z1zwRFuCu2p8Xe7pU6OKAVRBmilu9Xk+rU7t27fr8888nTJgwffr01157jbcyWG7pEAptgFRnPSkAusQ1DCblVhA0DIJQU9wqFApCSE1NTUNDA51n1s3NraamxtnZmZ8yoN5jaQgqMAs0DAJHgMbAAQMGVFVVEUK++uqrESNG0I06nc7enr/sZFnW0i2BNrtCI23689qWTefXwVBf6CPaMEgIUe3PY6sbhS4OCEaA2pWrq+vEiRN9fX11Oh2dPPDhw4eNjY0DBw7krQxlZWWWbq/LzMy0tSZBwxoV+qaDGdHEQh93GyfMrBbJycl3794dMGAAjaiBAweeOHGCzwLMmjXL0lliU1mFoAJLw6Ms4DWu6EwW48ePpy+qq6v5PLshzL1kLggq4BNGZdkyXuPq3Xff9fT0/Oijj9auXWv0kUwmO3PmDJ+FgT5CUIEg6HRNqoTLBIllY3iNq7S0NPriW/MFaQAAFCBJREFU7NmzfJ4XzAtBBcIKGu1Suulp1f68Mm1j4svjhS4O8ESYYcIgUoa9/ugUSsgqEATtfMEUa722ZQtdFuCJMHHV2tpaWVlZUVFRWyvZmbdjY2NVKpXQpTAno6BCOwwIi+vg7rUtGx3cbYEAPQOjoqL+8Y9/cG+HDBmyb9++gIAA3grAMAzDMLGxsbydUezoXH+EEAz4BatCE0u1P0+1Pw+DiCWP77iKjIw8f/78gQMH/Pz8ZDLZgwcPdu/evWLFiu+//563KS3oSlfQHUyxVn20kE5Ki6ACK0QTS320AIklebzG1cOHDxmG+fnnn+VyOd0ycODAXbt2DR48+L333tu/fz+fhQHT2OpG9dECprgGQQVWTunqmPjyBCSW5PH67KqiosLT05PLKs7q1atzc3N5KwbDMHSiQosS7yRMbHWj+mghfYKNZ1QgCjSxlC6OmKhJwniNq4cPHw4ePLj99sGDB9fX1/NWDJGmCA+4jn9MsTYzyj8zCn+ogmgYJpbQZQGL4DWu9Hq9TNbBGWUyWVtbG58lsfT8tkSEkzAZzUsbNNpF6BIB9AxNLEIIerdLEt9dLa5cubJs2TKeT2qIrnTFD7FU42h/CoKOfyB+XF9Br23ZpZueFro4YE58x5WXl9e//vWv9tt5q4vQCBFd1cdC0J8CpIdLLPXRQsx5ISW8xlVAQMDf//53Ps/YIX6yysoTkZtIKWi0c+mmp/GMCqQEiSVJwiwgIiAeFmbklJaW8nOinoo9XUpn/MuM8sczKpAkmlhe27I9XRzRciANNhdXvGWVddau8JgKbAf9gwxzt0sG4spW4DEV2KCg0S6JL4+PyygN8nZGQ4LY2Vxc2Sau9Q+PqcDWhAe605HviS+PR2KJGuJK4phirSrhMhamAltGmxPURwsxRZOoYb0ryWKrG1UJeaqEy1iYCiA80B0TXogd4sqCvLy8NBqNIKemU1QQTPoHQAgxmPCCdjUCMbKtuGIYRq1WC10Ky2KKtf3ePpuUW4FJ/wAM0a7tmosVsaetdIQJmGZbz64YhuFzYiSeJ2VH3z8A0+hDXHQUFCnbql2VlZVZ53CovkPrH0B3hAe6hwW400VHhS4L9Iy4a1f79++/cuUKfa1QKPbt2ydseQSBkb8APRIe6J5VrFXtz8McuOIi7rjKz88fM2ZMYGAgIcTOzq7L/RmGiYmJsXy5eMLN+4egAug+2u0CMwqKjrjjihAyYcIEHpYG7h2lUllWVmahg+/9XrvnhxLM+wfQC5hRUIxEH1cHDx5MS0sbMmTIq6++6u3tbXpnPue3tRx0qQDoO3S7EB1xx1VISIhcLpfL5Tk5OUuXLj1+/Linp6fRPj4+PvSFSqUihNy6dYu34j18+JCYe5HGvd9r9/ygfWqEY+o8ecDYfmJZAbKn+LxN/JPw1Ynr0oKGkr8Nk4ce+ul82Kju7C+uq+tScnLyoUOHhC5FD/TjedV5y4mIiPDz84uOjjbc6OPjc+3aNfpao9Go1Wo+rzc2NjYrKyszM9MsR2OrG+mY/Jhgr/BAd5ZlpdrLkRCCqxMp0V0a/d+KzoTb9c5iu7ruM/xVabWk05Hd1dW1qqrK9D48/6iFh4ebJavY6kbaTz1otAumUwIwI27ssOZihdBlgS6IuDGwtbX1zp07w4cPJ4SUlJQwDLNz504T+wcFBfEcV2Y5HTdHLbpUAFiC0tUxJtgrLqM0aLQLZoGxZiKOq7a2toULFzo4OPTv37+qqioyMpI+neqMUqkUV0UeXSoA+IGRWKIg4riys7PLy5Ps/MqaixXqo4WoVAHwgI7E8tqWHXu6FH8aWi0Rx5VUoVIFwD/0a7d+0ulqIQ20SwWrbcTUfwA8Cw90DxrtghVGrBbiyoJYlu3Xr193d65uVCXk0RmVsEQ9gCBign9dd1jogkAHbCiuVCoVz4Nqu386zKcOYA1okyBTrGWKtUKXBYzZSlxpNBqGYaywZ6BhpQqrKQIILmi0C5oErZOtxBXhfYwwd0YTdSxUqgCsEJoErZOtxJW1zZ6CShWA1UKToHWylbiyqnWENRcrUKkCsGZoErRCthJXLMu2n6xdgGJUN6oS8tRHC1GpArBytEkw9nSp0AWBX9lQXAn+7Iop1mJMFYBY0LkEk3Ir0CRoJWxlVgth14XCRBUAYhQe6J50sSLudGnQhB8Jwzx2+jSZN48EBRHxr/IqRrYSV4QQodYRZopr4r7Jxux/AGKU+PIEZubzJP80IcSREJKTQ5KSSFgYiY0VuGS2xyYaAwWsWsX8vSSuYBCdqAJZBSA6yn0fheef/o9NLEuSkgjDCFMgG2YrtavS0lKen11xi/+iUgUgYklJHWxkWcIwaBLkmU3EFf+dLGJPl8ZllIYHundnRW0AsF6dtc1kZfFaDLCRuOIT7VXBahtRqQIQPRPPEaxmHKftsIlnV7wxnFQJWQUgekplpy1+s2bxWhJAXJmL0aRKQhcHAMwkMbGDilRQEAkP578sNg5xZQYmxv+qVKpYdHgFEC+lkmRmcnUsdtBjmgWRJDNT0DLZKJuIK5VKpdFoLHTw2NOlqoTLWFMRQLJoYpWW3jp/ns0riJu6CvNcCMImulowDJOYmGj2w6KrOoANUSpbCAlSuihdHONOlwZF4X95vkm/dmWhMcK0V4XSxdF0rwqlUllWVmaJAgCAIBJfnsAU16CCxT9biSszDr3ielUkvjwevSoAbI3S1TE80B1ri/DPVuLKXAx7VYQHupvxyAAgFjHBXmx1o+ZihdAFsS02EVfmmty2F70qPD09hZ0MHgDMji43HJeBpbB4Jf24Mss6wrQBMCm3IjPKHyuAAAB9Yo3FG/kk/bjqO8O16tEDEACIweKNQhfEhkg/rhiG6fWy90Zr1Zu3YAAgakGjXZQujuhzwRvpxxXpbbdAOqyKTlbb6wbA8PDwTAyAB5AipatjWKA7U6xlqxuFLotNkH5cZWZmhvd8di86rCpotEsfGwD5X7sEAHgTHuiudHFEnwt+SD+uehoY3LCqzCh/rFYFAKbFzPNiirUYNcwD6cdVjxgOq0KvCgDoEn2ClXTxjtAFkT7E1b9hsloA6AVUsPhhE1PcdglLAANAr9EKFua9tTTUrn5tACSWGVbFMEy/fv3Me0wAsDYx87ww762lSTyu7ty5o1arTezANQBiWBUA9FrQaJeg0c5xmOTCkiTeGNjc3NzZGGE0AAKAGcXM81IlXGaKtfh9YiESr121tLR02JHdog2AhujZMcstgOShgmVpEo+r5ubm9hvRAAgAlhAzz4vVNuIJloVIvDGQEGK4eggaAAHAcrgxWPj1YglSrl0ZNcFxQ4Az1zwhgR+m5ORkoYtgQbg6kZLwpZHuXR3GYFmOuONKr9fv2rVrxowZL7zwQvuZZA2XvRd2CLAlnl0dOnTI7Me0Hrg6kZLwpZHuXR0mubAccTcG7t69u6Cg4NSpUzdv3lyxYsWRI0d8fHy4T1mWlcvltAGQKa4RpAEQU9wC2JqYeV7qo4VsdSMmxzEvcdeujhw5Eh0dPXDgwPHjx4eEhKSkpBh+yrKs/ZCRdBEQzAEIAPz4dZILTNNubv3a2tqELkMvVVVVTZs2rbCwUCaTEUK++eab9PT0L774gttB/ca7GvvgQTe/e+zHg8IVEwBsTu3Iqf/yeMrju4+FLkh3TZkyxfqfO4q4MbCoqMjBwYFmFSFEoVAUFRUZ7pC496NZFyvCA2cTskmIAgKAjfqtJXC10AWRFBE3Bg4fPlyv13NvdTrdqFGjjPYJD3Tnt1AAAARPrSxBxHFFw6msrIy+LSkpGTZsmKAlAgAASxFxXMlksrlz5x49epQQUl9fn56evmDBAqELBQAAFiHirhaEkMrKyrCwsAEDBpSXl8+fP3/TJjyjAgCQJnHHFQAA2AgRNwYCAIDtEHFHdhP0ev3u3bvT09Pd3Nyio6NVKpXQJTKn/fv3X7lyhb5WKBT79u0Ttjx9lJeXd/Lkydu3b0+dOnXVqlXcdmncxM6uTgI3sbW19ZNPPsnJybl+/fqECRPWrl07ZcoU+pHY752JS5PAjSOEfPbZZ6dPn7558+bo0aOXLVv2wgsv0O1WfuOkGVemJ2cSu/z8/DFjxgQGBhJC7OzshC5OX/3000/Ozs7Xr183GjYnjZvY2dVJ4Cbq9fq6uroNGzaMGzfu+PHjERERJ06coKuhiv3embg0Cdw4Qoi/v//s2bNHjhz5ww8/vPXWWyNGjKB5bO03rk2K/P398/Ly6OuYmJi4uDhhy2Nea9eu/dvf/iZ0Kcxs06ZNmzZtMtwipZvY/uqkdxMXL1586tQp+lpK967tPy9NejduzZo1f/3rX+lrK79xEnx2VVVVVVdX5+fnR99Onjz55s2bwhbJ7A4ePBgZGfn+++/fuHFD6LJYBG6iuNTW1hYVFXl4eBDJ3TvDS6OkcePq6+vLysrS0tIKCwtp1cr6b5wEGwO7nJxJ7EJCQuRyuVwuz8nJWbp06fHjx2kzhZTgJorLhg0bnnvuuYkTJxLJ3TvDSyMSunEpKSn/+Mc/Ll++rFaraRhb/42TYFx1Z3ImUQsODqYvpk+fXlhYmJaWFh0dLWyRzA43UUTWr19PCImPj6dvpXTvjC6NSOjGqdVqtVpdX1+/YsWKIUOGqNVq679xEmwMtKnJmVxdXauqqoQuhfnhJorFhg0btFrtJ598wv1VLpl71/7SjIj6xlFOTk5TpkwpKCggYrhxEowraU/O1NraWl5eTl+XlJQwDGNtnU3NAjdRFDZv3lxVVZWQkCCXy7mN0rh3HV6aNG6c4VXU1NTk5OSMGzeOiOHGSXNWCwlPzqTX6wMDAx0cHPr3719VVRUZGblu3TqhC9Un8fHxhw8f5t6uWLFi69atRCo3scOrk8ZNrK+v9/f3N9yyc+fORYsWEfHfu84uTRo3Tq/Xz5w5U6/XOzk5VVZWLlq0KC4ujnbKt/IbJ824ompqagYMGGD4x5FkNDQ01NXVubq6dtZMIRm4ieIl1XsnjRvX0NBQW1s7dOjQ9ldhtTdOynEFAACSIeK/DgAAwHYgrgAAQAQQVwAAIAKIKwAAEAHEFQAAiADiCgAARECCcwYC9E52djYd7d+vX7/+/fv7+/u7u7tzn/7hD3+YP3/+nDlzOvt6U1OTvb29UGsgffXVVwEBAdx0q1VVVQzDLFiwoH///oKUB8DsULsC+NVf/vKXAwcOXLly5dKlS998882cOXM2bNjQ1NREP/X19R06dKiJr0dHR58+fZqXknbg9u3b0dHRra2t9O3GjRsvXbqErAIpQVwB/FtAQMCHH364ffv2/fv3nzlzJjc3d8eOHfSjV1555b/+67+4PUtKSrKysvLy8mhCNDU1tbS0NDU11dfXcwlXXl6elZX1448/Gp6iqalJr9fX19efP3+em07U0I8//piVlVVZWWm48fLly+fPn29oaOis5OvWrWttbf30008JISkpKUVFRdY2gw5AH6ExEKBj7u7u69at27p166ZNm+zs7KKjoxctWjR//nxCyJo1a65fvz5u3LiamppBgwYlJCQcPHiwsLCwurr673//u6+v77p1695///38/HwPD4+ysjK9Xn/w4EE3NzdCyOrVq728vHJycjw8PC5cuLB+/Xq1Wk3PWFJSEhUVJZfLPT09f/rpp9jYWJVKVVZWFhkZ+cgjj7i6ur7xxht/+tOfOpxWVSaT/c///M+LL77o6+u7Y8eOvXv3Dhw4kM9/LgCLE3g1YwCrsXbtWqMl6m/fvj127NiLFy+2tbW9/vrrdNXzS5cu+fn5tbS00H24F9wOlFar5V6/8847H374IX0dHh6+dOlSnU7X1tbGMMyECRP0ej396Nlnn921axf3rbq6ura2tgULFnz66ad0y8WLF/39/el3O7R3796xY8e+++67vfoHALBqqF0BdMrZ2ZkQ0tjYaLjxscce0+l0hw4dmjt37vDhwzvrW+Hs7HzhwoW7d++2tbUpFIpbt25xH61cuZLOHzpjxoyWlpbGxkYnJ6fCwkKWZVevXs3t5uTkdOPGjevXr/v7++fm5tKNer0+JydnxowZHZ60urqaEGLYQwRAMhBXAJ2iy9aNHj3acOPw4cM///zzv/zlL7t37x46dOibb765cOHC9t+NiIh4+PDh/PnznZ2d7e3tuU4QhBAu4Qwnw753756dnZ1RC97t27ft7OwOHjzIbZkxY8agQYM6LG12dvbXX3+9f//+3//+988+++yYMWN6fMEAVgxxBdCpEydOeHl5ta+sTJ8+ffr06a2trWlpae+88868efOMVlu4ceNGTk7OP//5T5pMVVVVt2/fNn0uT09PnU5XXV3t6urKbfTw8NDr9du3b+8sojj19fWbNm165513Zs+eHRkZuX79+uPHj4t6hQsAI/hpBjCm1+sLCwtjY2NTU1Pj4uKMPr17925FRQUhRCaTGfYVlMvlJSUl9LVCoWhra6MNgFVVVYcOHerypEqlctKkSTt27KD1sObm5qqqqt/97nePP/74tm3buMpZfn5+h1/fuXPnyJEjX3nlFULIunXr9Ho97SUIIBmoXQH8W2pqampqqr29/aOPPvrUU0+lpaV5e3sb7XPv3r3Q0NBHH3300Ucf/fnnnzdv3kyrVqtWrXr//fc/++yzGTNmJCQkhIaGLly40M/P786dO88//zxtVzQtISFh3bp1AQEBSqWyuLj4yy+/dHNz++STT9avX+/v7z927Njr1697enqmpaUZfZE2A548eZK+lclku3btWrx4cXBwcPvyA4gUlmcE6I3q6ura2tpRo0aZaHBrbm4uLy/nZproppqampqaGqMjNzc337hxw9vb2wrXeAXgB+IKAABEAM+uAABABBBXAAAgAv8PggpY/n7NrQUAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44239,"title":"Mastermind IV: Optimal Solver - max of 5 guesses","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: The optimal minimal guess solution requires only 5 guesses. The \u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\r\n\r\nMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: The optimal minimal guess solution requires only 5 guesses. The \u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/p\u003e\u003cp\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n% mguessn 1x4\r\n% mguess kx4\r\n% mpegs kx2  Location\u0026Color, Colors_Not_in location\r\n\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==5 % length of 5 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 5\r\n fprintf('\\n Solution exceeded 5 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":5,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T20:04:24.000Z","updated_at":"2025-12-12T15:50:04.000Z","published_at":"2017-06-18T20:39:39.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The optimal minimal guess solution requires only 5 guesses. 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=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":2291,"title":"GJam 2014 Qualifier: Deceitful War (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2974486/dashboard#s=p3 GJam 2014 Qualifier Deceitful War\u003e.\r\n\r\nMy condensed summary of the problem statement.\r\n\r\nGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\r\n\r\nUnsurprisingly when A truthfully states masses player B consistently wins.\r\n\r\nPlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\r\n\r\nPart one is determine the best possible score for A when playing deceitfully.\r\n\r\nPart two is determine the best possible score if player A did not look and is honest.\r\n\r\n*Examples:*\r\n\r\n  A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n  \r\n  A 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n  B 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n  Deceitful A Wins 8\r\n  Optimal Honest A Wins 4\r\n\r\n*Input:* A,B vectors of length N (Small has N\u003c=10, Large(future challenge N\u003c=1000)\r\n\r\n*Output:* Deceitful Wins, Optimal Honest Wins\r\n\r\n\r\n\r\n\r\n\r\n*Note:*\r\n\r\nIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003chttp://www.go-hero.net/jam/14/solutions/0/4/MATLAB GJam Deceitful Solutions\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\"\u003eGJam 2014 Qualifier Deceitful War\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eMy condensed summary of the problem statement.\u003c/p\u003e\u003cp\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/p\u003e\u003cp\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/p\u003e\u003cp\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/p\u003e\u003cp\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/p\u003e\u003cp\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\nDeceitful A Wins 8\r\nOptimal Honest A Wins 4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Deceitful Wins, Optimal Honest Wins\u003c/p\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003ca href = \"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\"\u003eGJam Deceitful Solutions\u003c/a\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/p\u003e","function_template":"function W = War(m)\r\n% W=[Deceitful Wins, Optimal Honest Wins]\r\n  W=[0 0];\r\nend","test_suite":"%%\r\nm=[0.270000 0.550000 0.910000 0.330000 0.520000 0.300000 ;0.850000 0.450000 0.060000 0.240000 0.120000 0.880000 ];\r\nWexp=[5 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.164000 0.255000 0.009000 0.445000 0.209000 0.100000 0.391000 0.536000 0.027000 0.118000 ;0.673000 0.782000 0.582000 0.882000 0.591000 0.855000 0.745000 0.955000 0.991000 0.600000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 0.480000 0.760000 0.680000 0.160000 0.640000 0.360000 ;0.200000 0.440000 0.960000 0.280000 0.880000 0.520000 0.120000 ];\r\nWexp=[5 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.170000 0.100000 0.120000 0.200000 0.540000 0.150000 ;0.490000 0.070000 0.240000 0.680000 0.610000 0.340000 ];\r\nWexp=[2 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.780000 0.770000 0.900000 0.810000 0.880000 0.840000 0.600000 0.730000 0.930000 0.990000 ;0.270000 0.150000 0.260000 0.510000 0.570000 0.310000 0.170000 0.140000 0.400000 0.040000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.320000 0.820000 0.350000 0.770000 0.020000 0.550000 0.040000 0.990000 0.610000 0.190000 ;0.730000 0.530000 0.750000 0.800000 0.670000 0.870000 0.330000 0.250000 0.080000 0.680000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.100000 0.380000 0.050000 0.210000 0.130000 0.440000 0.180000 ;0.560000 0.920000 0.540000 0.900000 0.670000 0.790000 0.820000 0.970000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.420000 ;0.080000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.690000 0.310000 0.540000 0.230000 0.710000 0.030000 0.490000 0.600000 0.510000 0.860000 ;0.830000 0.340000 0.370000 0.740000 0.430000 0.200000 0.090000 0.170000 0.910000 0.400000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 0.920000 0.710000 0.130000 0.230000 0.620000 0.140000 0.260000 0.360000 0.310000 ;0.440000 0.010000 0.640000 0.350000 0.820000 0.550000 0.780000 0.790000 0.060000 0.570000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.504000 0.218000 0.479000 0.101000 0.050000 0.445000 0.471000 0.084000 0.034000 0.008000 ;0.992000 0.546000 0.647000 0.849000 0.891000 0.739000 0.765000 0.555000 0.613000 0.748000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.570000 0.470000 0.640000 0.550000 0.060000 0.430000 0.040000 0.280000 0.130000 0.510000 ;0.700000 0.740000 0.770000 0.810000 0.870000 0.790000 0.940000 0.910000 0.850000 0.660000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.020000 0.510000 0.120000 0.220000 0.250000 0.100000 0.490000 0.530000 0.350000 ;0.800000 0.960000 0.760000 0.820000 0.710000 0.570000 0.940000 0.690000 0.900000 0.550000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.030000 0.360000 0.410000 0.330000 0.430000 0.540000 0.300000 0.280000 0.100000 ;0.770000 0.910000 0.700000 0.550000 0.590000 0.780000 0.650000 0.860000 0.750000 0.990000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.920000 0.370000 0.900000 0.200000 0.150000 0.020000 0.530000 0.860000 0.250000 0.190000 ;0.170000 0.980000 0.140000 0.680000 0.830000 0.470000 0.950000 0.340000 0.880000 0.540000 ];\r\nWexp=[7 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.020000 0.490000 0.280000 0.080000 0.830000 0.170000 0.140000 0.850000 ;0.420000 0.650000 0.950000 0.890000 0.030000 0.580000 0.380000 0.060000 0.370000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.670000 0.050000 0.590000 0.330000 0.820000 0.030000 0.740000 0.560000 0.950000 0.620000 ;0.210000 0.380000 0.770000 0.080000 0.260000 0.640000 0.460000 0.790000 0.310000 0.410000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.840000 0.800000 0.420000 0.580000 0.670000 0.070000 0.360000 ;0.690000 0.870000 0.310000 0.600000 0.760000 0.200000 0.380000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.450000 0.380000 0.280000 0.590000 0.620000 0.230000 0.810000 ;0.320000 0.190000 0.680000 0.140000 0.090000 0.940000 0.170000 ];\r\nWexp=[6 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.207000 0.288000 0.180000 0.595000 0.748000 0.459000 0.802000 0.387000 0.027000 0.090000 ;0.450000 0.982000 0.694000 0.613000 0.486000 0.423000 0.685000 0.847000 0.432000 0.604000 ];\r\nWexp=[4 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.750000 0.970000 0.820000 0.840000 0.680000 0.780000 0.730000 0.270000 0.220000 0.150000 ;0.130000 0.920000 0.390000 0.320000 0.230000 0.080000 0.800000 0.330000 0.720000 0.590000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.140000 0.600000 0.950000 0.160000 0.650000 0.580000 0.910000 0.230000 0.020000 ;0.120000 0.510000 0.530000 0.280000 0.350000 0.070000 0.400000 0.930000 0.490000 0.090000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.545000 0.527000 0.500000 0.727000 0.018000 0.400000 0.191000 0.982000 0.409000 0.591000 ;0.945000 0.745000 0.355000 0.673000 0.045000 0.118000 0.682000 0.827000 0.645000 0.482000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.930000 0.980000 0.470000 0.810000 0.830000 0.460000 0.510000 0.540000 ;0.490000 0.640000 0.170000 0.290000 0.140000 0.440000 0.590000 0.760000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.580000 ;0.330000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.640000 0.820000 0.700000 0.480000 0.520000 0.610000 0.060000 0.240000 0.300000 ;0.550000 0.450000 0.090000 0.030000 0.850000 0.670000 0.760000 0.360000 0.790000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 ;0.900000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.100000 0.040000 0.110000 0.650000 0.250000 0.570000 0.480000 0.150000 0.800000 ;0.550000 0.020000 0.920000 0.080000 0.700000 0.360000 0.910000 0.710000 0.820000 0.850000 ];\r\nWexp=[5 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.890000 0.060000 0.090000 0.750000 0.730000 0.810000 0.950000 0.660000 0.390000 ;0.530000 0.970000 0.610000 0.670000 0.690000 0.380000 0.590000 0.300000 0.720000 0.110000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.870000 0.600000 0.860000 0.830000 0.680000 0.810000 0.700000 0.920000 0.760000 ;0.170000 0.510000 0.330000 0.050000 0.240000 0.030000 0.410000 0.480000 0.520000 ];\r\nWexp=[9 9];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.940000 0.720000 0.810000 0.220000 0.280000 0.530000 0.440000 0.160000 0.880000 0.970000 ;0.120000 0.030000 0.470000 0.560000 0.380000 0.340000 0.690000 0.090000 0.250000 0.750000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.410000 0.360000 0.230000 0.140000 0.180000 0.050000 0.500000 0.270000 0.090000 0.450000 ;0.680000 0.950000 0.910000 0.860000 0.730000 0.550000 0.590000 0.820000 0.640000 0.770000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.278000 0.852000 0.370000 0.824000 0.389000 0.704000 0.546000 0.204000 0.296000 0.056000 ;0.833000 0.315000 0.991000 0.028000 0.907000 0.630000 0.361000 0.037000 0.065000 0.954000 ];\r\nWexp=[7 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.713000 0.657000 0.778000 0.435000 0.565000 0.870000 0.963000 0.343000 0.481000 0.593000 ;0.287000 0.333000 0.454000 0.130000 0.370000 0.759000 0.176000 0.611000 0.231000 0.398000 ];\r\nWexp=[10 6];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.590000 0.750000 0.650000 0.900000 0.740000 0.880000 0.850000 ;0.400000 0.070000 0.540000 0.380000 0.570000 0.150000 0.490000 ];\r\nWexp=[7 7];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.110000 0.920000 0.540000 0.840000 0.380000 0.770000 0.900000 0.490000 0.870000 0.750000 ;0.620000 0.480000 0.330000 0.440000 0.890000 0.130000 0.430000 0.080000 0.340000 0.560000 ];\r\nWexp=[10 5];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.480000 0.650000 0.770000 0.690000 0.720000 0.560000 0.660000 0.550000 0.510000 0.730000 ;0.310000 0.440000 0.300000 0.060000 0.200000 0.420000 0.030000 0.070000 0.110000 0.140000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.900000 0.680000 0.600000 0.800000 ;0.350000 0.050000 0.170000 0.880000 ];\r\nWexp=[4 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.730000 0.910000 0.450000 0.640000 0.090000 ;0.550000 0.360000 0.270000 0.820000 0.180000 ];\r\nWexp=[4 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.530000 0.740000 0.410000 0.320000 0.820000 0.970000 0.620000 0.500000 0.710000 0.090000 ;0.180000 0.760000 0.380000 0.150000 0.470000 0.210000 0.560000 0.120000 0.590000 0.440000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.487000 0.092000 0.714000 0.160000 0.504000 0.277000 0.479000 0.605000 0.462000 0.832000 ;0.210000 0.824000 0.118000 0.387000 0.664000 0.874000 0.445000 0.739000 0.546000 0.017000 ];\r\nWexp=[8 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.100000 ;0.400000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.688000 0.872000 0.615000 0.477000 0.734000 0.624000 0.394000 0.532000 0.954000 0.817000 ;0.193000 0.119000 0.349000 0.073000 0.037000 0.009000 0.128000 0.303000 0.046000 0.064000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.910000 0.550000 0.300000 0.570000 0.920000 0.400000 0.450000 0.150000 0.110000 0.190000 ;0.090000 0.790000 0.890000 0.740000 0.850000 0.940000 0.340000 0.380000 0.720000 0.260000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.723000 0.639000 0.824000 0.697000 0.840000 0.882000 0.437000 0.782000 0.588000 0.218000 ;0.345000 0.151000 0.067000 0.849000 0.815000 0.235000 0.521000 0.765000 0.950000 0.681000 ];\r\nWexp=[9 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.150000 0.350000 0.090000 0.110000 0.330000 0.220000 ;0.390000 0.460000 0.850000 0.700000 0.570000 0.610000 0.500000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.850000 0.790000 0.550000 0.380000 0.300000 0.400000 0.770000 0.740000 0.320000 0.570000 ;0.260000 0.210000 0.110000 0.130000 0.020000 0.040000 0.230000 0.190000 0.090000 0.060000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.961000 0.330000 0.010000 0.816000 0.583000 0.913000 0.893000 0.951000 0.126000 0.398000 ;0.767000 0.029000 0.262000 0.641000 0.175000 0.544000 0.359000 0.932000 0.680000 0.476000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 ;0.700000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.240000 0.050000 0.190000 0.110000 0.920000 0.590000 0.730000 0.380000 0.780000 0.950000 ;0.860000 0.700000 0.430000 0.620000 0.220000 0.540000 0.410000 0.890000 0.680000 0.490000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\n% function GJam_Qual_2014d\r\n% % \r\n% %War\r\n% fn='D-small-attempt0.in';\r\n% %fn='D-large.in';\r\n% [data] = read_file(fn); % \r\n% \r\n% fidG = fopen('D-small-output.out', 'w');\r\n% %fidG = fopen('D-large-output001.out', 'w');\r\n% tic\r\n% \r\n% for i=1:size(data,2) % Cell array has N rows of cases\r\n% % m=sort(data{i},2);\r\n%  m=data{i};\r\n%  dw = dWar(m) ;% \r\n%  w = War(m) ;%  \r\n%  \r\n%    fprintf('Case #%i: %i %i\\n',i,dw,w);\r\n%    fprintf(fidG,'Case #%i: %i %i\\n',i,dw,w);\r\n%     \r\n% end\r\n% toc\r\n% \r\n% fclose(fidG);\r\n% \r\n% end\r\n% \r\n% function dw=dWar(m)\r\n% % Post contest\r\n% % Lie to burn opponent best pieces\r\n%  N=sort(m(1,:));\r\n%  K=sort(m(2,:));\r\n%  \r\n%  dw=0;\r\n%  for i=1:length(N)\r\n%   if N(i)\u003eK(1) % Lie to above to beat lowest\r\n%    dw=dw+1;\r\n%    K=K(2:end);\r\n%   else % Lie to just below best\r\n%    K=K(1:end-1);\r\n%   end\r\n%  end\r\n%  \r\n% end\r\n% \r\n% function w=War(m)\r\n% % Optimal truthful strategy\r\n% % Best lucky sequence\r\n%  w=0;\r\n% \r\n%  Nm=sort(m(1,:));\r\n%  Km=sort(m(2,:));\r\n%  \r\n%  Nmz=[Nm' ones(size(Nm,2),1)];\r\n%  Kmz=[Km' zeros(size(Km,2),1)];\r\n%  z=[Nmz;Kmz]; \r\n%  z=sortrows(z,-1);\r\n%  \r\n%  while ~isempty(z)\r\n%   ptr1=find(z(:,2)==1,1,'last');\r\n%   ptr0=find(z(1:ptr1,2)==0,1,'last');\r\n%   if isempty(ptr0)\r\n%    % score\r\n%    w=w+1;\r\n%    z(ptr1,:)=[];\r\n%    ptr0=find(z(:,2)==0,1,'last');\r\n%    z(ptr0,:)=[];  \r\n%   else\r\n%    z(ptr1,:)=[];\r\n%    z(ptr0,:)=[];  \r\n%   end\r\n%  end \r\n%  % Create worst Ken/B Scenario\r\n%  \r\n% end\r\n% \r\n% \r\n% function [d] = read_file(fn)\r\n% % Read whole array then parse\r\n% % dlmread valid for numeric arrays\r\n%  m=dlmread(fn);\r\n%  m(1,:)=[];\r\n%  for i=1:size(m,1)/3\r\n%   d{i}=m(3*i-1:3*i,1:m(3*i-2,1));\r\n%  end\r\n%  \r\n% end % read_file\r\n% Data Set file\r\n%4\r\n%1\r\n%0.5\r\n%0.6\r\n%2\r\n%0.7 0.2\r\n%0.8 0.3\r\n%3\r\n%0.5 0.1 0.9\r\n%0.6 0.4 0.3\r\n%9\r\n%0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n%0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n\r\n\r\n\r\n\r\n\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":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-04-19T14:08:56.000Z","updated_at":"2014-04-19T15:00:47.000Z","published_at":"2014-04-19T15:00:47.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/2974486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 Qualifier Deceitful War\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\u003eMy condensed summary of the problem statement.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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[A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\\n\\nA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\\nDeceitful A Wins 8\\nOptimal Honest A Wins 4]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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 Deceitful Wins, Optimal Honest Wins\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Deceitful Solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\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":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":44237,"title":"Mastermind II: Solve in 8 or less","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved \u0026\u0026 Lmax\u003c9 % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==8 % length of 8 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 8\r\n fprintf('\\n Solution exceeded 8 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":15,"test_suite_updated_at":"2017-06-18T18:19:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T17:46:47.000Z","updated_at":"2025-12-12T14:09:25.000Z","published_at":"2017-06-18T18:16:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44236,"title":"Mastermind I: Solve all 1296 cases","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 1 1];\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n   mguess(end+1,:)=mguessn;\r\n   mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n   mpegs(end,2)=mc(ptr,mguessptr);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Lsol=size(mguess,1);\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\n\r\nif solved\r\n fprintf('Solved in %.2f\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T14:17:00.000Z","updated_at":"2025-12-12T14:05:24.000Z","published_at":"2017-06-18T15:51:46.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Brute force can work but masking is much more efficient. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":46938,"title":"Numerical computation of the optimal shooting angle of a catapult","description":null,"description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 879.667px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 406.5px 439.833px; transform-origin: 406.5px 439.833px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 64.3333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 32.1667px; text-align: left; transform-origin: 383.5px 32.1667px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eConsider a capapult that fires a projects into the air with an initial velocity\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"56.5\" height=\"20\" style=\"width: 56.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. The free-flying projectile is subjected to air friction and a gravitional force. Given a desired target \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"109\" height=\"21\" style=\"width: 109px; height: 21px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and an initial velocity \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"56.5\" height=\"20\" style=\"width: 56.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, find the optimal shooting angle \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAlCAYAAAAjt+tHAAACp0lEQVRYR+3WWchVdRQF8J8USUSID5qKEInigCmKOECSgggi2KQoRg4oOEFOIBGoUCil4IQDkSShmSPaQxTiSCg+KinRS+BDSi+WhKaBKBv2lcPh3u8OCh/CvU+Xc/5n77XXXnvtfxed/OvSyfm1AbQZaDPw3DHwIoZhLF7FNZzH3Vb9pFEG4tw4bMMFbMZQfIMrWIS/qoB4BYNxHf9VA9kIgDjzHrbgR6zJioOBXfgIK7ADj0pJZuIQ3sLFVgG8jW/xRyb7sxBoLT7DMSzEnax4JE5iELZjXr6bilO4WYlRj4EB2I8hmfyHUhUVAJcwGzewBF9m5cHaYuzJZ+MxHecaARD924SlOJp9/rsGgKsIun/P990Ryd5F/6T/BH4ta6EjBt7J6iNm9Llc/Uv4AitRC0BU2xe/pH5CsP8Xi6gFoCe+xjQE8gUoV/8ytiYzMYofZm8rwH9OgPOxFxtycmbhcr0WvI/jeWhVJiqLuAcOYlJWFywFyKB8dD6L/ztThP9iIn7C7Y4ARO8rH/2GGTnHZQCh8CN4E7uxGvdLhz7APkwuVl2vBeF0MVaVCViGQF/+RXsquqjFUlf0yxF+0KgPRC8PNGGtAS6M6kwT3zw5WhZhUdkReEoNB+uWwgqVn8Yc3HoWAIqBi8ouxw6RhdP1zt7HNJRtuCE8ZQaKyv4qZ7y8RF7AeoQLdiTSlgAMxGEMxzp8XiXKG/geY/BpuuXDhrJVOVRmoB6AqD624cb085j94nJqGkcZQB98hwk1GBiVIxqJ5ubdoOmkHflAzG0soI9T5ctxLz94DaGLWDLhDdGqloRXz4gqVf5T2HC9EliYVDje2WeRPIBUW0bxbAQ+yXtfXKdez6UUztfy/a9RJ3yqnjb7cb0bUbPxmj7fBtBmoNMZeAwulJEmqW2YowAAAABJRU5ErkJggg==\" width=\"16\" height=\"18.5\" style=\"width: 16px; height: 18.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eof the catapult that minimizes the distance between the target and the trajectory of the fired projectile. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42.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: 383.5px 21.25px; text-align: left; transform-origin: 383.5px 21.25px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etip 1:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e Consider the states \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAABwElEQVRYR+3VS6hNcRTH8c9VKDKSiTKRiYzlGUaSYsRAMbkD14SSooiUt4nEwMDUoxhI6d6ukRtKMWBmrESUwkheLa20O23249zTGdy964zO/7++a/1+a63/iCF8I0Ng6qADVb2Tt5N3WhToGmlaZPxXkJkt7ywswVZsxzrcx3584s8jsQbnsQL7cKeJH2XyzsVSvMV63MICbMZDbMRBfMMWHMXVfqHF+4txA5sy+D0cwjG8bwIqnq1qpDkpY1T2IKs7iVdtgXGvChpnxnAtIXtxHb8GDV2NSXzFNryoAC7KRCOxM2Vn61QaTXUbK7E7PS6LNR978kx0/AmcagONTo5so3niO4fj+FESbHbKvgqP20JDhV1Yiw+IBprIaj7+R+KosjV0OY7kbxnG8Q47snvDu1gOU/hZSKIRNMYjfPmChbiMK3iC4ryGrzGv4ddNPO+pujY0gBHkMF5n5qdzG0UXhrcXcQAv8Sb/i23VOz61oeHfzgz8Of2Laoqyxb69hHk4i7v4XuJtbWg/s957t4P+VaTORmoq/VDk3YBHbTdS0wrjoY8qR3MSnuECnva+vYOQtzLZDlopUT8HZo68vwGa/l8pXtmErgAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6hOYRQG4OfIJSTlklImIsmY3IoMJOUyIAmlFCYIhQ5K7ilJJMVEuRUDkYgZmYhESsZyi1IuyV3r9P3atv8//22fzsC/p9+31vu973rftdt0w9fWDZhaoF2qekvelryFKNAyUiEyVmryf8vbAyMwG3MxBZexBu/o+ElMwn6Mw2pcqGce5eTtg5F4gak4hwGYiZuYhvX4illox9FmQbP1w3EG01PzS9iIrXhdD1D2bjUj9U4yBrOrid0OPGoUMOqqgcadVTieQFbiJH51NehE3MBHzMH9CoCDEI+alwx2ByeSCb/XI2/cDVOdx3gsTTPO4w7FMbxKY5iAdeiV3B1m/KNONXnDyXuSeQJoH7bjRw51BYbgIEqsZuA0HmIZ3pZqOgONs8WYjDcIA13PN0BfbE5SPs88ZmCa/2gswtNaQMemZtFwFK4l+RYk94aksRxuIxT5nDNYPOYQxmBJyn0HbpZpxKM/PmAwDuMIwhDZvMZcI6+7cBb3KhirxDSWzCZ8yTMNwGgShyHDT+xO2ygMEEwOYG2a0bN09pdBcuChwilswK1y7g3GC1Pj92l+wSbAS1/s25CrH/biYsY0ebI9sQXfcub6R95m8p6vjf0ceQ2nf8ofVotMIw8JA3a6n4sGHZZyHXl9UunFRYJGhLalvD7OAMZ8l+NK6c9UFGhELdwdUXuQYxgZj9jsLG2yIkAjThG1aFrue4n5uFvLRmrERDXVFMG0JqByy6HuwmYKWkybUa9q7W9V624prHV7AQAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e as the x- and y-position of the projectile, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6iNcRQF8N+lKGJAJkpJSh5T5VVIJEURRZ6lPAoloUgpz0wklIGJgUchUiJCkUwYUAbKQJSIUh6FvNq3ffX5Oufee65z3IFz6nTqfP9vr73XXmv9W3TDp6UbMDVBG8p6k94mvXVhoCmkutBYrcj/TW8PDMEszMFEXMJ6vKP1khiP/RiNNThbyz4q0dsbw/ASk3Aa/TAD1zEZG/EVM7ENR/4WtPj+YJzElCx+EZuwHa9rASqe7UhIvZLGmOxyTrcTj7oKGO91BBpnVuNYgqzCcfxsNOg4XMNHzMaDKoADEE2twAjcwF7cKjfZmUlDVGcwFktyx2Xc/tiXDcUaRmEXopEFeFzLTkPJe1I88V4U3oHvJdS5+Iyrhanm4XylRtubNJ4twgS8QQgoii7F2wJo+HoonuNb4f/w9xVEQ0H17097oCOxNb/Ds8ArzE/1DspwuI0fpcmjboTGGGzBp2qgYY+++ICBOITDuIuiX2Ov4dfY2SncrwA4NQMkUuxZWQBtkwZgFImunmTnuzONwh6x2wPYgId4kc8irYr2CdWuw/JMsTi7FvcqTRrgobIo/D73F9MUaYu8PYg+aYVzpR221W3bcYBHqFzAyszt1jOdsUxXcyBsFOuZXvZ3I0Gj2WU4kRdHaKPhkwbA4qR4IZ7+C9CeKc4QadxKX+oJGsVDodNwFDdT0WGbyOHN5WuwHjuNGhEYYbmwzJ20VfxGDv8RDI1Wb1XV12PSmi3VBK2Zslpe6BZ6fwFJmW0pj/+3QwAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAAB8ElEQVRYR+3VS6hNcRTH8c+VR8hIiiuSGMjERHmFkaQwIQlTjwElhTxK4XpMJIqBmWcxQMlrpmRCogyMRYQIKfJq3dapM7jOPpu7u4Ozd+3B7v/4rvVbv7V2lwF4ugaAqYZWqnotby1vvyhQG6lfZPzbJZ0t7yBMwBIsw1xcx2Z8oPcnMRuHMR0bcblMPfqSdxgm4xXm4SJGYRHuYgG24jsWYxdO/i+0+Xw3zmNhXn4V27Abb8qAmvcWGWloyhiZ3cjs9uHpvwLjXBE09mzA6YSsxxn8rho6C3fwBUvxqA1gJLMa67AW78vIG3vDVJcwMy+IGhc9U3EWH7GmLDScfDDNE6BD2IufLajDcQSr8LgstCHRHLxFGOhWSvauBXQ5ZmAixpeFTsOOfKfgJl5jRbp3TA6He/iVQUzCHvRgO+K7pbzRHiPxGaNxHCdwH839GsaIft2PC3iYwMEJjCAe4FgRNIBxSUT3PCM/kNMo2iNqexRb8AQvci2mVaN9YmLNzzIMaQca9VuZF3/Kg5FNQ7ZIJuZtRD8i5buCH5nl2DwTgb9EmKkw06IWaLUesoZCz3AtN1YOjb/QTpzC14RGuTZhXLZcuD/a51u7Y7BIhXDnuYJNt5td3M7sLYL2tV65vJ0NbVmSqmpaQ3sV6Bx5/wD4ZmspFWOBmAAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e as the x- and y-velocity. Then, the trajectory of the projectile can be found by solving the following ordinary differential equation (ODE):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAsCAYAAADl06/eAAAETUlEQVRoQ+3aaai9UxTH8c9f5jEkESl5I5Eyz0oZQ4okQ0JmMmSIDJmHJJEo74yFMmSIFzIW8QJ5gTcyy5Qp89Dvbz//zr33dM8599z/Pp3au26dzrOfs/b+rrXX+q3nuUu0UYXAkipWmhENdKUgaKAb6EoEKplpEd1AVyJQyUyL6Aa6EoFKZlpETwnoOOoIXI/HcDl+qbT2qTIzbkSvi3txEL7DAXhjqghUWuy4oFtED+mocUEPaaZNa6ArxUAD3UBXIlDJTIvoBroSgUpm+kX0CtgUB+IQ7IYncBa+Z+nLgl1wA7bCqXi40nqXl5k1sAMOw37YAMfjyWJwLVyAM/B8YfH1KIvpB3oVbI7PsTseRAztW4zshXPxB/bHJbhjFKMD5l6Gq8b8vbdxJN4f8nc2KfP+xM04tjRiAftP6XxXw06lMTsOHw/520unDcrRG+N+7F2Aps0+H5fiq1EMjTB3EqB7l3cK7sJbBfjB+LQE3L8j7GPG1EGgVy4pIhH8VIniK/HOQg1OwX3blZSxEe7GN8ie/xpn7YNA57c7D+fzybgHC/bsOIutdG/vKX6hRPVn49oeBvTOeA4/I8coR2q+kUIS58QZ1467wAncvypuwem4FReXk9xvKVuXenVoufgorsYnsycPAzqF8aFSlY8pObuf0VTuFJHMiVLJI9MYnbYRJlEYN+LZsqekj9ljm1K37ixFN4olgRWFdubsx8WDQEeB5OYUwIw8d06x+ruP4ZVKFKcyvzIG6EkXw+3xCDbDhzi8T00KlzC5r0d95LubEFU2R/HMBzrXjsKuiGZMQZjPwx37RPO0gt4QtxUZe0LZe79TnNO7fh+JlyDZE5F/X/QG43ygt8RF5W8LPIMvezycXJyG5aWiNRcL9KRSzYq4EB/h8ZKnU2u6Uxw9vUdJE/2k7Tq4vQRjeo8ZgqEXdKRcPPVT8VY8mxtfRW8ljoejp5N/H8Cbs8iMG9G1QGfva5c0mNdvOb0p/AmuX3vUVneKE1Rp2tJM/T5rkUkb52FNXFPunzGlAx3IARePppuK93JD55ku/5yNdF2pqrk2x3OlEI6TOmqB3rYEzHr4oKSB03oasR3L9ejpRHhUV/JybzTnFOxTlEda94y82su8GS16B7p7JZVk/mPJx4naAO9Gnm9E7qyO60rB6CfipyWik48j4/I8J6oqKimpsRtpua8o+TZRnc9zZFuZnEDNaUjHnKgP6LBalj4GqY6FRNe0gF7I3gbdE8kXp72Hk/BDd0MDPQjdaNdz2lPb8vTzaHzbQI8GcNjZSTdJGekzkj5+a6CHRTfavKizNDGJ6hTQZWN5pI4I9hfH6AxH29pkZqeHiCqLWEirHu0dZXZO+S5RPUMoLCbovBxIIUxHlX8Te70s4rXl+Ox6Mpj/7zeiQk4sC3gZ7+Lpsu9etbZ0ymKCntSmp8JuA13JTQ10A12JQCUzLaIb6EoEKpn5D7tJ5C2FZ3WyAAAAAElFTkSuQmCC\" width=\"45\" height=\"22\" style=\"width: 45px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e,     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAsCAYAAAAKEcTgAAAEXUlEQVRoQ+3ZWah3UxgG8N+HjFEIEYkIKZR5doUUETLLPEaGzPM8ZVYooWSKC0MiLkTciAtKwo15iChD5qFHa2t3cv72//zPt84+X3vVqa++vdb7rmc963mfd/0XGEY1BBZUizQEMoBdkQQD2APYFRGoGGpg9gB2RQQqhhqYPYBdEYGKoQZm9xjs5XA59sZ5eAx/Vcx3Xocal9nb4HksjydxJL6d1whUTH5csAdmT3A444I9Qahh6gB2RQ4MYA9gV0SgYqiB2QPYFRGoGGoUs2PztsQ+2A2r4Ag8XfKL1z4LJ+MFnIKvKuY+26EWw1rYA3thezxV9pVeIlhti2uxMU4oTV3nPEaBvWZZ5TfcgMPwQAH3T1yDZbA1vsHh+Khz5NEfboBHsemE612MKzqusRTWxWfYAQ+X5m3XQqadcTp+xe44H3d0XPufz7pq9vG4C28U0PfEJyWhhdGuzwXYbdzWwIPYpYD6BM7EBfhyHIDb33YFe/MiH6vjbnyNS/H7TAP3fN6SRS7C5GcKm7PftybJuyvY7ZN+sbD700kCz4O5zW1Oqsfhnkkf3bqCvTRuxEm4GeeW056KWdbbqXwXLf+5MOMWfDwPAG6n2Dy6/YDIZiS0y4i2X4Wj8e5MZCQgxnlch+cKsyMlU8eBOA134kccU5xMXgjDlBnrXZddzvI3KZaPFEd2aNHw/wsRxxaZzdwDZgr2Fngca+N97Pcf+hU9D/tT/d8pWcU+5iYci64JZ+pcF8g4k7AzRTEjzusi/DEC7cUL0c7G5zMFezXcWuzPUdhuGuDiSzfEvVO0LZ41zB7Hhs0l2LnFB5V9pm9IYRx1mxv8Q8jMy4HELo7N7CWQk/qgABbmRg6ak47f3rFcl+ZHhPjQ9sghvFKagFyxvo+NcE75Ww/P4ovWbY5UpKl5Gdl/xoq4HjeV7/btAnZOdYVyOtHcnFQKRYL/VICO325OOkFzivmp7JdpUAyzMyc/pb3WQ6Rj8yJ332Plcotvx6tou7DIYPx2ZPIhvF72EsxSm4JPvPmF6AT2ZmXBlfBe6QhPbBW2rcr/R58jDanU0bXpCl907BKsWrqvJNSnEaADXm5vnEOYemWrWYt2h7Gn4s3iqNJZ5q9p5jYptzYO7bui7Z3Ajj5HKsLGVOLobK5QM9KeB7y05mF3/j3K0uVKptWPk2mKZp/ADiv3L4AGqOhz2NvIQ3LNe0iK/LK4uhiFppnLjcjh3NcyDCmkncCeTSCSSFiTG/DSbC7ck7VyUIcU6bmtxfTqYKewnrGQ30/mGvP1kWbt/imvnQeXN5XL8GGRn9SDzg9R42yssU55NUx1XlTfTxqXNQqb6Py/FrBru94V7KyX9+91yvNj26FEv+Ne0hwtyqOajORdIAU23jROpRmp+nkzSSv/9qKM9DhuZBIcYhvjp/MA9V8jRSQWazo/PknsPs2txuw+bbp3ucy2Zvdug31KaAC74mkMYA9gV0SgYqiB2RXB/huK2uktuGazvgAAAABJRU5ErkJggg==\" width=\"45.5\" height=\"22\" style=\"width: 45.5px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"63\" height=\"22\" style=\"width: 63px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e,  \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e    \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 22px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 11px; text-align: left; transform-origin: 383.5px 11px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"87.5\" height=\"22\" style=\"width: 87.5px; height: 22px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.   \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63.1667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 31.5833px; text-align: left; transform-origin: 383.5px 31.5833px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMMAAAAnCAYAAACyqvw+AAALS0lEQVR4Xu2cBawtSRGGv8WdAMEJFhYN7u4Q3F0T3C24++K27OLu7k5wd4fg7hbcyfeoIv369ci5M+e9e++ZTl42e2e6p7u65K+/us9BLG2RwCKBPRI4aJHDIoFFAv+TwGIMiyYsEggJLMawqMIigcUYFh1YJLC3BJbIsGjEIoElMiw6sEMloAO/GHB74PzAX4G3Ak8GfjhlTUtkmCK9ndn3+MA5gfcB/96BS7g+cFfgcOBPwC2BywNvBG4D/DzWdCbgSMCXxq5xMYaxktod7x0M3Al4ZKE0O2llJwWeADwc+FpM/JjAk4BbATcGXhp/PypwR+CrwDuA/wwtdDGGIQntnudnAO4OPGiHGoI7cWHgjMDzKuW+akQG16ahZDMyaPxfH2MQm2YMpwRuClwUODJwDOAjwHNCYIPeo8M29ELi2BsCJ5swtuNcBrgBcBfg1zPZ4gmBpwDPBD4w05hbHeaIobD3Ba4FvG6FgY4S7/696qORfBi4bayxfOzaHwM8rogmzU9uijG4zmsAh4RgXgL8DTg2cD/gDvHfZwD/XGFzfPXEwNPCsO4MfKcI37cD7gncDXh5T6hOI7h3GOo7gRvNZAwqnxHBb7j+Vde3ojgGX9dZCGVUbJ3H9wd7DL9gZHDvrg58svG6jurWESV+2zXcphjDxYEXRii9VxhCyuREwLOBS4Zn6VPaWo4qmPjbzbge8LnqBfHsoTH2tYFPNzbCKOUmfjs27OzAnMZwljBWDfMbw3q19jcS0ojz7wPUXn7VCWjsDwbcR53OXxoDuE+PBb4IPHeTjSGV3U0oE6xSJrcIqCRk8p3vjdwR8eurgJ/0eHJhmYaod1YByqYzEtf+I47GuKn+m8sYUlH8xgOBf41c17peMxoYnVTaywHvnuFDskZCICNwJtWtYS8L6Ajdj5+2XtiEyKAQ3hUCuArwmYYgzga8BpBtaeHOrj1LrPrRnpAv3BGW1clda0wV9mEzGsOpgJcBD5lJ8abqbs7HaKBcdCJTmpHXhFladSgXSngmpG3mKZtgDCZqjwK+EFCmBRVOEDhWvvrFkUP8YcQulUbUijplsng14E0DY85tDEZDjVBu/lsj1rPuV64JvBZ49AyRymhntP3RQD6Wazpa0LLmik14ttuN4egBTSzG9BmDifTTgZsAfV6+VpbjAM8KI3N8cfnHipcM4eYgJtXO4Zf70RjSEI12FqZ+3/Nt5XTWMBq9tVy+ENB+FwJOH95XJf5mQLp8bq5lIe89QU74vNUSt0sy1BBJD29OdWngu8DJ4xvuhcoubKzhpYzbKYAnrkAKCM+uGFF8n70YYwzSkXoWF6B3sepnkveG+GfCohedmgitwyuVxuAmKXCTqLqNNZrWHIVKsiNCAJmRBwCvBk4TdKabeX/gZyMWOGdkSAP/VU+iqoIqE9kWlcs+jwj4cp2IZOJroeMlgoY2vxJ6XgB4W9DIsnHnjaq2DuXHjbUqDx2DulLidmVvcutcVFb1y3bucFDCmiyk+fdkBh1PckJPn03nI2Eg5G01I+Xju/SgzxiOEEbgZPR2SRvax0nrPbJdJAQ1tN8Wfl4ZxjT0bt/zMfg7+ydM8v+7oEppDCZh1wW+vMIEk63SIGyO8UfgoeExyw3rG3ZOY5BfN1/4YFWIan3/uEEgaBgqq5Vb+yYNe75wfFaAXZuw0+d5nEO4+ApAZewiKTJ3EuMrl0zmdSZvj6haK72R6STV/JW1umcfZZzN5Fyj9qjGVzqEnDmeYyiXvVqfMag44mc/aGQoO+fC3r9iInQgjOFK4ZH0ek8NRqFWzimRIQV6rhhfgdtUKh2J7MmY/MM+cxpDytozPBbb+lq5fguQFvz+XHQojWXoectR5fjWFaz3vLcYO3VJA5NJK+sgevkrhDe3yzminuABvVbr2t9812gmmSKcLQ1vz/MuYygx9AvCU2T4sp/41yJHHw4fkP9+e3y8UAbDvjDmZg3mIbG98G9VA3chRlE3zQKehiaOzvb6iKRjikvrMAZpx302vpJ+aQwaTs3XT32ehilOr6lN8wRlZPO7WRD1/4VO5g9ZyJyqNDmPpky6jOF0EfbEbTU/XnLFJk1a+1BiOHURU/srBIstem3ZJMvz4l2PY1jwEkuKQYU5q7BJzktWw02UKRFeWHi7VEAJcbStPlHZtZ7dagxZx3F9FinLYy+SEEZQjcT2logQynGrx2O65DvZGGoMmImQocoihtn8gS7mjDEW6VOTRHGxmPE3wRyZ1MlgWBiTeWkVx7rGz6MObrKJo0qfTczuxnua0lZj5daY6zCGVWHS3JEhq/CeQzJ6Wtism05INk9IaxNWHha5wZyONnMGYb+5616tKzLkAm5eFaH0gnK0Wegoz4+PUcjt+E5JCJgcCqe6ErB6/mJamSPZk1aELI8Xj6Fs5zSGVRLoqTCor3/KSJiow5DdajWhuVVkmSmpWluLrp6iQ2kMTcKnL4FOaGECbfh3w40SUm9alVVNvesq7UAk0EPzO3XgVAUlSyENOpb9yXM2LW+a300m5lhBT3+8Z0JzGsMYajWnsk5jSIh0j6j5DEEf90O2KWHTJ8KIuuoXQ/tbPjdZ9zCkbKHHukdFBl/SUIRC8uaeBFRBvFb3oSiEDC2qNcntZgxGOgVv4rsVoScT0mcM6aE9mj1EQc9pDO6fhi0pMKbo5rkpI/2cMCkN0rV3nSi9MvCDqv4jISGsMtEVQq1yRKbPOKTZdXpGqH1Or3ZFBv8uvpYxMiq8aBXz2yHvlms0wrVYplyKh/38pzcpqT8JhjcHrOoiEtIYTNaHjizPaQzO3eKYCuWJ2r4Tq+uKDHlcxZqNEaJ1fFqH4lGJ+jSpjsqcy7xUZ2X1e0pLw/QQZlnn+P+YXcYgHSmrYkLzqegs5VjSq1MmdqD7lp7nd41jFOX8VHipSaOaPLgblIRByYR0FZtklqQLn9/g0Ws5zG0MFsl0ZCbRfZdo1mUMScH3QSSNwShQG4u6qbwlNOraxFb0x/1zH4VJZZ1j0BiSJbFMXjZpL7N+L5OPxdVbmfg6++ip3Rx/XUF+WxjY96sKelWrqzZ/haEOsYZxIcaZY1zP0Rg93MzzBG1oQi7x0MeMWNhStiqHkM3ILMs1pSU54BzrexzluDo/PbNK16KWy7qTMqsVt9Vfh2OBTljSdVrYOSTU1PvLTKZeWfvRgShz9XCqvjlnD2JqoM0LPq3I4N8uGMoi3WjNwY3xEko2L8O4uasm0FM2dkpfN8bETMHLkHmM22qlDM/QL0TkTTZDvpjTM1l1vqRn9eyOSZ/0rMJ2XGGV9x1U7q4bZqeNOod1ilLGGpWK4Bw/P4G+dt3mAeYP9eUii1rmMdLNykall9bUg/pPVGCtxGf53H1QSWXRPDZtVVdMLwtny/6fDUQhldqXs5gzOEdhpN5b1kkaXKel/unFp97O01g9UKneWoFuttoYFI6leBdoyTp/dkNl0vNJfWWW70VrD0pt96bHdd6exnSD/OmQ3QL3xsg+cyN/HsYoONXDjvnmdntHQ1anjY6tm3B75lsbg51MuLoyf43FAb2A0segbDdhbPp8jFxW3Y0yCfk2RSbCLcsBQuPeG4ylMeTlBzFeH/uQhYs5LmhsyoZsh3VayDJ5NCdY5UTudpj7Vuew0ppLY8jLIFKpXWVzJ2UiIuthFGmV1rc68aXf+iWgcughZZZa11/XP4P994Vcq0fNR50oqGGSXl9WwcTPsnh5SSNPZkp3eSxZVmErhbf9J47lSy0JCHWlXE1Ud/P+eQvO/GD0b0+12KS82SY/7u0sz+uY6ft3L/nIpvxi0bNFArtNAmOufe62NS/rWSQwilpdxLRIYGMlsESGjd36ZeG1BP4LDRT/RiBjhHMAAAAASUVORK5CYII=\" width=\"97.5\" height=\"19.5\" style=\"width: 97.5px; height: 19.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAAAjCAYAAADyrNZPAAAElUlEQVRoQ+2ZachVVRSGny+h0tBwtn6o/VBRcEKUKAwKy5BCxcRUFMURJ0gpSqkoySlTK2cUxxx+OOMsSRoRkZGgNPyLCCvDQDE1TOWVdT72dzznnrPv7d4j9zsH7q+7h7Xftfa73rV2DfmXGQI1me2cb0wOfoZBkIOfg58hAhlunUd+Dn6GCGS4dR755Qf/AeAF4DvgT3e7+gT+Q8AAYCDwK/AY3FV7m4HTwK0S/NAJ2Al0j1ljLvAe8F99BL8dsBR4EJgK/GIgPAWsA/YA84CrRThADnwN+Chm7gVgEPBN+P/6EPktgTVAP+AV4JgDgs4/HlgLvGkA3vR0QHtgI7Ad+Cli7iXgXNTNqnbwdb4ZwDKL7nHA3yGAnjDg2gKvAqc8wdeazwDTgcs+c6sdfPG6OF1R/zbwAXA7BFBDo6RJwCfAG8CNlCAG668CdqecUzus2sF/3qEZJdr9MQCJs5cAZ4FhMfQRNXUksNX++Bo4ARwAvgf+TXJGtYMfgHrF5J4ASgJRsvB4EnBAU2A9MDhirLj/fWBXoVsUBb6uYRugC9AbeBL4Fng3LJUAybcJJrMupjC4kkMetgQ6JUVEPw18acbNNBpKsrWxSUvlih5GbT1Dk6SgYlVUFPiSZR2BscBwWyzuyipZTTYN+0+Ctc2Bz4D+SadK+F/KRRF9LWFcI+BjUzNJdOKC/w4gXe77qZhSwL4OjHYmK4eI0upofP1fiHa0wKaEqFGmb5IyUioNvrufD/hpnRvnHDlhCPAhoEBWTSGdrzxQ54sD31UA0rDTIgoQgS6PSiPfU0D4hk0Zxj9qBZS0vQ/4Ksak+RMTZgGbhatYYzUgeoqksjjw5bFtgCpA0YqiIfwpMYnvJ0Zo5zJg6b2kG0A+4BdLO2ED3YS8EpgFXHcHxYEfSDSVxi8DZ0Ira2E55KhlfG9kKjChgXH3W56RPxuY/z/ZF6itSCqLAl9GS9moKDkCjAL+cowJqsaXLLHIQffrl1ZqStvvsEMUqgd8zxnUAXKm8ExsrLUAtgAvRlSFAv5Z4zJl9X0e1lQ64co0qZjDxrtpiqwfgKHAeY9zFRoagJ+a83tZlabS2S04BLwcolJaklG3w6cJlQX4bnshTr+79UCcuCjGFwHtjfHpaqrHoSz9FTDCpJI6g0oYKlh0K6Rdi2m/FnOIUua4XUvZrXayql33C8RFV6PY8G1uBej3o2ewdbaGnVoOc6Iq3TDnSxatMCP2GtDPmWxqBiywii18gFIAKvfcoKWsSj3ctXSds9yCyi3exAK65Xos0U1XY068rTU/BSRMNgCLgd+dgwjHhcDjgIL5j6hDhsGPe5HRS496FZ+X+OJTbqDj1u/gVJmK/t9soMBVsEnNKSGq9+5+biI+aEGplrQrxTVeUlbz1TtSxIsllD8WRaxZu34Y/D6WoBTZWvCkyUk1ikp5ZssKdHffR+wJUYlXCk11gFoQ4vkvYiiltUV4N0CSVWwQtKRFU3or6Gs3Q3tpnUMmRH6OaF/XwaHau5r3g9NjbcjBz9A9Ofg5+BkikOHWeeTn4GeIQIZb55GfIfh3AC3XATPu1FSdAAAAAElFTkSuQmCC\" width=\"47.5\" height=\"17.5\" style=\"width: 47.5px; height: 17.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eis the friction coefficient between the air and the projectile. Use the ode45.m function to compute the trajectory of the projectile with initial conditions \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAc8AAAAoCAYAAACYTnGlAAAZ50lEQVR4Xu3dBbDlOnIG4N4wMzPDhpmZN8zMzMzMzBtmZmamDXOy4VQ4G2bm1PdKnfR6LVs+eOeOXTX15s2xLaklNfz9q32v2K9dArsEdgnsEtglsEtgkwTutenu/eZdArsEdgnsEtglsEsgduO5L4JdArsEdgnsEtglsFECu/HcKLD99l0CuwR2CewS2CWwG899DewS2CWwS2CXwC6BjRK4pPF8tIh4loj4gYj47439vE23P2FEPH5E/GRE/M9tGlgby8NGxAtExA9HxL/ewvHtQzpeAs8QEf8ZEb92/KuG3nDb99yQEK54EzvzXBHxxxHxhxfox4NFxItExM9HxF8PtPcwEfGCEfEjEfEvA/ffc8uljOdTRsTbR8SHR8SfjXbult5nYl8nIh4yIr6kKZHbMtTHjIj3i4jPvKBivC2yuxvGQd+8ckQ8cUR86gXX/m3eczd93TxERLxlM2JfecGAQYDyrhHxyRHx+wNCevqIeP2I+OhBg3sR4/nUEfEuEfEBu+H8vymkRF4rIng8t8WAPnZEfFBEfMpuOAe26t13izX/mhEhCvzEDYbTc0/Q0AzP/mVEfGeLYrZI8TbuuS3jv8a9DOc7RsQDImKL4fTcM0bEc0fEI0bE/SPiByPinzYOgk56zw0G9Gkj4o1GDei5I0+RCMv/WRHxQxsHfqfcboxvEBE8lz+ICBPwGxHxeRHxewuDAG+KxL81Ir7/Thlsp5/GwmP7iYj4igXvUgQA0uXhgVM89ygR8fUR8e0R8W8nlsOhc3Pibuyvi4jna+gTZTqKPj1O2yOM53tHxJ9HxH0j4pkj4g0P0Cm3ac9tXVSPFBEfExEv3Azad219wQH3CxCevxmwEcPHHj1PRHxSm9uPbXr18yPiF1oEO7p2srvWnX6816Dxde+TNVlJLXSvcxrPB28R50NHxEdt8DQPmKOrPEJ2L9UmmsGwMOHlvKa3aWMXcX/DgjERlTM677RiaK8ywA2NWnA2JZikt0nkvD80Ip4tIt42In62vf+pGsz7R+35v9jQbu/WU8zNCbqxv6JJgBMDpv3sDY6iVA9D+cgR8cYFzQABSgt8TVOmf7NRyrdlz20c9j3Oy/3aQ4KZd96S39vaWESYPwjDuw8iUQnpf0JEfFtEvEfTJSLPT2sONz0J2drCFWGHvOufB5/lYOkDdOObrmU8n65tmLdukdgB8r/Rj1iMXxYRv9MmVjI8L14eZfFCKx6yBWMRi74+OCL+60aPeL5zjxsRn9OcByShucuC5Fy8XUS8RUR87mQDvGREfG2DsHPTHCOKU8zNMe3vzz6wBN40Ip5jg8IGt1HwLxoRrxYR311el0bgTyLi5YsTNirz27DnRsda77tk5MlgfWAzzvb9iF6jK7+oo0/fPyI+pOmIN4uIv9sogCeNiM9ozvmvDDz7nC3N+OYRYZ3NXueKPFN4ojADHxGeDrqfEIXofzUwyGvd8qhtc796mxAe1tQbepWI+LqI+OaIMAkgp7kLtm9iGZWRib3WmHvtUozmTDT5D52bXrEZxl+NiNeOiN+d3EeeYG5kktdrTsmh4zzl3Bzah/25/5cA5+qLm/P0PQOCqY7Wx0fE+07g/BpBWVf219brTt9zW8d76fsFTlAGgdMvDTQuSsX9uHcLRKYRXxrPH2tkyxECUG2WPYJ6gWFHgpSMdqUa6aWLGk9sui9vBJKRDaNzDPl9mqHhXSAG3NTrxRocq38vExE/OtNR8NBXRcQzRcSrtrze3HhyojgMc0b4pspAv0Bqosjvbc7EXF8fvsFvEvE9uMjcU5IWOJibQd4Kx2Xbp5ybmyz7O6Vvr9AiztdtxJGlflsHnCuwrJy4qPNnJg9U43moo3Un77k7Yd6haY4lLjnUOQ76QXQq1dWD4tN4/mIjneGUbL1eoumXOed97l3SA9JyXV10rsjThsGulQv77YFR6sdLtwiM0d0SrQ68/qS3pBeDwLDkCaVhoQDWcgze9awRcQgkcdLBbXyZ/KXo2jwjC81dvHyQLO9SDpiDMHdZMzxO0WvPIVnr3jnmZq3N/fe+BB6q8R3wHuTD1879PklEfGkjF81FnVrKdeLvhxpPz96pe+6mr7fUez8XER850NlEpdyKSDiNOnMNMcjHGM+naIxf8O8IWoHpiyEs8El+xgMN5xzGMxUYZTliDHgewnvGlkd4KBQzME8nuaUaRYltEz4XJYGfGAoeDJr1kudNIXxYRLxGRPz6SXp5mZcYG6axc6s9KKUqO0ZWND531YjirRYi2aWRnWNuLiPJ7a1gLifrFDvQ2P0bogOYFPN77gKjmi+sZ3sPQsLxwXj+lg7hy3uft9H45Zv+IyKevDEikeTk/ucM4+O13yirntOUfUxix0e0PNMrRcRPzQzAPmJgXXLlo8jW9FV36p7LcdDdT9OiO//2t81BpeiRY8zJnF6S+3yiRuKp6TTpDmsCOUskqIiLdAzdDM35rYj4wpaXXCokkM7yuw0YqcdqfAlz0UOctujREd0gNQa6XSMdJXoq8LGfHuRaMp42liS/PJTwFWMO9GaDuRg6TCqhuQWsCAKmZEIiYFf04H/vjMhmQSBhNDExp9f7DHou29XOcU+kByPqWosoE25YIzd4F7mi3x+qDI4b1fanR50kHj6F6EJbn4O4/VZhbop2ae30enuOuem1Ze/I7XAS0espnh+f6be5pcgoH5G3/x572WP2B7SCR56VeqAcX90cmelRDgaQF+14FIY3A+RoUHVe5afeISJEDfXi9FCGHMVsy57FolctrMfc3KJIkTqw1lWigVTMOd5kjojiD4SC8ewhHmsyPtWew9OQmrF+OYDWgvzd1FlAbmJ8vrGtkWNZ5dqif8xXHnVjaBDu9IGTkbwR/06uDCN9Dt3LOeN0KWzCQIJaXVBAFXfMHwcGgebl2m9rjFfwKOLPCJkreSFe3UOl2B39ffHGwu0FK2vznRHsYwzCyemI26+zSOiS8XS2ysXLdN5Gpy0KxtKGEZLnpMhPiEB4uzlYzEs5rLWr5rvy/T3iydy7qie61tbS70uKvT7H26OglBgbNZ6jhgNFetbLWej4pcefXXm4doaX99pTnlXZjcqAIlqTa08c55ibtTXFY2eQeOhyv6K6qhifvRkDnuwpHMIk1FB0nNmaFklvWZRYDVDNJYoqpkfHGADOiv0q4qhHQygb+xKyMJ1nypVigRTMEfwoYKSLkb0ltyR/7mI454gaueb8LsIaTQvNzWE6a4fsubn3ieYco4CcGYfzrCLAvBKe5PgsITBr683vGY2BuauR9JvKOs5JMohyg4/Q0iD0uT5ZI3P7K50JyERGZ1IydD0HizOA+GiN0/U9FqrfGEIFMZZyk5ULwSFDvpwjTNY9/emD8H9PhtaqNTndo3P3p4wFCdO5vOf+Udg2z1ZZsIwor8K5vLkD8bkoMUhN0tpVobalnFjvPZc2HlvOS2Xkqe9L+ZmMmOD9Iw5HlcWlx59tP3qLqEQpvRx1hVy2GE8HuKdKYW0d+f0cczPa7ndExJ82kktlGFbDBakZ2RNLbaYSVs1pSjBLlrv5AI9jcP99RGQuEbzbiwhq5FfzjbmfOcj2fj2SRQFCFvRjzniaQ1GiiHiJdVnP8vH0e/f3nIOROZrec8yeW9NFc2kaDoq8L8flGLhZ27n3GGyGuMrWGtAOXVKNV3U85oxnRX44T6LHCm1m+mUNRbP2HDFaI4hVLsRS0FTTPofYhzpX1iqjvmbYPaP6m30gPTGri0aNZ/VKCB4ka/POVWDISRCtgqvWrirEYxfVWlun+H0qi6XDxtV4LuVyczOANLcaz1OM6ZB3jPS5Jvu3GM8ebLfWz3PMzVqbfq9KfW6eT3U0Ir118GsPsqSkGSPFKjJlkvDYUu4dqUdUCgasxIw8agI2c54XK7pG1gwygzpXHYrS4TCsKauquEfk7R77ZOTYQe99I+t3tC95X64//z/npIA0wapLkdtImzVqw7swZ86b5yX65DRVBK86smvGc87Rr47pEpJA57l3zfnd6vQbC8j5+0YE1LlndD3m44tjGTWemfhXRcZXUaYeaO3rVuOZQjz0DM8Rsjzo0brR1+DFajyXFtw5NvJBg9vw0GifR2WwRa69bm55x2i/RkRSI6epd2yPgRlFf6KwxZJfK41ltMRArhmkfFWFztci+kSYPIssIvWS/XduzyWawVgE6a2VUxxVVjW6MC9g8DlCB0cVzHoKRTq6fkfmP++penLqRJkzxl7JzmmRkC1t5L1ZWMTagwogHJqjXoWvm2Q8q1O9xK6vqOQaXDwiw9H1eFLjmSGsszhrZI4tsG09WrBmiEaEc4l76gZZ63Mq6DVyQ8oM1DZC777EONfaGIFtvaMq5FHC0KG5jXPMzZoc/L60PzIHhRhXP8GFcMPQgt7U63SfyM95396FPq/ajihj1HhWpblmPDNHqf0afSQRBdqUl5rMnAGffeoxF0dh2zSK3t1Dn2ohjcrMzEhb9C/yEzVPz4bOyfMce04fQZAvO0OAgT6ADY0VvO/imPh0FrIlpwT5TI5YhL/2aSzjRgqjjxlQ10+3vDoC0fSzj5c0nmuwbTWKS2gIohKCFfQDFJ1pCnlcVdnUE7fn6c2R2rn0MadmJFee8pIrniUpjUae7gO/YOmhwntZr4jBFsJQkhGwuw49njCi3E55z+hxiKpQ16LqrdH6Kcdz6LtGCEPePXpUJQ0DRXBobuMcczMqn3SUqkNFwYHpRBuVH5Dl58CdWXfT4W3GSb6px0hO6GzNGat9rkpzbR0uFSDA1nV8RB+R5Vz6gQSlqMFcRD1CGKqR8dI5vix+YX1UQhEZ0zmiYdEySHSEgXuOPVdlzVnKFAyYVa5TOiI/kJG5cPJExPHvuS5889K6WDOg3oFZ693Y3nlht/tTDcqljOcIYagyaHsBSM3fTwlFjCdHXMF45E1fTllDQchmFFJ2b8rL32dTc6PGszIGlxL6Gho9quLetRzBiOLaip333jnCCExvMavhjBZJQFF3LKfnHaXSSqhsZNx5z6XHn+2OHlWpUOpokYRDcxuVuX2quRmdC0oDyaJGd7xc6wrzMTd31lZ19KOeZUxHUhlHkYic1fSq/IAtzubokakR48wQICIZk+iZAfX/DpT3+rt05m8kMq752Llyl+nIgcZH84nH7LnemqiOQBoF51/lJF21qHkStLCbGcpcH/YzsuW0pu/SOiQfeXAG235zeSeIO89yXsp4jhxVqTqhOhl1jJXAxkGb1shNx6zHzJ7Ka5U9O3kgkTWO2Oy50BHjyRvyWTHnD9+kHZZeYo6mAnPkYK1IQkJ6a9Hs0sK5hvFIL/gfF9iL9czh2gSD4ET2I3DCVBbXGH813KD8pSIJldywBPnnedBjcxunnptR45nzkMYT1ORMHEerfkYpjaSIqVLm0xlx/KRXIKDC0ks1k+1BylcEY/NTaFlcfcno5hgqlIYQBBVw1q5ejhDQC2DWHlsyx6rtXpGEEeNJUTLOIo45o5JyEbmORiHH7LmlNVERCFCj85XOSPr36jynrEGv9XhaOkjY29Wo1jbBwwqqfMHkHL1PuDEykMEpHHop45mGkVHsVfJZM561YEaPY8N2kO8o0pCQOlRnJDWW+hvxdbawy5rxrLAT6jPqrk5r3GKAq4ML4PVVQdisGl3Ky9TJTKVqoYlcfdvxJl/51RQT11NGCVeaLM5G79ueqTQp26Xo9CbKw0an1MBOPahRv5Pc4KjTHIW9wq3TQ9jWKHm7RGNrlUGOnRtkBmtQRNUr8DE3F2mgRLzSGxiucoLTyksJT9uQ0/NjGb32IvQKZekDyC8/hVf7BMEgc1CmiGakkkvlH1RPn6LjIPm3KXKijKK92qu0le8UofZY6bXduZxsLfTvLCodNIWIRZGMjbO2Iwz/kT1HP0m9WAdbSF4ZEMjL6guSpXWA1JNXTelM0aaENEXTPadUVEQHe+/0vKXzv9aWvVKd8UsZz0Qef3OB+FWdwLnIM5FO8pr7bmuOhc5c+uhG3ROpq6A6I4xd+5lz2Dt/+iDnPFNRCfVtFHkYm503B3+fRooqrNRNmp1Nejv4QdmvuasKkHFxXhD8Y0HMQVY3zXjkZ694u9MJTAUOfuxBWjme9M7lQ7oV/G/a4Ft/Mqr85ZWi9vVLGXOoRRpXUac1lkch6hlJm9JiFsmtkQMOnZvMOYFbOYTmrveZtemU1HwhR8Kh/7lD4ulUzeV6MhpZitB9bF3EwdF0KaYNDpQXImd7Vv+tyUpQyk8+MWQcvukZ7YwGOHnmIJ1h/y7twNBPy+UldLZ0bAQSwIib9+nXdFKGeZTGOqolKuvZyKW5Z5iNl7FwIeEwUNpjkKefsFrbc1XGS3M5ty0rEmRuKOvpB5yrszhNFyVcSNn3zuTmPdi1U/2aRQU4qtUZv5TxJBNrH2mqV1S9wvDTghK5BwVlCvJwBKYOcx4NE11zVLX1hM1RlDu2jqZf8jIvUJ0RWD/RU2c8uwHNNPJUKxO7yQbjOagYxJvLya/sJ5Eo2FLoPF0cmdcxyB70UAkiqOlYTbypQyrmX8O2GCN4TZ/luuQXePnJgqNQQJG8zyXPlXIRxZvYXnR6jfGNtknxUYxrX0LhUSM2cLjA2PdvDVgjPnYryqMEa6Q2LbIwWjT+0LmpBlD31tjUVUb57LRCz1SOqVwTvambfMmw1vcwWhRn5rfqb5w5e1apwHqRSX68nWGhmERr0CN7D8EELDqdg2pUPZNFEvJrGOaPMVY0Ze5KlqxygD1HukaX6VxRsJlbFV1jYM8RaDLSYZAYUBEeQ4+RLCqeI5Ks7blpKmTp+ExvfunH6oTU+9L4gcSnBSGWDGu+I5/HOK17KZ0NTrs5qcztHls531l1+xyaVitALX0lyvvkKzl4dP9cfWL3ZHSpJm8ilAk7cxzYFazhOaQpUZ5cK5wdKUXfUJ6r6ZxOPnmMfExb8MdhtOa6H8SeGk9WHyxiE4PjhNRJqzZgykxkyHrLU/q7vMrcJXlP+YgU5qjjMGUsPTCDM2OMTe9do4r8Gvc5akAeJtyGpYg4EwwCz3cJZkwPjCE5xdmva4zfpoQwiGQWv7weEcYrKqCclC6jDC1UUbejD1PlaH2CTShPStq15UsaW+cm17/+udaOdlR5cwY5S8gxS/Vrl4xnKoURo21/iWp43QycIyOYh9CLpbqpnBjrVVQDIXEvg8MBlF+aGhsKXkSngpBauoqNc3QoLF6+fOfax4lFwiJiRr33qTn9YvQw70UU5k7lnKUi9+Sfxh107KwjxW7fgc/n9t7InvNO+5eRdY3MR64FhgCSAmLuzcOS8axnhnskRnsOCYmjaU44QOYHC5rMsFAf0DrkfeB1RtpeyktUTMdDezhVoHkQs0sAI8ftj1MVDCfHJJ01R2Icp/H8XClV+1b/RIPT77Fm++6h+8lJH5Xms8fB3fRID13KqBCkbV3SI/aNvvbWIccA6YejUStk9fSlgMCa7RH37nluLed5jDJOyI2AKtvwmHfetmdFEBZtFtW/U8cHErTBKL9Dv8O5NnY5IHAmZbqUX117z+jvWQNzqYLU6LvqfcfCtoe0ee1neP7gNaTDNQdra19TniIPkZg2EtWYe9fWPcfRYMh7hRu29tf9x8K2h7R56WeSaPpxg+duR/uXsuMYcdhB8FCN3rEeAR9UkKM3xwiftosfcN+WIlrUM+c0njql4zYNL3Ck46MCvA33nWtxXUM2CBhILq5Kjz9lX0Q6HA2e7Llz4kmUg5gkS/VUY8njWSKlrYShU/XhGu9RAACJEKv8FF+WSec/j435f8iVVMr0qzA53q17jtEXzYIgl2rzbpVnrbBzCGFoa3vXul8qA9RvnR/7FZkcw7SUI30jevUBk+m1NYBL2NvxolV499zG02DkTxGOwDtLHuG1Jvga7XIqsErlx0BlawzSa/Rxa5vnHBOlx/OXUqgkmK19HLk/Nxz43cbcwrQceX/vqEqeEeSEHPox8JH2r3kPxwEkJve95ctJvT7XKIQzIuclapj7UMHW9UmRmoveBzCOlWPvqEoSfgQcp0Y9ju3z1uetaTD8vdu8jBQyWGsjkQYQLMdDuqT3IYEt621zXy9hPNOASgAjDMx+lXtNYrfod5sYTCuRDkq4DYYzpyfHxkuXLzzF2OT2RJzy47X49TmWhCo6qPFySJCSU2z2OW9YPohDWc9zJqHD/Wvkq3OM/VLvlKOTl+QI1eMbh7SfZyJFhjgDcpO4FBi78p4cFTmurXsOococYW1ax9NSd4f0dfpMfumGPqykymQer5FyTtGHS7wjiWrminOzVjVpqU95xOg+jWSEfIgvI5/pD8IRApI2GE6GFmy85qhlH6FbSEJD+/5SxpNAJOqRQyS5T6FULzHx52jDhiaLkcT1Odo/9zsZIIoB6+3UUdu5+36p9ycdH0kC6Q7jFkNSRJal2i7Vl2u0gzBjnRwL5U2r8eTn2kSf92ucDoxb7d20PZcIB8gRCY7DCaXjAKgyxaCuHcm6xtwd2ibDxqitkcuW3j+twsWYkpcatxxsDF5kKW0gutFBI4bQ2qCzpBOGHaVLGs9Dhb4/t0vgNkqAMoHGMKTY2ZiGYGJQ/t3sXI7OdeYNffgbk1ekKcIkU/WB5awc5zkm0hnty6H3cSCwpZGdsjC8+cdeX4uWDm3zTn4u+QJ4NBwkTickw1xzOJwnXvqwwknHvhvPk4pzf9kugV0CuwR2CdwNEtiN590wy/sYdwnsEtglsEvgpBLYjedJxbm/bJfALoFdArsE7gYJ7MbzbpjlfYy7BHYJ7BLYJXBSCezG86Ti3F+2S2CXwC6BXQJ3gwR243k3zPI+xl0CuwR2CewSOKkE/heH7m2S0X33RAAAAABJRU5ErkJggg==\" width=\"231.5\" height=\"20\" style=\"width: 231.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e. Plotting \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAABwElEQVRYR+3VS6hNcRTH8c9VKDKSiTKRiYzlGUaSYsRAMbkD14SSooiUt4nEwMDUoxhI6d6ukRtKMWBmrESUwkheLa20O23249zTGdy964zO/7++a/1+a63/iCF8I0Ng6qADVb2Tt5N3WhToGmlaZPxXkJkt7ywswVZsxzrcx3584s8jsQbnsQL7cKeJH2XyzsVSvMV63MICbMZDbMRBfMMWHMXVfqHF+4txA5sy+D0cwjG8bwIqnq1qpDkpY1T2IKs7iVdtgXGvChpnxnAtIXtxHb8GDV2NSXzFNryoAC7KRCOxM2Vn61QaTXUbK7E7PS6LNR978kx0/AmcagONTo5so3niO4fj+FESbHbKvgqP20JDhV1Yiw+IBprIaj7+R+KosjV0OY7kbxnG8Q47snvDu1gOU/hZSKIRNMYjfPmChbiMK3iC4ryGrzGv4ddNPO+pujY0gBHkMF5n5qdzG0UXhrcXcQAv8Sb/i23VOz61oeHfzgz8Of2Laoqyxb69hHk4i7v4XuJtbWg/s957t4P+VaTORmoq/VDk3YBHbTdS0wrjoY8qR3MSnuECnva+vYOQtzLZDlopUT8HZo68vwGa/l8pXtmErgAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e vs. \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACPklEQVRYR+3VS6hOYRQG4OfIJSTlklImIsmY3IoMJOUyIAmlFCYIhQ5K7ilJJMVEuRUDkYgZmYhESsZyi1IuyV3r9P3atv8//22fzsC/p9+31vu973rftdt0w9fWDZhaoF2qekvelryFKNAyUiEyVmryf8vbAyMwG3MxBZexBu/o+ElMwn6Mw2pcqGce5eTtg5F4gak4hwGYiZuYhvX4illox9FmQbP1w3EG01PzS9iIrXhdD1D2bjUj9U4yBrOrid0OPGoUMOqqgcadVTieQFbiJH51NehE3MBHzMH9CoCDEI+alwx2ByeSCb/XI2/cDVOdx3gsTTPO4w7FMbxKY5iAdeiV3B1m/KNONXnDyXuSeQJoH7bjRw51BYbgIEqsZuA0HmIZ3pZqOgONs8WYjDcIA13PN0BfbE5SPs88ZmCa/2gswtNaQMemZtFwFK4l+RYk94aksRxuIxT5nDNYPOYQxmBJyn0HbpZpxKM/PmAwDuMIwhDZvMZcI6+7cBb3KhirxDSWzCZ8yTMNwGgShyHDT+xO2ygMEEwOYG2a0bN09pdBcuChwilswK1y7g3GC1Pj92l+wSbAS1/s25CrH/biYsY0ebI9sQXfcub6R95m8p6vjf0ceQ2nf8ofVotMIw8JA3a6n4sGHZZyHXl9UunFRYJGhLalvD7OAMZ8l+NK6c9UFGhELdwdUXuQYxgZj9jsLG2yIkAjThG1aFrue4n5uFvLRmrERDXVFMG0JqByy6HuwmYKWkybUa9q7W9V624prHV7AQAAAABJRU5ErkJggg==\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e will result in the x-y trajectory of the projectile, as shown in the figure below.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.8333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.9167px; text-align: left; transform-origin: 383.5px 10.9167px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etip 2: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eUse the following update law, to incrementally update the shooting angle \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAoCAYAAADpE0oSAAAC8klEQVRYR+3WTagWdRQG8J8UWUS1Ma021UItSUOMPoTIRUptlESpLDUoFQr60EpRzEySKKiUNMSPiErpQyylTVnaIjFaZFBUm9CFSpJkiJqIGAfOXF7mzvveudzh3s2d3cz8/+c5H895zhligJ4hA4RrELjfMj+Y6p5SfTHG4U5cgV+wF6d6ulj+XzfVce4uvI3v8AZuwRYcwAL81RvwOsBx5gG8iS/xYkYYEa/DbDyLtbhQF7wO8D14H38myOEW48vxCj7DE/i3KeCR+ABjEvSLkuECeB9m4VATwJfjdTyJT7OO/7QB/hkP4o8mgKdltGEr6liO9hK8hufQGPBwbMRU7MDjKEd7Gd7KTERLPYIjfY14OrankYUJULZ5Nbbi3mR7ZKXsXFs/qlgdtX0Hj+E3zMSvFRZuwicYi/VYhP/6EnEoU7RHweincLLCYJShqHu7rPQq4qjVh3U9T6dCYL7pxZ1ui0ArUyPK+/F9hcGrsAkzsBtzcLQvwK0GOzH1dnyOa7O2we6Qy2D6lbgZo7MjjlU5VCZXK1M3ZI+eKV28CCsQqlUmXwCHym3G7wh+HK8DHF5+jFvxElZVXLoR23AHlqa6nW85V7A9MrISrf+6jpUj7gk4oo3ptBp7KoZGGJ6MrxBaEOJT+ZSBr8NHmNQm4tuy1cLY3JzNrYbD3rIkXUftLgMPzdQ9nax9BqfT8ghE3e/O2kVJyvO3IGfcid6OTSWIFs9+/IBz8VKlXEVUJ1omzjXpUIhLKNS3bYZ+IT7v5fkg6wuI91C/LkergOPbeCzJvSouXJ/1CqXqtF+F+Lybqf4JD2dpug2POhtIXV0oxGdidkOkOCZc5VbSJPCwnN/3paexPMzrD+AJ2IU1CCeexxR8XUdA6qa16lysuKFoD+V4DAGJrTQ649IUkq60N5XqYhsZlaLyN17FfDyKG7ATBwuPmwIO1sc28iMW42x2QgyPSPvLqXQd26kv6a59t6mIawM2nepB4B4zMGA1/h/Q3qEpP5IZBgAAAABJRU5ErkJggg==\" width=\"15\" height=\"20\" style=\"width: 15px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21.8333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.9167px; text-align: left; transform-origin: 383.5px 10.9167px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"153.5\" height=\"20\" style=\"width: 153.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 43.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 21.8333px; text-align: left; transform-origin: 383.5px 21.8333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ewhere \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAoCAYAAAB6tz31AAAE/klEQVRoQ+2Zach1UxiGrw+RKWPGxA+RiIwJITJEROYx8zzPZeaHIUOmzGQeMiSilFCEkOmHEJkzRIaQWVc963u3be9z1t7v3vq+9927TqfOWetZa93rfu5n2DMYnl4RmNGr9cE4A8A9k2AAeAC4ZwR6Nj8weAC4ZwR6Nj8weAC4ZwRgMeAuYKuMlV4DPgKeBZ4A3gX+HjVvYPAEwA8CDwHrAhcDBwIfFMCbA1gJOAnYIH6/NcZ+WwfyAPAEwHcEkzcErgF2A94pATcvcDnweTD4KuBl4BTglyqQB4DbAfwZcD6wGXBLsP2p2RFgCbA8sCuwJbAesOAYrbweOL6OURVzkwY3YXAC2L3I9reBC2Y3gBcN1zsiA9Ti2f5PgF33TGDZukudVSViSUB92wUwgFwB3Al8CPyVEe2bDJkMgzsDeIlwU130C2Br4HngLODrJqfJGGsgMYofBbwEHAm8mjGv7ZDJADxfXL7ZRiuJmB84BDg5XEEW/QacHZ8TIqq2PVzVvM2BhyNF2iP0rUv7ZVuTAXj18Cw1v3GQS24qWw8D7omkep5g2DHxu5rX1TM3cGHo2XHAleMS+Q4WbgvwDYBnN+CZpv3UJMgVNfDqUp63CXBbSMU+wHsdHDKZWCZy0UVq8tAOl5ppqgrgaysKDScsFATwWzJ8Apw4SiargtxcMUkmmX7sDrwZ21kNuAlYONhryTiyVGyIyMrAfcAaDed1nUU8V7P+j5H+WYAYfxz3x6i9VgG8DvBA5J+6qPRXFnYGTguj50VEL9peIID3EmSiQFW6zYgNzSoAp0rOXoNx4BxgT+AVYJUoLsxykmzWHqkM8JwRvMztfK4DjOq60ePAY8CnNawV4I1i8fuBU4FfGzIxSYTu54FsrPT9jNNgPfpcYFXgUOCrAugHR+MnG2C1z4pmW+Bp4HDg/XFuULC+cSx4EHBzC2RSZaS27xTNlxZmGk0ZB7DGjEkGtBeAS8O62rsdsHeFN8/cQJnBKwL3AmuHwSYlp0a9YRfeF3ix0TEnBtvFUudvB44GfmhpJ3daDsDaMrjfGCnrI4BkFHTrgOwswrr/7mjHechjgZ9LO/VS1gS+Kblw6jQtDeg6ulKbZ4XILe1qyWR7tV0G0vKecgH23HqmBNg/EgD12JalebvM/k/AKzPYwsK0bL+KDMKN+b+yYe19RimIpct5BrgoZGa50GGzjbeAPzMQd08GFvX/92CxXtV1iZy2kgtwOr9Vpk9ibZnZ/zpiVRaR8lwBMx3RDezke1vqjQyX3eUAtgXwZIyRdY4/IHoKH2cAWxxSTBX9Xbm4JC59ZFrUcB2HJ4CLDXdT1Kp+sOMTa820ZK97VUo3LTC7VoP9I0mAnXtfo9jVEmC7/R60CiznnB6R37xZWRFwL+P7Fod2ihvfC7gs9pBrpm03rfjK6I0xhY6tUwEut07VZuPQl2mzXXXTrGxktVppbrh46Ghllz8XqRhno2kHYEdAXe66H9xwO82GdwVwuUCQdRYlaui0froCeHtA9zDKquHrR+WXSuxpC3IXAFv9+X5qm9AtKx4DhtWPn6WA7xq8wplSl9EFwOqt1Z95r4WBgBto7En4usfehi8Ga19tTylES4fpAmCrvkcj9zWHNtddK3q5gm5j6PWpDOKos3UB8HTFLuvcA8BZMLUfNADcHrusmQPAWTC1HzQA3B67rJkDwFkwtR/0D/qlRTiN/knXAAAAAElFTkSuQmCC\" width=\"44\" height=\"20\" style=\"width: 44px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e the smallest Euclidean distance between the trajectory of the projectile and the target \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAoCAYAAAACJPERAAACMUlEQVRYR+3VS6hOYRQG4OdErhEiEwOSMMBMBkopRi6RXEsZMJNbKUnHJZJcykCSkkvIxG3gUhQTlBEDGQjFgKGSktDS+k/b6eyzf/v8OpP/G+79fev91vu+6/069MPq6AdMbdD/ynqb3ja9LWGgbaSW0FhWpE3vdBzCsF54voSLdXQoo3cdomjZOoWd+Noq0EHZ5UtcwfdC4WBgB3bjUx3AONNTp+OwHtHNt0Lh8TiIY3hVF7AMtKd6w3EAN/GoL4DNgg7EdnxIun81ARoMjsQkzEjtb+BnM6BxeA0m4Dh+NAHYqDsqtV+L1XjcOFsVDvOwFHtqOHVASjIXARxM/Vm9gfbVqWNzjt9jW9GUZaCtcOpshI6dOIsuL/QEWtepcW4xpmJw+mBOjt/Tohe6g4ZTY/gP4xnO40ITek7BUdzKJAvXXsNbbMTnMtCGU09jRGFTMfKimxifoCpCIsIjtD+HOziS36Yl6O2k9y/XFzsdjXDaQ4Smm/KWY7AVJzEZV/NCMQYfE2gWNuBN/luA+1iO693HrGpkJmIfYnQi4O/hRObu3rxkFI0OQ5LoKEYlzLMEq/D6X0EbYxXhsBDBxnM8yYcggj8uswwPsnjoGQ9FgG3GlzqgZSE0NLuejxV4ka6NRyHMGJLE8xj7uoKhKhyqEq+ROLsSNKjfgplYmfEZXV9GBETXqtK0CjhGJTJ5UdIbug7BGdzFfrxrJb1VFyr939dOawG3QWvR1uyhfqH3N7pTaimzbBiRAAAAAElFTkSuQmCC\" width=\"14.5\" height=\"20\" style=\"width: 14.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"298\" height=\"20\" style=\"width: 298px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eis a difference angle, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAAAjCAYAAACaX1R3AAAFTUlEQVRoQ+2ad8h+YxjHPz9kJJtkl8ysPwgZIUXKHtmjzJBZsmdGysiWvUdGZhGyifyhpJSsbCHZo+hT152745zznPO+53mf9+Tc9fzznPvcz3Vf32t9r+uZw7B6q4E5vZV8EJwBvB4bwQDeAF6PNdBj0QfPG8DrsQZ6LPrgef8T8AR6J+Bc4GvgCOD9nt19LmBzYH/gO2ABYFHgIeBJ4Pdp3Gcp4ABgbeATYE3gPeAm4KOG5yrfJsBhwPnxfuWrbTxvA+Bu4DdgHeCM+IG/Gwo26W2LA+cB6wNHAW+FQKsB1wGfAicC37QUVB1uC1wO3ANcDPwKzAMcCZwQn4eBKl0l0Ny7C/A2sGdX4M0bF38ReBo4G1ghlPBjy8tOYrseplKPDqu+saDIbYAHgDuAk4CfWwi5KXAX8EF49GfZuwsDVwJbAAcCL5ScuxawH+B7OwDK0il4KwEHARdFaNkxrGpf4NsWF53UVsO9wLwL7A18WBBksQhvWr2KFIwmy/euB/YIr72sxLt2BR4EHgUOjZSTn61j/BFfGHZv6xq84kW0NsNmH8BbELgqjE9FHx9hLb+Toe+0iC6Gt4OB7xugtzXgftd2wCsl76wO3AesB+wW+bXqaPV55wDev+pZN0LiqpF79I6yZTR5BDANVAGRvzd3gH0K8CqwD/BxycGLAIbp3cNLy4wnvTZj4BlGjwV+aWChk9ySQFGGvcILyuQxmrwcD6yk9dK6lYPyROS7Mm8132owhwPPR7T6vOLgsYNnFXUysHxFCJokUGW/rWdcEA82qwhtPs7Dm8r2jikXlZ27CnBvVK9V4Ti9Z4qRYn0RRUmqdIvnjh28vDKztJY6NF1LRDFgaT2dNUpZ6Wxz2Vnx8bum4DU5fw3g/qBNo/Yn8EbJMFbwJJ63ABsBZ0bMbwPCTIOXh6xRiss976kGxVgeZtuAV1fNjg08qza5ksTTNRXw2gDdxV7LcOmNRUIb8OR8hwA/1Agh2X8MWKZBIZJ7nrRF2lC2xgKelZXsX/CejVBpN6EpH+oCiKme0TRk5Z43ypOUpc3+pjKMBTw7BJJHLdm+2/bASz0BzyrP9lcbz7smSHddPl827r9lC8+ThlgzvD5TnrdcdCe2CmKuIq6N76rcf6peMo73mlKFjaP1t9AIPphkbEoV5gcuiXRTxwc9t1PPy/OcXMY88GdYnE3eso5CHQAzXbAUw5uhvwlJt01meqhbeVemKUm/NfqrVb3TzsBTOPuAetpP0fN7DnD04XTB5nQCT+tynDJqwjAJ8PL2WB1/S3zwmRjtyMlGrdQeUz82lcv4W84HNX5HRFWrM/BSt9ymtAnXqu2vLFEfAzhl2DA+9g9n60rcVOWqoGKHIw+BxwFXFAzR6cDKMaJx3JNWmhrYUK7qyqSwraFLE+pme52At3QkYcvaFC6/DIlTlXU7cEOAenOF1c0WMPORUBnPSuDqdRY4+UxP4zXcWZh4X2lHHvaSkTvGKU4NEriGYQs9OzJ1a9rg2f46Bzg12jle1nCZVqqy5Dle0gm0M7DcImcLaLkchnujh/Mzw9c78VBwro5WmMAUm8t5IaPn2h/N/0FgetkZuDAq8ksjhahHZ3jWBoZkaZWRq2q53+m5ujRke+YbdYosTtLzPGfVlYfLdI57nPLK+fRKyXrb6fOkwJ0PsGrWwm2oa3CSbEn54xUGaM5Uqf514vTwvjIQVoxc6RTDway936/CMJwfVtUDS8aoSPrlJ603Q67XAsT//EWjzd8gJqXw4XcrNDCA12PTGMAbwOuxBnos+uB5A3g91kCPRR88r8fg/QP5CXUzNiH7HQAAAABJRU5ErkJggg==\" width=\"55.5\" height=\"17.5\" style=\"width: 55.5px; height: 17.5px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ean update parameter.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 20.6667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 383.5px 10.3333px; text-align: left; transform-origin: 383.5px 10.3333px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample of algorithm's numerical result:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 80px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 403.5px 40px; transform-origin: 403.5px 40px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etheta = catapult(25,3,25)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003etheta = \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    0.8431\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 403.5px 10px; transform-origin: 403.5px 10px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 264.333px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 383.5px 132.167px; text-align: left; transform-origin: 383.5px 132.167px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"570\" height=\"259\" style=\"vertical-align: baseline;width: 570px;height: 259px\" src=\"data:image/png;base64,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WFJSEhUVJZfLPT09f/rpp9jYWJVKVVZWFhkZ+cgjj7i6ur7xxht/+tOfOpxWVSaT/c///M+LL77o6+u7Y8eOvXv3Dhw4kM9/LgCLE3g1YwCrsXbtWqMl6m/fvj127NiLFy+2tbW9/vrrdNXzS5cu+fn5tbS00H24F9wOlFar5V6/8847H374IX0dHh6+dOlSnU7X1tbGMMyECRP0ej396Nlnn921axf3rbq6ura2tgULFnz66ad0y8WLF/39/el3O7R3796xY8e+++67vfoHALBqqF0BdMrZ2ZkQ0tjYaLjxscce0+l0hw4dmjt37vDhwzvrW+Hs7HzhwoW7d++2tbUpFIpbt25xH61cuZLOHzpjxoyWlpbGxkYnJ6fCwkKWZVevXs3t5uTkdOPGjevXr/v7++fm5tKNer0+JydnxowZHZ60urqaEGLYQwRAMhBXAJ2iy9aNHj3acOPw4cM///zzv/zlL7t37x46dOibb765cOHC9t+NiIh4+PDh/PnznZ2d7e3tuU4QhBAu4Qwnw753756dnZ1RC97t27ft7OwOHjzIbZkxY8agQYM6LG12dvbXX3+9f//+3//+988+++yYMWN6fMEAVgxxBdCpEydOeHl5ta+sTJ8+ffr06a2trWlpae+88868efOMVlu4ceNGTk7OP//5T5pMVVVVt2/fNn0uT09PnU5XXV3t6urKbfTw8NDr9du3b+8sojj19fWbNm165513Zs+eHRkZuX79+uPHj4t6hQsAI/hpBjCm1+sLCwtjY2NTU1Pj4uKMPr17925FRQUhRCaTGfYVlMvlJSUl9LVCoWhra6MNgFVVVYcOHerypEqlctKkSTt27KD1sObm5qqqqt/97nePP/74tm3buMpZfn5+h1/fuXPnyJEjX3nlFULIunXr9Ho97SUIIBmoXQH8W2pqampqqr29/aOPPvrUU0+lpaV5e3sb7XPv3r3Q0NBHH3300Ucf/fnnnzdv3kyrVqtWrXr//fc/++yzGTNmJCQkhIaGLly40M/P786dO88//zxtVzQtISFh3bp1AQEBSqWyuLj4yy+/dHNz++STT9avX+/v7z927Njr1697enqmpaUZfZE2A548eZK+lclku3btWrx4cXBwcPvyA4gUlmcE6I3q6ura2tpRo0aZaHBrbm4uLy/nZproppqampqaGqMjNzc337hxw9vb2wrXeAXgB+IKAABEAM+uAABABBBXAAAgAv8PggpY/n7NrQUAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function theta = catapult(xd,yd,v0) \r\n  \r\n    global g nu;\r\n    \r\n    g   = -9.81;  % grav. acceleration\r\n    nu  = 0.5;    % air friction coeff.\r\n    k   = 0;      % solver increments\r\n    dt  = 1e-2;   % timesteps\r\n    T   = 10;     % simulation time\r\n    TOL = 1e-2;   % absolute tolerance\r\n    \r\n    [~,y] = ode45(@ODECatapult,0:dt:T,[v0,0,0]); \r\n    \r\n    % solver for optimal angle\r\n    while (e \u003e= TOL) \u0026\u0026 (k \u003e 150)        \r\n        \r\n        %theta = theta + beta;\r\n        \r\n        k = k+1;    % add increment\r\n    end\r\n  \r\n    function dx = ODECatapult(t,x)\r\n        global g nu;\r\n        %% fill in ordinary differential equation %%\r\n    end\r\n    \r\n    function e = EuclideanDistance(y,xd,yd)\r\n        %% fill in computation of smallest euclidean distance %%\r\n    end\r\n    \r\n    function beta = UpdateLaw(y,e,lambda)\r\n        %% fill in update law to update the shooting angle %%\r\n    end\r\nend","test_suite":"xd = 8;\r\nyd = 2;\r\nv0 = 35;\r\ny_correct = 1.446;\r\n\r\nassert(isequal(round(catapult(xd,yd,v0),3),y_correct))\r\n\r\n%%\r\nxd = 15;\r\nyd = 5;\r\nv0 = 35;\r\ny_correct = 1.33;\r\n\r\nassert(isequal(round(catapult(xd,yd,v0),2),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":636373,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-10-19T12:41:43.000Z","updated_at":"2025-01-02T11:31:42.000Z","published_at":"2020-10-19T13:39:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider a capapult that fires a projects into the air with an initial velocity\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_0 \\\\in \\\\mathbb{R}_{\\\\ge 0}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. The free-flying projectile is subjected to air friction and a gravitional force. Given a desired target \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$z_d = [x_d, y_d] \\\\in \\\\mathbb{R}^2$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and an initial velocity \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_0 \\\\in \\\\mathbb{R}_{\\\\ge 0}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, find the optimal shooting angle \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta^*\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eof the catapult that minimizes the distance between the target and the trajectory of the fired projectile. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etip 1:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Consider the states \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the x- and y-position of the projectile, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the x- and y-velocity. Then, the trajectory of the projectile can be found by solving the following ordinary differential equation (ODE):\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x_1} = x_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_2 = x_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_3 = -\\\\nu x_3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\dot{x}_4 = -g - \\\\nu x_4\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003ewhere \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003eg = 9.81\\\\; (\\\\text{m/s}^2)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\nu = 0.5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eis the friction coefficient between the air and the projectile. Use the ode45.m function to compute the trajectory of the projectile with initial conditions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex(t = 0) = (0,0,v_0 \\\\cos(\\\\theta_k), v_0 \\\\sin(\\\\theta_k))\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. Plotting \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e vs. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ex_2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e will result in the x-y trajectory of the projectile, as shown in the figure below.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etip 2: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eUse the following update law, to incrementally update the shooting angle \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_k\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003e        \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_{k+1} = \\\\theta_k + \\\\lambda \\\\, \\\\text{sign}(\\\\theta_{e,k})\\\\,e_k\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\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\u003ewhere \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ee_k \\\\in \\\\mathbb{R}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e the smallest Euclidean distance between the trajectory of the projectile and the target \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ez_d\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\theta_{e,k} = \\\\text{atan2}(d_y,d_x) - \\\\text{atan2}(v_0\\\\sin(\\\\theta_k),v_0\\\\cos(\\\\theta_k))\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003eis a difference angle, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$\\\\lambda = 0.01$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003ean update parameter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\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\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample of algorithm's numerical result:\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[theta = catapult(25,3,25)\\ntheta = \\n    0.8431\\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\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=\\\"259\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"570\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\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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WFJSEhUVJZfLPT09f/rpp9jYWJVKVVZWFhkZ+cgjj7i6ur7xxht/+tOfOpxWVSaT/c///M+LL77o6+u7Y8eOvXv3Dhw4kM9/LgCLE3g1YwCrsXbtWqMl6m/fvj127NiLFy+2tbW9/vrrdNXzS5cu+fn5tbS00H24F9wOlFar5V6/8847H374IX0dHh6+dOlSnU7X1tbGMMyECRP0ej396Nlnn921axf3rbq6ura2tgULFnz66ad0y8WLF/39/el3O7R3796xY8e+++67vfoHALBqqF0BdMrZ2ZkQ0tjYaLjxscce0+l0hw4dmjt37vDhwzvrW+Hs7HzhwoW7d++2tbUpFIpbt25xH61cuZLOHzpjxoyWlpbGxkYnJ6fCwkKWZVevXs3t5uTkdOPGjevXr/v7++fm5tKNer0+JydnxowZHZ60urqaEGLYQwRAMhBXAJ2iy9aNHj3acOPw4cM///zzv/zlL7t37x46dOibb765cOHC9t+NiIh4+PDh/PnznZ2d7e3tuU4QhBAu4Qwnw753756dnZ1RC97t27ft7OwOHjzIbZkxY8agQYM6LG12dvbXX3+9f//+3//+988+++yYMWN6fMEAVgxxBdCpEydOeHl5ta+sTJ8+ffr06a2trWlpae+88868efOMVlu4ceNGTk7OP//5T5pMVVVVt2/fNn0uT09PnU5XXV3t6urKbfTw8NDr9du3b+8sojj19fWbNm165513Zs+eHRkZuX79+uPHj4t6hQsAI/hpBjCm1+sLCwtjY2NTU1Pj4uKMPr17925FRQUhRCaTGfYVlMvlJSUl9LVCoWhra6MNgFVVVYcOHerypEqlctKkSTt27KD1sObm5qqqqt/97nePP/74tm3buMpZfn5+h1/fuXPnyJEjX3nlFULIunXr9Ho97SUIIBmoXQH8W2pqampqqr29/aOPPvrUU0+lpaV5e3sb7XPv3r3Q0NBHH3300Ucf/fnnnzdv3kyrVqtWrXr//fc/++yzGTNmJCQkhIaGLly40M/P786dO88//zxtVzQtISFh3bp1AQEBSqWyuLj4yy+/dHNz++STT9avX+/v7z927Njr1697enqmpaUZfZE2A548eZK+lclku3btWrx4cXBwcPvyA4gUlmcE6I3q6ura2tpRo0aZaHBrbm4uLy/nZproppqampqaGqMjNzc337hxw9vb2wrXeAXgB+IKAABEAM+uAABABBBXAAAgAv8PggpY/n7NrQUAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44239,"title":"Mastermind IV: Optimal Solver - max of 5 guesses","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: The optimal minimal guess solution requires only 5 guesses. The \u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\r\n\r\nMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: The optimal minimal guess solution requires only 5 guesses. The \u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/p\u003e\u003cp\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n% mguessn 1x4\r\n% mguess kx4\r\n% mpegs kx2  Location\u0026Color, Colors_Not_in location\r\n\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==5 % length of 5 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 5\r\n fprintf('\\n Solution exceeded 5 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":5,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T20:04:24.000Z","updated_at":"2025-12-12T15:50:04.000Z","published_at":"2017-06-18T20:39:39.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The optimal minimal guess solution requires only 5 guesses. 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=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":2291,"title":"GJam 2014 Qualifier: Deceitful War (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2974486/dashboard#s=p3 GJam 2014 Qualifier Deceitful War\u003e.\r\n\r\nMy condensed summary of the problem statement.\r\n\r\nGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\r\n\r\nUnsurprisingly when A truthfully states masses player B consistently wins.\r\n\r\nPlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\r\n\r\nPart one is determine the best possible score for A when playing deceitfully.\r\n\r\nPart two is determine the best possible score if player A did not look and is honest.\r\n\r\n*Examples:*\r\n\r\n  A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n  \r\n  A 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n  B 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n  Deceitful A Wins 8\r\n  Optimal Honest A Wins 4\r\n\r\n*Input:* A,B vectors of length N (Small has N\u003c=10, Large(future challenge N\u003c=1000)\r\n\r\n*Output:* Deceitful Wins, Optimal Honest Wins\r\n\r\n\r\n\r\n\r\n\r\n*Note:*\r\n\r\nIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003chttp://www.go-hero.net/jam/14/solutions/0/4/MATLAB GJam Deceitful Solutions\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\"\u003eGJam 2014 Qualifier Deceitful War\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eMy condensed summary of the problem statement.\u003c/p\u003e\u003cp\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/p\u003e\u003cp\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/p\u003e\u003cp\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/p\u003e\u003cp\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/p\u003e\u003cp\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\nDeceitful A Wins 8\r\nOptimal Honest A Wins 4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Deceitful Wins, Optimal Honest Wins\u003c/p\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003ca href = \"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\"\u003eGJam Deceitful Solutions\u003c/a\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/p\u003e","function_template":"function W = War(m)\r\n% W=[Deceitful Wins, Optimal Honest Wins]\r\n  W=[0 0];\r\nend","test_suite":"%%\r\nm=[0.270000 0.550000 0.910000 0.330000 0.520000 0.300000 ;0.850000 0.450000 0.060000 0.240000 0.120000 0.880000 ];\r\nWexp=[5 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.164000 0.255000 0.009000 0.445000 0.209000 0.100000 0.391000 0.536000 0.027000 0.118000 ;0.673000 0.782000 0.582000 0.882000 0.591000 0.855000 0.745000 0.955000 0.991000 0.600000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 0.480000 0.760000 0.680000 0.160000 0.640000 0.360000 ;0.200000 0.440000 0.960000 0.280000 0.880000 0.520000 0.120000 ];\r\nWexp=[5 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.170000 0.100000 0.120000 0.200000 0.540000 0.150000 ;0.490000 0.070000 0.240000 0.680000 0.610000 0.340000 ];\r\nWexp=[2 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.780000 0.770000 0.900000 0.810000 0.880000 0.840000 0.600000 0.730000 0.930000 0.990000 ;0.270000 0.150000 0.260000 0.510000 0.570000 0.310000 0.170000 0.140000 0.400000 0.040000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.320000 0.820000 0.350000 0.770000 0.020000 0.550000 0.040000 0.990000 0.610000 0.190000 ;0.730000 0.530000 0.750000 0.800000 0.670000 0.870000 0.330000 0.250000 0.080000 0.680000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.100000 0.380000 0.050000 0.210000 0.130000 0.440000 0.180000 ;0.560000 0.920000 0.540000 0.900000 0.670000 0.790000 0.820000 0.970000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.420000 ;0.080000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.690000 0.310000 0.540000 0.230000 0.710000 0.030000 0.490000 0.600000 0.510000 0.860000 ;0.830000 0.340000 0.370000 0.740000 0.430000 0.200000 0.090000 0.170000 0.910000 0.400000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 0.920000 0.710000 0.130000 0.230000 0.620000 0.140000 0.260000 0.360000 0.310000 ;0.440000 0.010000 0.640000 0.350000 0.820000 0.550000 0.780000 0.790000 0.060000 0.570000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.504000 0.218000 0.479000 0.101000 0.050000 0.445000 0.471000 0.084000 0.034000 0.008000 ;0.992000 0.546000 0.647000 0.849000 0.891000 0.739000 0.765000 0.555000 0.613000 0.748000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.570000 0.470000 0.640000 0.550000 0.060000 0.430000 0.040000 0.280000 0.130000 0.510000 ;0.700000 0.740000 0.770000 0.810000 0.870000 0.790000 0.940000 0.910000 0.850000 0.660000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.020000 0.510000 0.120000 0.220000 0.250000 0.100000 0.490000 0.530000 0.350000 ;0.800000 0.960000 0.760000 0.820000 0.710000 0.570000 0.940000 0.690000 0.900000 0.550000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.030000 0.360000 0.410000 0.330000 0.430000 0.540000 0.300000 0.280000 0.100000 ;0.770000 0.910000 0.700000 0.550000 0.590000 0.780000 0.650000 0.860000 0.750000 0.990000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.920000 0.370000 0.900000 0.200000 0.150000 0.020000 0.530000 0.860000 0.250000 0.190000 ;0.170000 0.980000 0.140000 0.680000 0.830000 0.470000 0.950000 0.340000 0.880000 0.540000 ];\r\nWexp=[7 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.020000 0.490000 0.280000 0.080000 0.830000 0.170000 0.140000 0.850000 ;0.420000 0.650000 0.950000 0.890000 0.030000 0.580000 0.380000 0.060000 0.370000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.670000 0.050000 0.590000 0.330000 0.820000 0.030000 0.740000 0.560000 0.950000 0.620000 ;0.210000 0.380000 0.770000 0.080000 0.260000 0.640000 0.460000 0.790000 0.310000 0.410000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.840000 0.800000 0.420000 0.580000 0.670000 0.070000 0.360000 ;0.690000 0.870000 0.310000 0.600000 0.760000 0.200000 0.380000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.450000 0.380000 0.280000 0.590000 0.620000 0.230000 0.810000 ;0.320000 0.190000 0.680000 0.140000 0.090000 0.940000 0.170000 ];\r\nWexp=[6 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.207000 0.288000 0.180000 0.595000 0.748000 0.459000 0.802000 0.387000 0.027000 0.090000 ;0.450000 0.982000 0.694000 0.613000 0.486000 0.423000 0.685000 0.847000 0.432000 0.604000 ];\r\nWexp=[4 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.750000 0.970000 0.820000 0.840000 0.680000 0.780000 0.730000 0.270000 0.220000 0.150000 ;0.130000 0.920000 0.390000 0.320000 0.230000 0.080000 0.800000 0.330000 0.720000 0.590000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.140000 0.600000 0.950000 0.160000 0.650000 0.580000 0.910000 0.230000 0.020000 ;0.120000 0.510000 0.530000 0.280000 0.350000 0.070000 0.400000 0.930000 0.490000 0.090000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.545000 0.527000 0.500000 0.727000 0.018000 0.400000 0.191000 0.982000 0.409000 0.591000 ;0.945000 0.745000 0.355000 0.673000 0.045000 0.118000 0.682000 0.827000 0.645000 0.482000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.930000 0.980000 0.470000 0.810000 0.830000 0.460000 0.510000 0.540000 ;0.490000 0.640000 0.170000 0.290000 0.140000 0.440000 0.590000 0.760000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.580000 ;0.330000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.640000 0.820000 0.700000 0.480000 0.520000 0.610000 0.060000 0.240000 0.300000 ;0.550000 0.450000 0.090000 0.030000 0.850000 0.670000 0.760000 0.360000 0.790000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 ;0.900000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.100000 0.040000 0.110000 0.650000 0.250000 0.570000 0.480000 0.150000 0.800000 ;0.550000 0.020000 0.920000 0.080000 0.700000 0.360000 0.910000 0.710000 0.820000 0.850000 ];\r\nWexp=[5 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.890000 0.060000 0.090000 0.750000 0.730000 0.810000 0.950000 0.660000 0.390000 ;0.530000 0.970000 0.610000 0.670000 0.690000 0.380000 0.590000 0.300000 0.720000 0.110000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.870000 0.600000 0.860000 0.830000 0.680000 0.810000 0.700000 0.920000 0.760000 ;0.170000 0.510000 0.330000 0.050000 0.240000 0.030000 0.410000 0.480000 0.520000 ];\r\nWexp=[9 9];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.940000 0.720000 0.810000 0.220000 0.280000 0.530000 0.440000 0.160000 0.880000 0.970000 ;0.120000 0.030000 0.470000 0.560000 0.380000 0.340000 0.690000 0.090000 0.250000 0.750000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.410000 0.360000 0.230000 0.140000 0.180000 0.050000 0.500000 0.270000 0.090000 0.450000 ;0.680000 0.950000 0.910000 0.860000 0.730000 0.550000 0.590000 0.820000 0.640000 0.770000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.278000 0.852000 0.370000 0.824000 0.389000 0.704000 0.546000 0.204000 0.296000 0.056000 ;0.833000 0.315000 0.991000 0.028000 0.907000 0.630000 0.361000 0.037000 0.065000 0.954000 ];\r\nWexp=[7 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.713000 0.657000 0.778000 0.435000 0.565000 0.870000 0.963000 0.343000 0.481000 0.593000 ;0.287000 0.333000 0.454000 0.130000 0.370000 0.759000 0.176000 0.611000 0.231000 0.398000 ];\r\nWexp=[10 6];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.590000 0.750000 0.650000 0.900000 0.740000 0.880000 0.850000 ;0.400000 0.070000 0.540000 0.380000 0.570000 0.150000 0.490000 ];\r\nWexp=[7 7];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.110000 0.920000 0.540000 0.840000 0.380000 0.770000 0.900000 0.490000 0.870000 0.750000 ;0.620000 0.480000 0.330000 0.440000 0.890000 0.130000 0.430000 0.080000 0.340000 0.560000 ];\r\nWexp=[10 5];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.480000 0.650000 0.770000 0.690000 0.720000 0.560000 0.660000 0.550000 0.510000 0.730000 ;0.310000 0.440000 0.300000 0.060000 0.200000 0.420000 0.030000 0.070000 0.110000 0.140000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.900000 0.680000 0.600000 0.800000 ;0.350000 0.050000 0.170000 0.880000 ];\r\nWexp=[4 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.730000 0.910000 0.450000 0.640000 0.090000 ;0.550000 0.360000 0.270000 0.820000 0.180000 ];\r\nWexp=[4 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.530000 0.740000 0.410000 0.320000 0.820000 0.970000 0.620000 0.500000 0.710000 0.090000 ;0.180000 0.760000 0.380000 0.150000 0.470000 0.210000 0.560000 0.120000 0.590000 0.440000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.487000 0.092000 0.714000 0.160000 0.504000 0.277000 0.479000 0.605000 0.462000 0.832000 ;0.210000 0.824000 0.118000 0.387000 0.664000 0.874000 0.445000 0.739000 0.546000 0.017000 ];\r\nWexp=[8 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.100000 ;0.400000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.688000 0.872000 0.615000 0.477000 0.734000 0.624000 0.394000 0.532000 0.954000 0.817000 ;0.193000 0.119000 0.349000 0.073000 0.037000 0.009000 0.128000 0.303000 0.046000 0.064000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.910000 0.550000 0.300000 0.570000 0.920000 0.400000 0.450000 0.150000 0.110000 0.190000 ;0.090000 0.790000 0.890000 0.740000 0.850000 0.940000 0.340000 0.380000 0.720000 0.260000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.723000 0.639000 0.824000 0.697000 0.840000 0.882000 0.437000 0.782000 0.588000 0.218000 ;0.345000 0.151000 0.067000 0.849000 0.815000 0.235000 0.521000 0.765000 0.950000 0.681000 ];\r\nWexp=[9 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.150000 0.350000 0.090000 0.110000 0.330000 0.220000 ;0.390000 0.460000 0.850000 0.700000 0.570000 0.610000 0.500000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.850000 0.790000 0.550000 0.380000 0.300000 0.400000 0.770000 0.740000 0.320000 0.570000 ;0.260000 0.210000 0.110000 0.130000 0.020000 0.040000 0.230000 0.190000 0.090000 0.060000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.961000 0.330000 0.010000 0.816000 0.583000 0.913000 0.893000 0.951000 0.126000 0.398000 ;0.767000 0.029000 0.262000 0.641000 0.175000 0.544000 0.359000 0.932000 0.680000 0.476000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 ;0.700000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.240000 0.050000 0.190000 0.110000 0.920000 0.590000 0.730000 0.380000 0.780000 0.950000 ;0.860000 0.700000 0.430000 0.620000 0.220000 0.540000 0.410000 0.890000 0.680000 0.490000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\n% function GJam_Qual_2014d\r\n% % \r\n% %War\r\n% fn='D-small-attempt0.in';\r\n% %fn='D-large.in';\r\n% [data] = read_file(fn); % \r\n% \r\n% fidG = fopen('D-small-output.out', 'w');\r\n% %fidG = fopen('D-large-output001.out', 'w');\r\n% tic\r\n% \r\n% for i=1:size(data,2) % Cell array has N rows of cases\r\n% % m=sort(data{i},2);\r\n%  m=data{i};\r\n%  dw = dWar(m) ;% \r\n%  w = War(m) ;%  \r\n%  \r\n%    fprintf('Case #%i: %i %i\\n',i,dw,w);\r\n%    fprintf(fidG,'Case #%i: %i %i\\n',i,dw,w);\r\n%     \r\n% end\r\n% toc\r\n% \r\n% fclose(fidG);\r\n% \r\n% end\r\n% \r\n% function dw=dWar(m)\r\n% % Post contest\r\n% % Lie to burn opponent best pieces\r\n%  N=sort(m(1,:));\r\n%  K=sort(m(2,:));\r\n%  \r\n%  dw=0;\r\n%  for i=1:length(N)\r\n%   if N(i)\u003eK(1) % Lie to above to beat lowest\r\n%    dw=dw+1;\r\n%    K=K(2:end);\r\n%   else % Lie to just below best\r\n%    K=K(1:end-1);\r\n%   end\r\n%  end\r\n%  \r\n% end\r\n% \r\n% function w=War(m)\r\n% % Optimal truthful strategy\r\n% % Best lucky sequence\r\n%  w=0;\r\n% \r\n%  Nm=sort(m(1,:));\r\n%  Km=sort(m(2,:));\r\n%  \r\n%  Nmz=[Nm' ones(size(Nm,2),1)];\r\n%  Kmz=[Km' zeros(size(Km,2),1)];\r\n%  z=[Nmz;Kmz]; \r\n%  z=sortrows(z,-1);\r\n%  \r\n%  while ~isempty(z)\r\n%   ptr1=find(z(:,2)==1,1,'last');\r\n%   ptr0=find(z(1:ptr1,2)==0,1,'last');\r\n%   if isempty(ptr0)\r\n%    % score\r\n%    w=w+1;\r\n%    z(ptr1,:)=[];\r\n%    ptr0=find(z(:,2)==0,1,'last');\r\n%    z(ptr0,:)=[];  \r\n%   else\r\n%    z(ptr1,:)=[];\r\n%    z(ptr0,:)=[];  \r\n%   end\r\n%  end \r\n%  % Create worst Ken/B Scenario\r\n%  \r\n% end\r\n% \r\n% \r\n% function [d] = read_file(fn)\r\n% % Read whole array then parse\r\n% % dlmread valid for numeric arrays\r\n%  m=dlmread(fn);\r\n%  m(1,:)=[];\r\n%  for i=1:size(m,1)/3\r\n%   d{i}=m(3*i-1:3*i,1:m(3*i-2,1));\r\n%  end\r\n%  \r\n% end % read_file\r\n% Data Set file\r\n%4\r\n%1\r\n%0.5\r\n%0.6\r\n%2\r\n%0.7 0.2\r\n%0.8 0.3\r\n%3\r\n%0.5 0.1 0.9\r\n%0.6 0.4 0.3\r\n%9\r\n%0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n%0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n\r\n\r\n\r\n\r\n\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":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-04-19T14:08:56.000Z","updated_at":"2014-04-19T15:00:47.000Z","published_at":"2014-04-19T15:00:47.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/2974486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 Qualifier Deceitful War\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\u003eMy condensed summary of the problem statement.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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[A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\\n\\nA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\\nDeceitful A Wins 8\\nOptimal Honest A Wins 4]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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 Deceitful Wins, Optimal Honest Wins\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw: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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Deceitful Solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\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:\"optimal\"","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:\"optimal\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"optimal\"","","\"","optimal","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda340\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fb60fbda200\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fb60fbd9620\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda5c0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fb60fbda520\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fb60fbda480\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fb60fbda3e0\u003e":"tag:\"optimal\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda3e0\u003e":"tag:\"optimal\""},"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":"cody-search","password":"78X075ddcV44","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:\"optimal\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"optimal\"","","\"","optimal","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda340\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fb60fbda200\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fb60fbd9620\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda5c0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fb60fbda520\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fb60fbda480\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fb60fbda3e0\u003e":"tag:\"optimal\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fb60fbda3e0\u003e":"tag:\"optimal\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":60642,"difficulty_rating":"easy-medium"},{"id":44237,"difficulty_rating":"medium"},{"id":44236,"difficulty_rating":"medium"},{"id":46938,"difficulty_rating":"medium-hard"},{"id":44239,"difficulty_rating":"hard"},{"id":2291,"difficulty_rating":"unrated"}]}}