{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1257,"title":"PONG 001: Player  vs Wall, 4 Lives, Interactive download","description":"Variation of the Original Classic PONG game brought to Cody.\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m PONG_Interactive_001a.m\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4 PONG Interactive 63 Returns\u003e (MP4)\r\n\r\n\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 10 hits, a score of 450 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/p\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\"\u003ePONG_Interactive_001a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\"\u003ePONG Interactive 63 Returns\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 10 hits, a score of 450 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_001_solver(paddle,ball)\r\n %  paddle=500; % position y % min max paddle [50 950]\r\n %  ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n %\r\n % Output Paddle movement : pdir range [-1 1]\r\n %\r\n % Paddle Size is +/- 50 from paddle value\r\n % Predict ball location and move to within +/- 50\r\n % or Load PONG_001_solver.m from Interactive Play with file create\r\n \r\npdir = randi([-1 1]);\r\n \r\n \r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.10; % Speed increase factor\r\n spfy=1.05; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=50; % Paddle Quantized Movement  (1/2 Paddle)\r\n maxLives=4;\r\n maxHits=100;\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_001_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1 allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move : Hopefully I got the Mirror solutions right\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       % draw ball\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 40+11*lives 35-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=1000 % To the right\r\n      ball(1)=1000-(ball(1)-1000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 10 hits to Score 450 or Less\r\n\r\nassert(score\u003c=450,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-10T05:51:19.000Z","updated_at":"2026-02-07T15:54:36.000Z","published_at":"2013-02-10T06:57:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_001a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Interactive 63 Returns\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 Up, -1 is Down, 0-No move\\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 10 hits, a score of 450 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1254,"title":"PACMAT 06 - Optimized Ghosts, Equal Speed, Inf Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m PACMAT_Interactive.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4 14 Lives Interactive\u003e (MP4)  Best Score seen is 9 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 500 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\"\u003ePACMAT_Interactive.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\"\u003e14 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 9 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 500 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function  [newdir]=PACMAT_solver(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=PACMAT_solver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  %if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 500*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-08T04:11:21.000Z","updated_at":"2025-12-03T08:52:46.000Z","published_at":"2013-02-08T04:48:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e14 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 9 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 500 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1255,"title":"PACMAT 07 - Optimized Ghosts, PAC 2X Ghost Speed, 4 Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m PACMAT_Interactive2X.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4 PAC2X 1 Life Interactive\u003e (MP4)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4 Alfonso 398\u003e (MP4)\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves and 4 Lives\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\"\u003ePACMAT_Interactive2X.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\"\u003ePAC2X 1 Life Interactive\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\"\u003eAlfonso 398\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\nmv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 ];\r\nend\r\nmv(1);\r\nmv(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',5000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003c4 \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2 % PAC Speed Multiplier\r\n  if lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n movepac=movepac+1;\r\n [curdir]=PACMAT_2Xsolver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2x\r\nif lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves and lives\u003c4\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 5000,score )) );\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-09T03:33:37.000Z","updated_at":"2025-12-03T15:28:58.000Z","published_at":"2013-02-09T04:11:24.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive2X.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePAC2X 1 Life Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso 398\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1313,"title":"PACMAT 09 - Awesome Tunnelling Ghosts, Equal Speed, 20 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m PACMAT_Interactive_009a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4 11 Lives Interactive\u003e (MP4)  Best Score seen is 11 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\"\u003ePACMAT_Interactive_009a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\"\u003e11 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 11 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT9_1Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=20;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:1\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT9_1Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 20000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-02T19:16:46.000Z","updated_at":"2025-12-03T15:31:49.000Z","published_at":"2013-03-03T03:24:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_009a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e11 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 11 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1314,"title":"PACMAT 08 - Awesome Tunneling Ghosts, 2X Speed, 6 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m PACMAT_Interactive_008a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4 492 Moves Interactive\u003e (MP4)  Best Score seen is Zero Lives lost, 492 moves.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m\"\u003ePACMAT_Interactive_008a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4\"\u003e492 Moves Interactive\u003c/a\u003e (MP4)  Best Score seen is Zero Lives lost, 492 moves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions\u003c/p\u003e","function_template":"function ans = PACMAT8_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];","test_suite":"%%\r\nfeval(@assignin,'caller','score',6000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=6;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT8_2Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 6000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-03T04:08:07.000Z","updated_at":"2013-03-03T04:17:37.000Z","published_at":"2013-03-03T04:17:37.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_008a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e492 Moves Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is Zero Lives lost, 492 moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1257,"title":"PONG 001: Player  vs Wall, 4 Lives, Interactive download","description":"Variation of the Original Classic PONG game brought to Cody.\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m PONG_Interactive_001a.m\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4 PONG Interactive 63 Returns\u003e (MP4)\r\n\r\n\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 10 hits, a score of 450 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/p\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\"\u003ePONG_Interactive_001a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\"\u003ePONG Interactive 63 Returns\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 10 hits, a score of 450 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_001_solver(paddle,ball)\r\n %  paddle=500; % position y % min max paddle [50 950]\r\n %  ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n %\r\n % Output Paddle movement : pdir range [-1 1]\r\n %\r\n % Paddle Size is +/- 50 from paddle value\r\n % Predict ball location and move to within +/- 50\r\n % or Load PONG_001_solver.m from Interactive Play with file create\r\n \r\npdir = randi([-1 1]);\r\n \r\n \r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.10; % Speed increase factor\r\n spfy=1.05; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=50; % Paddle Quantized Movement  (1/2 Paddle)\r\n maxLives=4;\r\n maxHits=100;\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_001_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1 allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move : Hopefully I got the Mirror solutions right\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       % draw ball\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 40+11*lives 35-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=1000 % To the right\r\n      ball(1)=1000-(ball(1)-1000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 10 hits to Score 450 or Less\r\n\r\nassert(score\u003c=450,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-10T05:51:19.000Z","updated_at":"2026-02-07T15:54:36.000Z","published_at":"2013-02-10T06:57:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_001a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Interactive 63 Returns\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 Up, -1 is Down, 0-No move\\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 10 hits, a score of 450 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1254,"title":"PACMAT 06 - Optimized Ghosts, Equal Speed, Inf Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m PACMAT_Interactive.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4 14 Lives Interactive\u003e (MP4)  Best Score seen is 9 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 500 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\"\u003ePACMAT_Interactive.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\"\u003e14 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 9 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 500 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function  [newdir]=PACMAT_solver(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',10000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=PACMAT_solver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  %if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 500*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 10000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-08T04:11:21.000Z","updated_at":"2025-12-03T08:52:46.000Z","published_at":"2013-02-08T04:48:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Inf lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_006c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_video_14_764.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e14 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 9 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 500 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1255,"title":"PACMAT 07 - Optimized Ghosts, PAC 2X Ghost Speed, 4 Lives; Interactive Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m PACMAT_Interactive2X.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4 PAC2X 1 Life Interactive\u003e (MP4)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4 Alfonso 398\u003e (MP4)\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves and 4 Lives\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\"\u003ePACMAT_Interactive2X.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\"\u003ePAC2X 1 Life Interactive\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\"\u003eAlfonso 398\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\nmv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 ];\r\nend\r\nmv(1);\r\nmv(1)=[];\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',5000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003c4 \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2 % PAC Speed Multiplier\r\n  if lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n movepac=movepac+1;\r\n [curdir]=PACMAT_2Xsolver(map);\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives+1;\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\nend % pac2x\r\nif lives\u003e3 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap no tunnel usage, Walls\r\n \r\n   gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n   \r\n% Ghost algor change   \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n     for gmov=1:4 % execute with a find?\r\n       if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n      end\r\n     else\r\n      gmov=[];\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves and lives\u003c4\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 5000,score )) );\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-09T03:33:37.000Z","updated_at":"2025-12-03T15:28:58.000Z","published_at":"2013-02-09T04:11:24.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost Speed, Four lives are available. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive2X.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_007a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive2X.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_1_548.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePAC2X 1 Life Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G004_2Xvideo_0_398.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso 398\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves and 4 Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Tunneling Ghosts and then Randomized Awesome Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1313,"title":"PACMAT 09 - Awesome Tunnelling Ghosts, Equal Speed, 20 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m PACMAT_Interactive_009a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4 11 Lives Interactive\u003e (MP4)  Best Score seen is 11 Lives.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\"\u003ePACMAT_Interactive_009a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\"\u003e11 Lives Interactive\u003c/a\u003e (MP4)  Best Score seen is 11 Lives.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/p\u003e","function_template":"function ans = PACMAT9_1Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=20;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:1\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT9_1Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 20000,score )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-02T19:16:46.000Z","updated_at":"2025-12-03T15:31:49.000Z","published_at":"2013-03-03T03:24:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. Twenty lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_009a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_009a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT9_1Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT9_1Xvideo_11_630.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e11 Lives Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is 11 Lives.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Awesome Tunnel Ghosts and 2X Speed PACMAT; Randomized Awesome Tunnel Ghosts to make them non-deterministic\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1314,"title":"PACMAT 08 - Awesome Tunneling Ghosts, 2X Speed, 6 Lives, Game Download","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls. \r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m PACMAT_Interactive_008a.m\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4 492 Moves Interactive\u003e (MP4)  Best Score seen is Zero Lives lost, 492 moves.\r\n\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Pass Criteria:* Clear all dots in less than 4000 moves\r\n\r\n*Scoring:* Moves + 1000 * Lives\r\n\r\n\r\n*Near Future:* Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT.  Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m\"\u003ePACMAT_Interactive_008a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4\"\u003e492 Moves Interactive\u003c/a\u003e (MP4)  Best Score seen is Zero Lives lost, 492 moves.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Clear all dots in less than 4000 moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Moves + 1000 * Lives\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions\u003c/p\u003e","function_template":"function ans = PACMAT8_2Xsolver(map)\r\npersistent mv\r\nif isempty(mv)\r\n mv=[2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1]; \r\nend\r\nmv(1);\r\nmv(1)=[];","test_suite":"%%\r\nfeval(@assignin,'caller','score',6000);\r\n%%\r\nmax_moves=4000; % Interactive approx 1000 moves\r\nmaxLives=6;\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=0; % Lives\r\n  movepac=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n for pac2x=1:2\r\n  if lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Died or Completed\r\n  movepac=movepac+1;\r\n\r\n  [curdir]=PACMAT8_2Xsolver(map);\r\n\r\n  [pmr, pmc]=find(map==2);\r\n\r\n if curdir\u003e0\r\n  if map(ptrpac+mapdelta(curdir))==-1\r\n   % Do nothing - Ran into a Wall\r\n  elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n   map(ptrpac)=0; % remove PAC from the board\r\n   lives=lives+1;\r\n   %if lives==0,break;end\r\n   % reset the board\r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);\r\n   continue; % Lost a Life\r\n  else % legal move\r\n   map(ptrpac)=0; % Eat Dot and clear PAC\r\n   ptrpac=ptrpac+mapdelta(curdir);\r\n   if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n   if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n   map(ptrpac)=2;\r\n  end\r\n end % curdir \u003e0\r\n\r\nend % pac2x\r\n\r\nif lives\u003emaxLives-1 || ~any(mod(map(:),10)==1),break;end % Completed\r\n\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  ghosts=find(map\u003e2);\r\n  ptrpac=find(map==2); % Target\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if gidx==15+nr \u0026\u0026 ptrpac==nr*(nc-2)+15 % Ghost Tunnel Adj\r\n    gmov=4;\r\n   end\r\n   if gidx==nr*(nc-2)+15 \u0026\u0026 ptrpac==15+nr % Ghost Tunnel Adj\r\n    gmov=2;\r\n   end\r\n\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives+1;\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap avoid walls and other ghosts Walls\r\n \r\n   gmap=map;\r\n       \r\n   ptctr=0;\r\n   gmap(gmap\u003e=0)=Inf;\r\n      \r\n    gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5\r\n    gmap(gidx)=Inf; % Ultimate target\r\n    gmap(ptrpac)=1; % Start at PACMAT and expand to ghost\r\n    while gmap(gidx)\u003e101 \u0026\u0026 ptctr\u003c100 % potential boxed dot\r\n % find dots, add a counter to distance form location, keep min value\r\n % when ptrpac gets a value it will be from nearest dot\r\n % find side with dmap(ptrpac)-1\r\n     ptctr=ptctr+1;\r\n     dpts=find(gmap==ptctr);\r\n     newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);\r\n% Ghost Tunnel Access\r\n     tunL=find(newpt_idx==15);\r\n     tunR=find(newpt_idx==nr*nc-16);\r\n     if ~isempty(tunL)\r\n      newpt_idx(tunL)=nr*(nc-2)+15;\r\n     end\r\n     if ~isempty(tunR)\r\n      newpt_idx(tunR)=15+nr;\r\n     end\r\n\r\n     gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);\r\n    end\r\n\r\n% Simplified by ghosts are walls: No Ghost Jumping\r\n    if ~isinf(gmap(gidx)) % Path(s) to Ghost found\r\n% Tunnel Check\r\n    gmov=[];\r\n    if gidx==15+nr % Tunnel\r\n     gmov=2;\r\n     if gmap(gidx+mapdelta(2))==gmap(gidx)-1\r\n      gmov=2;\r\n     else\r\n      gmov=4; % Possible error ghost onto ghost\r\n     end   \r\n    end\r\n\r\n    if gidx==nr*(nc-2)+15 % Tunnel\r\n      if gmap(gidx+mapdelta(4))==gmap(gidx)-1\r\n        gmov=4;\r\n      else\r\n        gmov=2; % Possible error ghost onto ghost\r\n      end\r\n     end\r\n    \r\n     if isempty(gmov) % Non-Tunnel Move\r\n      for gmov=1:4 % execute with a find?\r\n        if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end\r\n       end\r\n      end\r\n     else\r\n      gmov=[]; % No path to PACMAT found\r\n     end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n\r\n     %tunLtf=false;\r\n     %tunRtf=false;\r\n       if gidx==nr+15\r\n        if gmov==2 % Left Tunnel but go Right\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n          map(nr*(nc-2)+15)=10*i;\r\n          %tunLtf=true;\r\n        end\r\n       elseif gidx==nr*(nc-2)+15\r\n        if gmov==4 % Right Tunnel but go Left\r\n         map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n        else\r\n         % Tunnel\r\n         map(nr+15)=10*i;\r\n         %tunRtf=true;\r\n        end\r\n       else % Standard move\r\n        map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;\r\n       end\r\n    \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while any dots and \u003c max_moves maxLives\r\n%\r\ndots=length(find(mod(map,10)==1));\r\n%\r\nfprintf('moves %i\\n',movepac)\r\nfprintf('dots %i\\n',dots)\r\nfprintf('Lives Spent %i\\n',lives)\r\n%\r\n% To Pass need to leave at most 0 dots\r\nassert(dots==0,sprintf('Max Dots 0, Dots Remaining %i\\n',dots))\r\n\r\nscore= movepac + 1000*lives; % All dots must be removed\r\n\r\nfeval( @assignin,'caller','score',floor(min( 6000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-03-03T04:08:07.000Z","updated_at":"2013-03-03T04:17:37.000Z","published_at":"2013-03-03T04:17:37.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT requires clearing all the Yellow Dots. PACMAT moves at 2X Ghost speed. Six lives are available. Adjacent Ghosts will capture PACMAT. Awesome Ghosts use the tunnel. On Ghost capture everyone gets reset. These trained ghosts take the minimum path, including tunnel paths, to PACMAT assuming the other Ghosts are walls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Interactive.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Interactive_008a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Interactive_008a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PACMAT8_2Xsolver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT8_2Xvideo_492.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e492 Moves Interactive\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Best Score seen is Zero Lives lost, 492 moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Clear all dots in less than 4000 moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Moves + 1000 * Lives\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Randomized Awesome Tunnel Ghosts to make them non-deterministic to require Adaptive Bot solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"}],"term":"tag:\"keypressfcn\"","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:\"keypressfcn\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"keypressfcn\"","","\"","keypressfcn","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5a18\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4f269d5978\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4f269d50b8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5c98\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4f269d5bf8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4f269d5b58\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4f269d5ab8\u003e":"tag:\"keypressfcn\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5ab8\u003e":"tag:\"keypressfcn\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"keypressfcn\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"keypressfcn\"","","\"","keypressfcn","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5a18\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4f269d5978\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4f269d50b8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5c98\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4f269d5bf8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4f269d5b58\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4f269d5ab8\u003e":"tag:\"keypressfcn\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4f269d5ab8\u003e":"tag:\"keypressfcn\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1276,"difficulty_rating":"medium"},{"id":1257,"difficulty_rating":"medium"},{"id":1254,"difficulty_rating":"unrated"},{"id":1255,"difficulty_rating":"unrated"},{"id":1313,"difficulty_rating":"unrated"},{"id":1314,"difficulty_rating":"unrated"}]}}